簡體   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