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