툴바 이벤트에서 getSelected와 replace를 사용하는 방법

저는 toUni라는 함수를 호출하여 전체 텍스트 또는 선택된 텍스트(선택된 텍스트가 우선)를 처리하기 위한 간단한 버튼 컴포넌트를 작성하려고 하고 있습니다. 튜토리얼에서 간단한 버튼을 만들고 전체 컴포저(composer) 텍스트를 처리하여 처리된 텍스트를 컴포저 영역에 추가하는 것은 가능합니다. (이 경우 결과로 텍스트가 두 번 중복됩니다.)

컴포저 창에서 전체 텍스트를 어떻게 교체할 수 있을까요? (처리 과정을 거친 후)
컴포저 창에서 선택된 텍스트를 어떻게 가져올 수 있을까요?
컴포저 창에서 선택된 텍스트를 어떻게 교체할 수 있을까요? (처리 과정을 거친 후)

코드 중 다음이 있는 것을 확인했습니다.

    getSelected();
     replaceText();

하지만 e.getSelected(); 또는 e.replaceText(old, new);와 조합했을 때 작동하지 않으며, 피드백을 위해 알림 박스가 표시되지 않으므로 함수 불일치나 크래시가 발생한다고 추정합니다.

여기 있는 git 참조 코드에서 getText();와 addText()를 성공적으로 사용할 수 있습니다. 여기. 하지만 처리한 후 내용을 삭제하는 방법(addText()를 호출한 후 전체를 교체할 수 있도록)을 모르겠습니다.

하지만 저는 선택된 텍스트를 찾아 그 부분을 교체하는 방식을 선호합니다.

현재 제 코드는 아래에 있으며, 이는 수정 사항을 포함하여 전체 컴포저 텍스트의 두 번째 사본을 바로 아래에 추가합니다. 이는 사용자에게 혼란을 줍니다.
전체 텍스트를 완전히 교체하거나 … 아니면 “선택된” 단어만 처리해야 합니다. (또는 둘 다)

라이브 버전을 여기에 만들었습니다.

 


<script type="text/discourse-plugin" version="0.8">

  api.onToolbarCreate(function(toolbar) {
      
    toolbar.addButton({

      trimLeading: true,
      id: "buttonID",
      group: "insertions",
      label: "Pāḷi", // 왜 이것이 en.pali로 표시되나요?
      title: "add pali",  
      perform: function(e) {
      const sel = e.getText();
      //alert(sel);
      const vel = toUni(sel);
        return   e.addText("\n--------------------new text--------------------\n" + vel + "\n--------------------end text--------------------");
      }
    });
  });
      //e.replaceText(sel,"hello");
      //e.replaceSeelc
  
      //const  sel = e.selected();
     
      //let txt = "hello"; 
      //const sel = e.getSelected(0,100 );
  
function toUni(input) {
	if(!input || input == '') return input;
	//var nigahita = (DPR_prefs['nigahita']?'ṁ':'ṃ');
	//var Nigahita = (DPR_prefs['nigahita']?'Ṁ':'Ṃ');

	var nigahita = 'ṃ';
	var Nigahita = 'Ṃ';

	input = input.replace(/aa/g, 'ā').replace(/ii/g, 'ī').replace(/uu/g, 'ū').replace(/\.t/g, 'ṭ').replace(/\.d/g, 'ḍ').replace(/\"nk/g, 'ṅk').replace(/\"ng/g, 'ṅg').replace(/\.n/g, 'ṇ').replace(/\.m/g, nigahita).replace(/\u1E41/g, nigahita).replace(/\~n/g, 'ñ').replace(/\.l/g, 'ḷ').replace(/AA/g, 'Ā').replace(/II/g, 'Ī').replace(/UU/g, 'Ū').replace(/\.T/g, 'Ṭ').replace(/\.D/g, 'Ḍ').replace(/\"N/g, 'Ṅ').replace(/\.N/g, 'Ṇ').replace(/\.M/g, Nigahita).replace(/\~N/g, 'Ñ').replace(/\.L/g, 'Ḷ').replace(/\.ll/g,'ḹ').replace(/\.r/g,'ṛ').replace(/\.rr/g,'ṝ').replace(/\.s/g,'ṣ').replace(/"s/g,'ś').replace(/\.h/g,'ḥ');

	return input;
}
  
</script>
  

API 참고 문서는 있나요?

제 API 기술은 아직 초보 수준이라 오해한 부분이 있을 수 있지만, Discourse API를 역공학하는 방법을 찾고 계신 건가요?

이것이 내가 원하는 것인지 확신이 서지 않습니다. 단순히 몇 가지 JavaScript 함수를 호출하고 싶은 것뿐입니다. 함수들을 볼 수 있는 것 같긴 한데, toolevent는 소수의 함수만 접근할 수 있게 해 줍니다.

gettext와 addtext는 사용할 수 있지만, 그 외에는 거의 사용할 수 없습니다.
아래와 같은 기능을 모방하는 함수를 찾고 있습니다:
getselectedtext
replaceselectedtext

이것들은 사용 가능한 것으로 생각합니다.

솔직히 좀 무리한 시도일 거라고 생각했어요. :slightly_smiling_face: 'API 참조’라는 문구를 보고 한번 도전해 보려고 했거든요.

제 답변이 정말 엉뚱해서 이 분야에 대한 제 초보적인 수준이 드러났을 수도 있지만 (다시 같은 실수를 할 위험이 있지만 :slight_smile:) 아직 보지 않으셨다면 Developing Discourse Themes & Theme Components 에 좋은 일반적인 팁들이 꽤 있는 것 같습니다.

하지만 더 잘 아시는 분이 나타나서 실제로 도움이 될 만한 조언을 해 주시길 바랍니다. :crossed_fingers: :slight_smile:

음.. 그 튜토리얼을 조금 따라 해봤어요. 그래서 버튼 부분까지 왔거든요.hopefully 누군가가 toolbar event 클래스에서 getselected와 replaceselected를 어떻게 가져오는지에 대해 답변해 주길 바라요.