2010-01-09 4 views
9

Versuchen Sie zu finden, wo einzelne Tastaturkürzel in der jQuery-Version des TinyMCE-Editors deaktiviert werden. Derzeit ist die Liste der zulässigen Verknüpfungen ist:Beschränken Sie die Tastaturkürzel im TinyMCE-Editor

  • ctrl + z Undo
  • ctrl + y Redo
  • ctrl + b Bold
  • ctrl + i Kursiv
  • ctrl + u Unterstreichen
  • ctrl + 1-6h1-h6
  • ctrl + 7 p
  • ctrl + 8 div
  • ctrl + 9 Adresse

Derzeit Suchen Sie nach allen Verknüpfungen zu deaktivieren, aber Rückgängig, Wiederholen und fett. Der Rest ist in unserer Implementierung wegen der unerwünschten Formatierung unnormal.

Ich kann nicht scheinen, den Code zu finden, der diese Abkürzungen aktiviert. Können Sie darauf hinweisen, wo Sie diesen Code finden?

Antwort

4

Disable in Firefox getestet

Dies sollte Ihnen helfen, begonnen zu bekommen. Möglicherweise müssen Sie für andere Browser leere Verknüpfungen für ctrl+u und ctrl+i hinzufügen, aber dieser Code wurde getestet, um die Aktionen in Firefox zu deaktivieren. Führen Sie einfach nach der Initialisierung von tinyMCE ausgeführt wird (I getestet Mine in Firebug):

for(var i in tinyMCE.editors){ 
    var editor = tinyMCE.editors[i]; 
    for(var s in editor.shortcuts){ 
    var shortcut = editor.shortcuts[s]; 
    // Remove all shortcuts except Bold (66), Redo (89), Undo (90) 
    if(!(s == "ctrl,,,66" || s == "ctrl,,,89" || s == "ctrl,,,90")){ 
     // This completely removes the shortcuts 
     delete editor.shortcuts[s]; 

     // You could use this instead, which just disables it, but still keeps 
     // browser functionality (like CMD+U = show source in FF Mac) from interrupting the flow 
     // shortcut.func = function(){ }; 
    } 
    } 
} 

Hintergrund

Es scheint, um die Linie 2294 von jscripts/tiny_mce/classes/Editor.js (Aus dem vollständigen Entwicklung download) definiert werden.

Sie sind auch in einem Array in der Variablen Editor.shortcuts gespeichert. Die Schlüssel werden mit speziellen Zeichen und dann mit dem Schlüsselcode wie folgt eingestellt: ctrl,,,90.

Aber von dem, was ich sagen kann, scheint es, dass viele Browser ihre eigenen Versionen von ctrl+b implementieren, ctrl+i und ctrl+u und dass nur Browser Gecko nicht:

// Add default shortcuts for gecko 
if (isGecko) { 
    t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold'); 
    t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic'); 
    t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline'); 
} 

Aber wenn man sich dort um, Sie kann sehen, wie sie es ermöglichen. Weitere Informationen finden Sie in der Editor.addShortcut Methode. Sie können das Standardverhalten möglicherweise überschreiben.

+0

ich meine Antwort aktualisiert, um eine Probe zu enthalten, wie die Verknüpfungen deaktivieren Sie nicht wollen. –

+0

Nun, diese Antwort lässt keine Wünsche offen. :) Zieh meins. +1 –

+0

@Pekka gut, danke :) Zuerst dachte ich, die Quelle musste bearbeitet werden, aber ihr Shortcut-System ist eigentlich ziemlich cool. –

3

OK, also konnte ich das zur Arbeit bringen. Ich war in der Lage, firefox mit Dougs Code oben zu blockieren, um IE zu veranlassen, den Schlüssel zu deaktivieren, ich wollte, dass ich diesen Code nach Dougs Codeblock hinzufügen musste.

var $iframe = $('iframe').contents().get(0); 

$($iframe).keydown(function(oEvent) { 
    //italics (ctrl+i & Cmd+i [Safari doesn't allow you to test for Cmd]) 
    if (oEvent.keyCode == '73' && (oEvent.metaKey || oEvent.ctrlKey)){ 
     oEvent.preventDefault(); 
     return false; 
    } 

    //underline (ctrl+u & cmd+u [Safari doesn't allow you to test for cmd]) 
    if (oEvent.keyCode == '85' && (oEvent.metaKey || oEvent.ctrlKey)){ 
     oEvent.preventDefault(); 
     return false; 
    } 
}); 

Also im Grunde TinyMCE lädt dynamisch den Editor als iFrame so deaktiviert ich die Strg + u und Strg + i vom iFrame. Ich, was bis das iFrame ist fertig geladen und dann ein keydown Ereignis zuordnen und schnüffeln für Strg + i und Strg + i (I schnüffeln auch Cmd + i und Cmd + u für den Mac [obwohl Safari gewonnen ‚t lassen Sie cmd testen nach dieser link. Alles andere deaktiviert ist, dass ich mit Behinderungen brauchen.

2

Beispiel-Code wechseln hin und her aus der Gewährung des IB und U in IE und FF.

var ctrlKey = false; 

function removeShortcuts(){ 
    var e = tinyMCE.activeEditor; 
    for (var s in e.shortcuts){ 
    if(s=="ctrl,,,73" || s=="ctrl,,,85" || s="ctrl,,,66"){ 
     e.shortcuts[s].func = function(){}; 
    } 
    } 
    e.onKeyUp.add(onKeyUp); 
    e.onKeyDown.add(onKeyDown); 
} 

function resetShortcuts(){ 
    var e = tinyMCE.activeEditor; 
    if (isGecko) { 
    e.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold'); 
    e.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic'); 
    e.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline'); 
    } 
    e.onKeyUp.remove(onKeyUp); 
    e.onKeyDown.remove(onKeyDown); 
} 


function onKeyUp(editor, event){ 
    if(event.keyCode == 17){ 
    ctrlKey = false; 
    } 
} 

function onKeyDown(editor, event){ 
    if(event.keyCode == 17){ 
    ctrlKey = true; 
    } 
    if(ctrlKey && (event.keyCode == 73 || event.keyCode == 85 || event.keyCode == 66){ 
    tinymce.dom.Event.cancel(event); 
    } 
} 
8

Obwohl dies eine akzeptierte Antwort hat ähm, ich würde teilen, was ich mit tinymce4 benutze. Sie können einfach editor.addShortcut('ctrl+u', "", "") zum init Ereignismethode innerhalb des setup Methode hinzufügen, die die zusätzliche Verknüpfung außer Kraft setzen wird

Beispiel:

tinyMCE.init({ 
    // Your options here 
    setup: function(editor) { 
     editor.on("init", function(){ 
      editor.addShortcut("ctrl+u", "", ""); 
     }); 
    } 
}) 

Sie können eine beliebige Verknüpfung ersetzen können, mit denen Sie deaktivieren möchten ctrl+u im obigen Code.