禁用CKEditor缩进插件

时间:2014-01-10 21:21:16

标签: javascript ckeditor

我需要完全禁用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>)上的选项卡时,插件不起作用。有趣的是,它在列表的第二级(ol > li > ol > li)中按TAB时有效,它不会在第二级下面生成更多的嵌套列表。我知道我的插件已经执行了,因为我在我的插件中插入了alert()进行测试。至少,这是我的Firefox中发生的事情。

但我需要完全禁用缩进,不仅仅是在级别之上&gt; 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。

3 个答案:

答案 0 :(得分:3)

我刚刚快速查看了,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文件夹中找到所需的发布版本。

(实际上并不需要一个必需的插件,这是不常见的,但是对于列表不需要缩进也不常见;-))

答案 1 :(得分:1)

尝试将代码更改为:

editor = CKEDITOR.replace( 'element_name' );

editor.on('key', function(e) {
var key = e.data.keyCode;      
if(key==9) {
return false;
}

应该可行,只需将'element_name'更改为您要用ckeditor替换的textarea

答案 2 :(得分:1)

内置的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