【发布时间】: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>')
}
我尝试过的一件事是添加一个保存事件,它将 <br /> 和 // 的所有实例替换为空,但因为我是通过 CKGedit 插件执行此操作的,所以它不会调用正常的 CKEditor 保存。
您还可以看到,我尝试在插入文本时替换
,但此时尚未输入换行符。 .replace(/\n$|\r$|\r\n$|<br \>$/g, '')
我考虑过其他解决方法,例如在 Dokuwiki 中添加一个触发器,当保存新页面时它会替换文本,但我宁愿在问题实际出现的地方解决这个问题。
总结:如何防止CKEditor自动插入新行
【问题讨论】:
标签: javascript ckeditor dokuwiki