안녕하세요,
이전에 게시글을 작성했지만, 요청이 너무 구체적이어서 답변을 받지 못한 것 같습니다. 그래서 다시 시도해 봅니다. 작성 편집기에 훅을 걸어서 사용자가 특정 문자열(예: --)을 입력한 뒤 쿼리를 입력하면 검색 결과를 담은 팝업을 표시하고, 사용자가 그중 하나를 클릭하면 쿼리가 입력되었던 위치에 일반 링크가 삽입되도록 하고 싶습니다. 작성 편집기 요소에 접근하고 사용자가 게시글을 작성할 때 플러그인이 알림을 받기 위한 최선의 방법은 무엇일까요? 플러그인 API와 GitHub의 몇 가지 플러그인을 살펴봤지만 좋은 예시를 찾지 못했습니다.
감사합니다.
Alexander
기존 예제를 따르려는 것 같습니다.
아마도 여기서 확인해 보시면 좋을 것 같습니다: discourse/app/assets/javascripts/discourse/components/d-editor.js.es6 at f62b8990acb9ce4af8bfc67fc80dc0847177e458 · discourse/discourse · GitHub
구체적으로:
didInsertElement() {
this._super(...arguments);
const $editorInput = $(this.element.querySelector(".d-editor-input"));
this._applyEmojiAutocomplete($editorInput);
this._applyCategoryHashtagAutocomplete($editorInput);
그리고 이 부분도 참고해 보세요:
_applyCategoryHashtagAutocomplete() {
const siteSettings = this.siteSettings;
$(this.element.querySelector(".d-editor-input")).autocomplete({
template: findRawTemplate("category-tag-autocomplete"),
key: "#",
afterComplete: () => this._focusTextArea(),
transformComplete: obj => {
return obj.text;
},
dataSource: term => {
if (term.match(/\s/)) {
return null;
}
return searchCategoryTag(term, siteSettings);
},
triggerRule: (textarea, opts) => {
return categoryHashtagTriggerRule(textarea, opts);
}
});
},
참고로 저는 이 방식을 직접 사용해 본 적은 없지만, 제 추측으로는 이 정도가 될 것 같습니다.
@merefield 님, 안녕하세요.
정말 감사합니다. 이미 꽤 도움이 되고 있습니다. 그런데 이걸 초기화하는 가장 좋은 위치가 어디일까요? 플러그인의 초기화 함수에서 .d-editor-input 요소가 존재하는지 확인하고 그에 따라 연결하는 방식이 좋을까요, 아니면 컴포저 뷰의 확장으로 플러그인을 등록할 수 있는 곳이 있어서 사용자가 실제로 컴포저를 열 때만 로드되도록 할 수 있을까요.
감사합니다.
알렉산더
이것은 컴포넌트입니다. 따라서 편리하게 초기화 프로그램(initializer)에서 didInsertElement() 메서드를 오버라이드하고 싶을 것입니다.
예시:
withPluginApi('0.8.12', (api) => {
api.modifyClass('component:load-more'
출처: https://github.com/paviliondev/discourse-topic-previews/blob/master/assets/javascripts/discourse/initializers/preview-edits.js.es6
운이 좋다면 단순히 this._super();를 호출하고 끝에 추가 로직을 붙여넣기만 하면 됩니다.
완벽합니다! 정말 감사합니다. 이 방법으로 해결될 것 같습니다.