[英]disable CKEditor indentation plugin
我需要完全禁用CKEditor(4.2或4.3)中有序和无序列表( <ul>
, <ol>
)的缩进,因为我需要将HTML的(非常有限的子集)转换成另一种不支持的标记语言缩进。
我尝试了几种方法,但是没有运气:
尝试1:通过配置删除插件
config.removePlugins = 'indent,indentlist,indentblock';
我猜这是行不通的,因为似乎需要这些插件-在从网站构建CKEditor软件包时,您无法删除它们。
通过FireBug控制台查看CKEDITOR.plugins
,这些插件仍然存在。 甚至不存在自己的插件文件夹-似乎它们是内置的。
尝试2:覆盖TAB键
我创建了一个新插件disableTab
,该插件完全不执行任何操作(执行时return true;
除外)。
该插件已注册为TAB键击键的处理程序:
config.keystrokes = [
[ 9, 'disableTab' ] // disable TAB key to avoid nesting!
];
不幸的是,在列表的第一级( <li>
或<ol>
)上按tab时,该插件不起作用。 有趣的是,当在列表的第二级( ol > li > ol > li
)中按TAB时,它可以工作,但在第二级以下不会产生更多的嵌套列表。 我知道我的插件已执行,因为我在我的插件中插入了alert()
进行测试。 至少,这就是我的Firefox中发生的情况。
但是我需要完全禁用缩进,不仅限于> 2以上的级别。
尝试3:在编辑器配置中通过blockedKeystrokes
阻止按键:
不起作用,即使它应该根据文档:
config.blockedKeystrokes = [ 9 ];
尝试4:在运行时删除击键
根据API文档,此代码应禁用按键,但是由于某些原因它不起作用:
for (instance in CKEDITOR.instances) {
var editor = CKEDITOR.instances[instance];
editor.setKeystroke(9, false);
}
任何想法如何在CKEditor中删除列表的缩进?
我不明白为什么这些方法都不起作用。 如果您知道原因,请告诉我。
更新:
有趣的是,除了按下TAB键外,几乎所有的按键事件都向我致意:
editor.on('key', function(e) { alert ("hi"); return false; });
因此,看来我的设置(LinuxMint 13 [Gnome 2] + Firefox 18 + CKEditor 4.2)没有触发TAB键的键事件处理程序。 也许缩进插件使用其他事件? 模糊?
更新2:
这是Firefox(也许只有linux)的问题。 Chrome或Internet Explorer可以使用几种方法。
我只是快速检查了一下,尽管list
插件需要indentlist
list
,但是如果您:
0)从http://github.com/ckeditor/ckeditor-dev下载CKEditor来源
1)移除
requires: 'indentlist',
来自plugins/list/plugin.js
2)移除
indentlist: 1,
indentblock: 1,
来自dev/builder/build-config.js
3)使用dev/builder/build.sh
构建发行包(在Windows上使用“ Git Bash” shell)
您将在dev/builder/release/ckeditor
文件夹中找到所需的发行版本。
(并不真正需要一个必需的插件是很不常见的,但是不需要列表的缩进也很不常见;-))
尝试将您的代码更改为:
editor = CKEDITOR.replace( 'element_name' );
editor.on('key', function(e) {
var key = e.data.keyCode;
if(key==9) {
return false;
}
那应该起作用,只需将“ element_name”更改为要用ckeditor替换的文本区域
内置的indentlist插件在处理事件时会取消事件冒泡,因此不会触发Tab键的标准事件侦听器。 如果您将事件的优先级设置为首先运行,则可以捕获Tab键事件并阻止其缩进列表。
例如:
editor.on('key', function (evt) {
if (editor.mode != 'wysiwyg') {
return false;
}
if (evt.data.keyCode == this.indentKey || evt.data.keyCode == 9) {
evt.cancel();
return false;
}
}, null, null, 1);
如果只想限制编号列表上的缩进,则可以添加以下条件:
editor.on('key', function (evt) {
var path = editor.elementPath();
if (editor.mode != 'wysiwyg') {
return false;
}
if (evt.data.keyCode == this.indentKey || evt.data.keyCode == 9 && path.contains('ol')) {
evt.cancel();
return false;
}
}, null, null, 1);
在此处的文档中概述了事件优先级: https : //ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_event.html#method-on
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.