【问题标题】:How can I prevent line breaks from being inserted when calling insertText?调用 insertText 时如何防止插入换行符?
【发布时间】:2020-06-09 14:30:27
【问题描述】:

我正在创建一个 CKeditor 插件以将 DokuWiki Encrypted Passwords plugin 与通过 CKGEdit plugin 提供的 CKEditor 集成

基本上,它所做的只是添加一个按钮,当您单击该按钮并突出显示一些文本时,它将在查看页面时将higlighted text 替换为<decrypt>U2FsdGVkX19N38+3QA5dTlRVRwzVaEW4E1TlehveNVw=</decrypt>,这将成为一个可点击的链接,提示您输入解密密钥,然后显示文本。

我遇到的问题是如果加密字符串太长,CKEditor 会在需要时插入<br/>s。反过来,这些在 page.txt 文件中被转换为//,这会导致解密中断,因为加密文本不再相同。

我尝试将解密块包装在前置标签中:

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

这确实起作用,因为不再自动插入换行符,而是导致解密块在页面上呈现为纯文本。

以下是相关代码:

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>')
}

我尝试过的一件事是添加一个保存事件,它将 &lt;br /&gt;// 的所有实例替换为空,但因为我是通过 CKGedit 插件执行此操作的,所以它不会调用正常的 CKEditor 保存。

您还可以看到,我尝试在插入文本时替换
,但此时尚未输入换行符。 .replace(/\n$|\r$|\r\n$|&lt;br \&gt;$/g, '')

我考虑过其他解决方法,例如在 Dokuwiki 中添加一个触发器,当保存新页面时它会替换文本,但我宁愿在问题实际出现的地方解决这个问题。

总结:如何防止CKEditor自动插入新行

【问题讨论】:

    标签: javascript ckeditor dokuwiki


    【解决方案1】:

    仍然对更清洁的解决方案持开放态度,但我暂时需要一些工作,所以我将其添加到 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;
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多