Как настроить горячие клавиши чтобы обрамлять выделенный текст bbcode?

del

turbot пишет

del

Случайно отправилось. :blush: Но раз поднял тему, то пришлось делать. zelenamanazakasamanasaka, держите:
Custom Buttons + в секцию "Инициализация" новой или существующей кнопки (Как добавить кнопку(помощь для новичка)):

Выделить код

Код:

addEventListener('keydown', e=> {
    var BBCode, clipboard, clipboardText, br = window.gBrowser.selectedBrowser;
    if (document.activeElement != br) return;
    if (e.altKey && e.shiftKey && !e.ctrlKey && !e.metaKey) {
// Вставить BBCode по сочетанию клавиш Alt + Shift + код клавиши (не зависит от раскладки клавиатуры) в активную текстовую форму на странице
// Посмотреть коды клавиш можно здесь: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Constants_for_keyCode_value
            switch (e.keyCode) {
                case 66: BBCode = 'b'; break; // Alt + Shift + B - жирный текст
                case 73: BBCode = 'i'; break; // Alt + Shift + I - наклонный текст
                case 76: BBCode = 'url'; break; // Alt + Shift + L - ссылка
                case 81: BBCode = 'quote'; break;  // Alt + Shift + Q - Цитата
                case 82: BBCode = 'quote'; clipboardText = gClipboard.read(); break;  // Alt + Shift + R - Цитата с текстом из буфера обмена
                case 83: BBCode = 'spoiler'; break; // Alt + Shift + S - спойлер
                case 84: BBCode = 'spoiler'; clipboard = gClipboard.read(); break;  // Alt + Shift + T - Спойлер с названием из буфера обмена
                case 85: BBCode = 'url'; isURL(); break;  // Alt + Shift + U - Ссылка с ссылкой из буфера обмена
                // и т.д.
                default: return;
            }
        e.preventDefault(); e.stopPropagation();
        br.isRemoteBrowser ? br.messageManager.loadFrameScript(
            `data:,(${encodeURIComponent(insert + ')("' + BBCode + ', ' + clipboard + ', ' + clipboardText + '");')}`, false
        ) : insert(BBCode, clipboard, clipboardText);
    }

    function isURL() {
        var uri, url = gClipboard.read().trim();
        if (!url) return;
        try {uri = makeURI(url)} catch(ex) {}
        if (uri) {
            clipboard = url;
        }
    }

    function insert(bb, cl, txt) {
        var elm = Services.focus.focusedElement;
        if (!elm || !("editor" in elm) || elm.hasAttribute("readonly")) return;
        var editor = elm.editor.QueryInterface(Components.interfaces.nsIPlaintextEditor);

        cl ? editor.insertText("[" + bb + "=" + cl + "]" + editor.selection + "[/" + bb + "]")
           : editor.insertText("[" + bb + "]" + (txt ? txt : editor.selection) + "[/" + bb + "]");
    }
}, false, gBrowser);

Добавлять свои - по образцу. Думаю разберетесь - кое-что откомментировал. На основе кода Dumby.

Выделить код

Код:

br.isRemoteBrowser

- кнопка, по идее, должна и с мультипроцессным режимом работать, но не проверял.

сэнкс, ну с кнопками понятно, а горячие клавиши там есть для вставки ббкодов?

turbot
спасибо за код
zelenamanazakasamanasaka
вы действительно читать по-русски не умеете, или так, попридуриваться пришли, типа клоуна

Выделить код

Код:

// Вставить BBCode по сочетанию клавиш Alt + Shift + код клавиши (не зависит от раскладки клавиатуры) в активную текстовую форму на странице
// Посмотреть коды клавиш можно здесь: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Constants_for_keyCode_value
            switch (e.keyCode) {
                case 66: BBCode = 'b'; break; // Alt + Shift + B - жирный текст
                case 73: BBCode = 'i'; break; // Alt + Shift + I - наклонный текст
                case 76: BBCode = 'url'; break; // Alt + Shift + L - ссылка
                case 81: BBCode = 'quote'; break;  // Alt + Shift + Q - Цитата
                case 82: BBCode = 'quote'; clipboardText = gClipboard.read(); break;  // Alt + Shift + R - Цитата с текстом из буфера обмена
                case 83: BBCode = 'spoiler'; break; // Alt + Shift + S - спойлер
                case 84: BBCode = 'spoiler'; clipboard = gClipboard.read(); break;  // Alt + Shift + T - Спойлер с названием из буфера обмена
                case 85: BBCode = 'url'; isURL(); break;  // Alt + Shift + U - Ссылка с ссылкой из буфера обмена
                // и т.д.

Ничего лучше CustomBB (Расширение для вставки BB-кодов - помогите довести до ума | Форум Mozilla Россия) я не видел. Жаль, что с последней версией (требование цифровой подписи) отвалилось.