Я пытаюсь написать простой компонент кнопки, который вызывает функцию toUni для обработки либо всего текста, либо выделенного текста (выделенный вариант предпочтительнее). Я могу создать простую кнопку по примеру из руководства, обработать весь текст в редакторе и добавить обработанный текст обратно в редактор. (В результате получается дублирование текста).
Как заменить весь текст в окне редактора (после обработки)?
Как получить выделенный текст из окна редактора?
Как заменить выделенный текст в окне редактора (после обработки)?
Я вижу некоторый код, где используются:
getSelected();
replaceText();
Но при попытке использовать e.getSelected(); или e.replaceText(old, new); ничего не работает. Я предполагаю, что возникает несоответствие функций или ошибка, так как мое всплывающее окно с уведомлением (alert) не появляется.
Я успешно использую 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>