저는 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>