Как я могу предотвратить вставку разрывов строк при вызове insertText? - PullRequest
0 голосов
/ 25 февраля 2020

Я создаю плагин CKeditor для интеграции плагина DokuWiki Encrypted Passwords с CKEditor, предоставляемым через плагин CKGEdit

По сути, все, что он делает, это добавляет кнопка, которая, когда вы щелкаете по ней с выделенным текстом, заменяет higlighted text на <decrypt>U2FsdGVkX19N38+3QA5dTlRVRwzVaEW4E1TlehveNVw=</decrypt>, при просмотре страницы она превращается в кликабельную ссылку, которая запрашивает ключ дешифрования, а затем показывает текст.

у меня проблема, если строка шифрования слишком длинная, то CKEditor вставляет <br/> s, когда это необходимо. Они, в свою очередь, преобразуются в // в файле page.txt, что приводит к прерыванию дешифрования, поскольку текст шифрования больше не совпадает.

Я попытался обернуть блок расшифровки в теги pre:

<code><pre>
<decrypt>U2FsdGVkX19GucuXTn9YK063K5rubz3OVIUuanWcx7Vm35qjvIulEUqOrQeS8RRD
J0/3HlQXJHSMpFcqFkKE8B3GuyXLYgEqSNBeCbI0levJZpIxA/4daa12kpgM3Y4s
kZh6ABQ3VYs0J3CSce5XFdoKo5C8E1t8R6OU0DAyjBc=</decrypt>

, который работал, так как больше не было разрывов строк, вставленных автоматически, но заставляет блок расшифровки отображать как обычный текст на странице.

Вот соответствующий код:

CKEDITOR.plugins.add('dokuencrypt', {
    icons: 'dokuencrypt',
    init: function (editor) {

        editor.addCommand('encryptSelected', {
            exec: function (editor) {
                handleEncrypt(editor);
            }
        });

        editor.ui.addButton('dokuencrypt', {
            label: 'Encrypt text',
            command: 'encryptSelected',
        });
    }
});

// handles encrypt and decrypt text
function handleEncrypt(editor) {
    var sample = sample = editor.getSelection().getSelectedText();
    // right here is where I want to prevent the new lines from being inserted
    editor.insertText('<decrypt>' + GibberishAES.enc(sample, passElt.value).replace(/\n$|\r$|\r\n$|<br\>$/g, '') + '</decrypt>')
}

Одна вещь, которую я попробовал, это добавить событие сохранения, которое заменяет все экземпляры <br /> и // ничем, но потому что я ' Я делаю это через плагин CKGedit, он не вызывает обычного сохранения CKEditor.

Как вы можете видеть, я пытался заменить при вставке текста, но в этот момент разрывы строк не вводились. .replace(/\n$|\r$|\r\n$|<br \>$/g, '')

Я рассмотрел другие обходные пути, такие как добавление триггера в Dokuwiki, который при сохранении новой страницы заменяет текст, но я бы скорее исправил это там, где проблема действительно есть.

Резюме: как я могу предотвратить автоматический ввод новых строк в CKEditor

1 Ответ

0 голосов
/ 26 февраля 2020

Все еще открыт для более чистых решений, но мне нужно было кое-что для работы, поэтому я добавил это в Dokuwiki javascript, который удаляет ненужные \\ и позволяет расшифровке работать правильно.

jQuery(document).ready(function () {
    let encryptedTitles = document.querySelectorAll('.encryptedpasswords');
    for (let i = 0; i < encryptedTitles.length; i++) {
        let oldTitle = encryptedTitles[i].title;
        let newTitle = oldTitle.replace(/\\/g, "");

        encryptedTitles[i].title = newTitle;
    }
});
...