我正在尝试编写一个简单的按钮组件来调用一个名为 toUni 的函数,该函数可以处理全部文本或选定文本(优先处理选定文本)。我可以从教程中创建一个简单的按钮,处理整个编辑器文本,并将我处理后的文本添加到编辑器区域。(双重重复文本是结果)。
在进行一些处理后,如何替换编辑器窗口中的所有文本?
如何从编辑器窗口获取选定文本?
如何替换编辑器窗口中的选定文本(在进行处理后)。
我在 代码 中看到一些代码,其中包含:
getSelected();
replaceText();
但是当我将它与 e.getSelected(); 或 e.replaceText(old, new); 结合使用时,它不起作用,我假设是函数不匹配或崩溃,因为它没有显示我的警报框来提供反馈。
我可以使用您在 这里 的 git ref 代码中的 getText(); 和 addText() 成功。但我无法弄清楚如何删除内容,以便我可以 addText() 然后替换所有内容。
但我更喜欢找到选定的文本并替换它。
目前我的代码如下,它在下面添加了整个编辑器文本的第二个副本,但进行了一些修改。这会让用户感到困惑。
我需要完全替换文本……或者只处理“选定的”单词。(或两者兼有)
我在这里有一个实时版本 here
<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>