Подтвердить что ты не робот

Ярлык клавиатуры для вставки текста (мягкий дефис) с помощью CKEditor

Как я могу сказать CKEditor вставить мягкий дефис (­) с определенной комбинацией клавиш, например Ctrl + - (дефис), как в Word? Я знаю, что могу набрать Alt + 0173, но моему клиенту это не нравится.

4b9b3361

Ответ 1

CKEditor 4

Мы будем использовать CKEditor встроенный API привязки клавиш для сопоставления пользовательской команды с пользовательским сочетанием клавиш Ctrl + Shift + - (поскольку только Ctrl + - запускает ярлык "уменьшить масштаб" во многих браузерах). Мы обернем это все в плагин для модульности:

CKEDITOR.plugins.add('soft-hyphen-shortcut-key', {
    init: function (editor) {
        var shortcutKeys = CKEDITOR.CTRL + CKEDITOR.SHIFT + 189;

        editor.addCommand('insertSoftHyphen', {
            exec: function (editor, data) {
                editor.insertHtml('­');
            }
        });

        editor.keystrokeHandler.keystrokes[shortcutKeys] = 'insertSoftHyphen';
    }
});

В этой реализации используется метод редактора insertHtml() для добавления объекта &shy; HTML в документ в позиции курсора, когда пользователь нажимает комбинацию клавиш. Мы можем инициализировать новый экземпляр редактора с помощью <textarea name="editor">, который загружает наш плагин:

CKEDITOR.replace('editor', {
    extraPlugins: 'soft-hyphen-shortcut-key'
});

Здесь демонстрация (мне пришлось сделать эти внешние фрагменты кода, которые не будут работать с CKEditor <iframe>).

CKEditor 5

Эта версия находится в alpha на момент написания, поэтому API и документация могут быть неполными. Версия 5 резко изменяет архитектуру проекта, включая переход на ES6 для исходного кода, поэтому я не буду демонстрировать, как создать плагин для этой версии (нам нужно было бы его создать). Вместо этого мы создадим ту же функциональность, что и с плагином, когда мы инициализируем редактор:

ClassicEditor
    .create(document.querySelector('#editor1'))
    .then(function (editor) {
        var shortcutKeys = [ 'Ctrl', 'Shift', 189 ];
        var softHyphen = '\u00AD';

        editor.keystrokes.set(shortcutKeys, function () {
            editor.execute('input', { text: softHyphen });
        });
    });

Версия 5, похоже, пока не включает эквивалент insertHtml() из версии 4, поэтому в примере используется символ Unicode для мягкого дефиса. Здесь демо для v5.

Для тех, кто заинтересован в создании настраиваемого плагина и команды для версии 5, см. документацию для CKEditor 5 Framework. Для этого требуется среда, в которой мы можем установить пакеты инфраструктуры npm. Мы будем использовать ES6 для расширения классов framework и Webpack для их объединения.


Быстрая заметка для решения проблемы: мы можем сопоставить комбинации клавиш аналогично в TinyMCE (демонстрация):

tinymce.init({
    selector: "#editor",
    init_instance_callback: function (editor) {
        editor.shortcuts.add("ctrl+shift+189", 'Insert Soft Hyphen', function () {
            editor.execCommand('mceInsertContent', false, '\u00AD');
        })
    }
});

Ответ 2

Вместо Ctrl + - вы можете использовать Alt + -. Потому что Ctrl + - выделенный по умолчанию ключ браузера, который использует для уменьшения.

Вот пример сортировки:

tinymce.init({
    selector: "#editor",
    init_instance_callback: function (editor) {
        editor.shortcuts.add("alt+189", 'Insert Soft Hyphen', function () {
            editor.execCommand('mceInsertContent', false, '&shy;');
        })
    }
});