繁体   English   中英

禁用CKEditor缩进插件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM