В настоящее время я работаю над задачей, где это необходимо:
- , чтобы добавить специальную кнопку на панель инструментов CKEditor
- эта кнопка должна открыть диалог
диалоговое окно является пользовательским, мы не используем конфигурацию по умолчанию, но это.
CKEDITOR.plugins.add ('addTextButton', {// ... editor.addCommand ('textBlockDialog', новый CKEDITOR.dialogCommand)('addTextDialog', {allowContent: true})); editor.ui.addButton ('addTextButton', {// ...
мы можем выбрать некоторый текст из диалогового окнаи вставьте его в CKEditor на месте курсора
Я решил реализовать эту функциональность следующим образом: - сначала перехватить событие beforeDestroy - затем я занимаю позицию курсора с помощью window.getSelection ()
ckeditorInstance.on('beforeDestroy', event => {
this.ngModel = event.editor.getData();
this.start = event.editor.window.$.getSelection();
this.cursorPosition = event.editor.window.$.getSelection().anchorOffset;
const range = this.start.getRangeAt(0);
if (this.start.anchorOffset !== 0) {
range.insertNode(document.createTextNode('node'));
}
if (this.start.anchorOffset === 0) {
// there I have to add condition whether it is the start
position of cursor or there wasn`t selection at all
}
Вопрос в том, можно ли определить, является ли это начальная позиция курсора или вообще не было выбора. Во всех этих случаях window.getSelection () возвращает один и тот же объект с anchorOffset = 0
чемЯ должен реализовать логику для добавления текста из диалогового окна в CKEditor в начале, когда позиция курсора равна 0, и в конце, когда нет выбора.