Ограничить сочетания клавиш в редакторе TinyMCE - PullRequest
9 голосов
/ 09 января 2010

Попытка найти, где отключить отдельные сочетания клавиш в версии jQuery редактора TinyMCE. В настоящее время список допустимых ярлыков:

  • ctrl + z Отменить
  • ctrl + y Повтор
  • ctrl + b Полужирный
  • ctrl + i Курсив
  • ctrl + u Подчеркивание
  • ctrl + 1-6 h1-h6
  • ctrl + 7 p
  • ctrl + 8 div
  • ctrl + 9 адрес

В настоящее время ищется отключить все ярлыки, кроме Отменить, Повторить и полужирный. Все остальное неоправданно в нашей реализации из-за нежелательного форматирования.

Я не могу найти код, который включает эти ярлыки. Можете ли вы указать, где найти этот код.

Ответы [ 5 ]

8 голосов
/ 06 декабря 2013

Несмотря на то, что у этого есть принятый ответ, я поделился бы тем, что я использую с tinymce4. Вы можете просто добавить editor.addShortcut('ctrl+u', "", "") к методу init в методе setup, который переопределит добавленный ярлык

Пример:

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

Вы можете заменить любой ярлык, который хотите отключить, на ctrl+u в приведенном выше коде.

4 голосов
/ 09 января 2010

Отключено Протестировано в Firefox

Это должно помочь вам начать. Возможно, вам придется добавить пустые ярлыки для ctrl+u и ctrl+i, чтобы отключить его в других браузерах, но этот код был протестирован для отключения действий в Firefox. Просто запустите после инициализации tinyMCE (я проверил мой в 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(){  };
    }
  }
}

Фон

Похоже, что он определен вокруг строки 2294 из jscripts/tiny_mce/classes/Editor.js (из полной загрузки разработки).

Кроме того, они хранятся в массиве в переменной Editor.shortcuts. Эти ключи имеют специальные символы, а затем код ключа, например: ctrl,,,90.

Но из того, что я могу сказать, кажется, что многие браузеры реализуют свои собственные версии ctrl+b, ctrl+i и ctrl+u и что только браузеры Gecko этого не делают:

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

Но если вы посмотрите вокруг, вы увидите, как они его активируют.

Кроме того, обратите внимание на метод Editor.addShortcut. Вы можете изменить поведение по умолчанию.

3 голосов
/ 07 июля 2011

Пример кода для переключения между разрешением I B и U в IE и 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);
  }
}
3 голосов
/ 10 января 2010

ОК, так что я смог заставить это работать. Я смог заблокировать Firefox, используя приведенный выше код Дуга, чтобы IE отключил нужные мне ключи. Мне пришлось добавить этот код после блока кода Дуга.

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

Так что в основном TinyMCE динамически загружает редактор как iFrame, поэтому я отключил Ctrl + u и Ctrl + i из iFrame. Что до того, как iFrame завершит загрузку, а затем прикрепит событие keydown и снифф для Ctrl + i и Ctrl + i (я также снифф Cmd + i Cmd + u для Mac [хотя Safari не позволит вам проверить cmd по этой ссылке . Все остальное отключено, что мне нужно отключить.

0 голосов
/ 16 февраля 2017

Для TinyMCE v4: Список сочетаний клавиш, доступных в теле редактора

tinyMCE.init({       
    setup: function(editor) {
        editor.on("init", function(){
            editor.shortcuts.remove('meta+u', '', ''); // "meta" maps to Command on Mac and Ctrl on PC          
        });
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...