2010-01-09 25 views
9

Próba znalezienia miejsca, w którym można wyłączyć poszczególne skróty klawiaturowe w edytorze TinyMCE jQuery. Obecnie lista dopuszczalnych skróty to:Ograniczanie skrótów klawiaturowych w edytorze TinyMCE

  • Ctrl z Cofanie
  • Ctrl Y Powtórz
  • Ctrl b Pogrubienie
  • Ctrl i kursywa
  • ctrl + u Podkreślenie
  • Ctrl + 1-6H1-H6
  • Ctrl 7 P
  • Ctrl 8 Div
  • Ctrl 9 adres

Obecnie szukanie, aby wyłączyć wszystkie skróty, ale Cofnij, Ponów i pogrubione. Reszta jest nieważna w naszej implementacji z powodu niechcianego formatowania.

Nie mogę znaleźć kodu, który włącza te skróty. Czy możesz wskazać, gdzie znaleźć ten kod.

Odpowiedz

4

Wyłącz Testowane Firefox

Powinno to pomóc Ci zacząć. Być może trzeba będzie dodać puste skróty do ctrl+u i ctrl+i, aby wyłączyć je w innych przeglądarkach, ale ten kod został przetestowany w celu wyłączenia akcji w Firefoksie. Wystarczy uruchomić po inicjalizacji TinyMCE wyczerpał (testowałem kopalni w 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(){ }; 
    } 
    } 
} 

tła

Wydaje się być zdefiniowane wokół linii 2294 z jscripts/tiny_mce/classes/Editor.js (z pełnego pobrania rozwoju).

Ponadto są one przechowywane w tablicy w zmiennej Editor.shortcuts. Klawisze są konfigurowane za pomocą specjalnych znaków, a następnie kodu klucza: ctrl,,,90.

Ale z tego, co mogę powiedzieć, to wydaje się, że wiele przeglądarka realizować własne wersje ctrl+b, ctrl+i i ctrl+u i że tylko przeglądarek Gecko nie:

// 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'); 
} 

Ale jeśli rozejrzeć się tam, widzę, jak to umożliwiają.

Zobacz także metodę Editor.addShortcut. Możesz być w stanie zastąpić domyślne zachowanie.

+0

zaktualizowałem moją odpowiedź na to próbki, w jaki sposób wyłączyć skróty nie chciałeś. –

+0

Cóż, ta odpowiedź nie pozostawia nic do życzenia. :) Wycofuję moje. +1 –

+0

@Pekka dobrze, dziękuję :) Początkowo myślałem, że źródło musi być edytowane, ale ich system skrótów jest całkiem niezły. –

3

OK, więc udało mi się to uruchomić. Udało mi się zablokować firefox za pomocą kodu Douga powyżej, aby uzyskać IE, aby wyłączyć klucz. Chciałem dodać ten kod po bloku kodu Douga.

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; 
    } 
}); 

Więc w zasadzie TinyMCE dynamicznie ładuje edytora jako iFrame więc wyłączył Ctrl + U i Ctrl + I z iFrame. I co do iframe zakończeniu ładowania, a następnie dołączyć keyDown i powąchać dla Ctrl + I i Ctrl + I (ja też powąchać Cmd + i i Cmd + u dla mac [chociaż Safari wygrał „t pozwalają przetestować cmd według tego link. Wszystko inne jest wyłączony że muszę wyłączone.

2

Przykładowy kod, aby przełączyć iz powrotem pozwalając IB iu zarówno w IE i 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

Mimo że ma to zaakceptowaną odpowiedź er, chciałbym podzielić się tym, co używam z tinymce4. Można po prostu dodać editor.addShortcut('ctrl+u', "", "") metody init zdarzeń w metodzie setup, który zastąpi dodany skrót

Przykład:

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

można zastąpić dowolny skrót, który chcesz wyłączyć z ctrl+u w powyższym kodzie.

Powiązane problemy