Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№127625-04-2016 19:50:15

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

Re: Обсуждение кнопок CB

bunda1
Не, в старом варианте я что-то ковырял, но там почти ничего не работало и понять что на что влияет - не представлялось возможным. А щас мне гемороя со своей хватает. Пока даже не смотрел ничего, кроме опций в менюшке. :)

Отсутствует

 

№127725-04-2016 20:01:58

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 45.0

Re: Обсуждение кнопок CB

bunda1
Ссылки и картинки начала цеплять - подскажи, что делать? Да, и хоткей не устанавливается

Отсутствует

 

№127825-04-2016 20:03:55

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

Re: Обсуждение кнопок CB

bezuma
thumb2.png

Отсутствует

 

№127925-04-2016 20:08:34

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 45.0

Re: Обсуждение кнопок CB

turbot
Аналогично проставлено, может конфликт где-то?

Отсутствует

 

№128025-04-2016 20:32:00

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Обсуждение кнопок CB

bezuma пишет

Да, и хоткей не устанавливается

Какой хоткей?

Отсутствует

 

№128125-04-2016 20:58:48

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 45.0

Re: Обсуждение кнопок CB

В смысле горячая клавиша на CB

Отсутствует

 

№128226-04-2016 03:07:09

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

Re: Обсуждение кнопок CB

Dumby

скрытый текст
Ок, допустим я разобрался. :dumb: oncommand при кликах мышью не работает из-за menuPopup.onmouseup = menuPopup.onmousedown =e=> e.preventDefault(); (но я все-рано не понимаю почему. Почему click - работает, а command - нет?) Это можно обойти? Чтоб и меню не закрывалось и command по кликам мышью работало?
Если нет, и установить два аттрибута, и oncommand и onclick, - единственный вариант, то как сделать, чтобы, при команде с клавиатуры, меню не закрывалось? Или никак, если верить mdn?

И почему

Выделить код

Код:

mItem.setAttribute('oncommand', 'if (event.shiftKey) {event.preventDefault(); event.stopPropagation(); custombuttons.clearPrefs("' + m.pref + '")};' + browserRestart);

- на menu не срабатывает? Первое нажатие комбинации клавиш все-равно субменю открывает...

Отредактировано turbot (26-04-2016 03:54:16)

Отсутствует

 

№128326-04-2016 06:02:07

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Обсуждение кнопок CB

turbot
Чем атрибут не угодил?

Отсутствует

 

№128426-04-2016 08:33:30

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

Re: Обсуждение кнопок CB

Dumby
Всем устраивает, кроме того, что я о нем не знал. :) Спасибо.

скрытый текст
Но легче не стало. Если я меняю листенер на command, то не обрабатывается contextmenu, а для command ведь нельзя event.button задать, да? То есть, либо третий листенер вешать, либо отказываться от сброса параметров по пкм, либо все нахрен переделывать. Я в упадке...
Это совсем плохо, если я туда еще на contextmenu впихну листенер?

И главное, как быть со вторым вопросом? Что первая команда на пункте типа menu - открывает его субменю? и preventDefault не помогает. Может есть еще какой волшебный атрибут? :)


Dumby
Если я вас уже этой ерундой и своей тупостью утомил, вы прямо скажите. Я не обижусь. Честно. :) Буду сам ковырять, потихоньку.

Отсутствует

 

№128526-04-2016 15:03:07

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Обсуждение кнопок CB

turbot пишет

Если я вас уже этой ерундой и своей тупостью утомил

Вовсе нет. Нисколько.

скрытый текст

И главное, как быть со вторым вопросом? Что первая команда на пункте типа menu - открывает его субменю? и preventDefault не помогает.

Так у <menu>, как такового, вроде же нет события command.
А, кстати, почему ты не хочешь чтобы некая «первая команда» открывала субменю?

Если я меняю листенер на command, то не обрабатывается contextmenu

Ага, предлагаешь опять угадать что, как и где ты меняешь?

И вообще, - будь ты проще. Оставь пока в покое свою кнопку.
Сделай себе другую, какую-нибудь максимально простую болванку.
Закодируй в ней что требуется по принципу «как слышица, так и пишица».
И возись уже с ней, до полной ясности.

Вот, например, попробуй понажимать такую.
И если у тебя на клавиатуре есть клавиша,
(не знаю как её назвать, но эта та, которая 93 KeyboardEvent.DOM_VK_CONTEXT_MENU)
то и её тоже понажимай.

Выделить код

Код:

var data = [
    "foo",
    ,
    {"bar": [
        "sub1",
        "sub2",
        "sub3"
    ]},
    "baz"
];
var popup = this.appendChild(document.createElement("menupopup"));
popup.setAttribute("position", "after_start");
popup.setAttribute("oncommand", "parentNode.bla(event);");
popup.setAttribute("oncontextmenu", "event.preventDefault(); parentNode.bla(event);");

for(var item of data) {
    if (!item)
        popup.appendChild(document.createElement("menuseparator"));

    else if (typeof item == "string") {
        var menuitem = popup.appendChild(document.createElement("menuitem"));
        menuitem.setAttribute("closemenu", "none");
        menuitem.setAttribute("label", item);
    }
    else {
        var [str] = Object.keys(item);
        var menu = popup.appendChild(document.createElement("menu"));
        menu.setAttribute("label", str);

        var subPopup = menu.appendChild(document.createElement("menupopup"));

        for(var subitem of item[str]) {
            var menuitem = subPopup.appendChild(document.createElement("menuitem"));
            menuitem.setAttribute("closemenu", "none");
            menuitem.setAttribute("label", subitem);
        }
    }
}
this._handleClick = () => popup.openPopup(this);
this.bla = e => {
    if ("busy" in this) return; this.busy = true;
    var {target} = e, {label} = target;

    target.label = label + " " + e.type;
    target.style.cssText = "color: red !important; font-weight: bold !important;";
    setTimeout(() => {
        target.label = label;
        target.removeAttribute("style");
        delete this.busy;
    }, 700);
}

Отредактировано Dumby (26-04-2016 15:04:39)

Отсутствует

 

№128626-04-2016 18:31:40

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Dumby

скрытый текст

Оставь пока в покое свою кнопку.

Мне бы только домучать работу с клавиатуры, а дальше уже сам буду, потихоньку, в человеческий вид ее переписывать.

Ага, предлагаешь опять угадать что, как и где ты меняешь?

Виноват. Я про то, что добавил сброс значений с модификатором shift, но если с менюитемами нет проблем, то первый shift+enter на меню - всегда раскрывает их субменю. Т.е., я понял почему там preventDefault на oncommand не работает, спасибо, но может можно для этих меню вообще отрубить открытие субменю по enter'у, а лучше по shift+enter? Благо, стрелками открыть можно. Или это можно сделать, только если еще один листенер вешать? dash2.gif Да и какой? Я пробовал и keydown и keyup и keypress...

то и её тоже понажимай.

Угу, спасибо. Не подумал об этом. Это, конечно, вариант, вот только

если у тебя на клавиатуре есть клавиша

... Если уж делать, хотелось бы найти вариант без "если".

Черт, как же мой, в мучения выношенный, выкидыш жутко смотрится рядом твоей "напобаловаця"...  Но я своего все равно люблю! :D

P.S.: Да, я смотрю, KeyboardEvent.keyCode как deprecated помечен? А в остальных нет независящих от платформы кодов для клавиш? Или плохо смотрел?

Отсутствует

 

№128727-04-2016 07:28:28

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Обсуждение кнопок CB

turbot пишет

может можно для этих меню вообще отрубить открытие субменю по enter'у, а лучше по shift+enter? Благо, стрелками открыть можно. Или это можно сделать, только если еще один листенер вешать? dash2.gif Да и какой? Я пробовал и keydown и keyup и keypress...

Что-то мне это тоже на башку не налазит. Может так попробуй :/.

скрытый текст

Выделить код

Код:

var data = [
    "foo",
    ,
    {"bar": [
        "sub1",
        "sub2",
        "sub3"
    ]},
    "baz"
];
var popup = this.appendChild(document.createElement("menupopup"));
popup.setAttribute("position", "after_start");
popup.setAttribute("oncommand", "parentNode.bla(event);");
popup.setAttribute("oncontextmenu", "event.preventDefault(); parentNode.bla(event);");

for(var item of data) {
    if (!item)
        popup.appendChild(document.createElement("menuseparator"));

    else if (typeof item == "string") {
        var menuitem = popup.appendChild(document.createElement("menuitem"));
        menuitem.setAttribute("closemenu", "none");
        menuitem.setAttribute("label", item);
    }
    else {
        var [str] = Object.keys(item);
        var menu = popup.appendChild(document.createElement("menu"));
        menu.setAttribute("label", str);

        var subPopup = menu.appendChild(document.createElement("menupopup"));

        for(var subitem of item[str]) {
            var menuitem = subPopup.appendChild(document.createElement("menuitem"));
            menuitem.setAttribute("closemenu", "none");
            menuitem.setAttribute("label", subitem);
        }
    }
}
this._handleClick = () => popup.openPopup(this);
this.bla = e => {
    if ("busy" in this) return; this.busy = true;
    var {target} = e, {label} = target;

    var action = e.type == "contextmenu" || e.shiftKey ? "RESET" : "set";
    target.label = label + " " + action;
    target.style.cssText = "color: red !important; font-weight: bold !important;";
    setTimeout(() => {
        target.label = label;
        target.removeAttribute("style");
        delete this.busy;
    }, 700);
}
var keyListener = {
    get data() {
        delete this.data;
        return this.data = "code" in KeyboardEvent.prototype
            ? {key: "code", val: "Enter"}
            : {key: "keyCode", val: KeyboardEvent.DOM_VK_RETURN};
    },
    handleEvent: function(e) {
        this[e.type](e);
    },
    popupshown: function(e) {
        if (e.target != popup) return;
        popup.addEventListener("popuphidden", this, false);
        window.addEventListener("keydown", this, true);
    },
    popuphidden: function(e) {
        if (e.target != popup) return;
        popup.removeEventListener("popuphidden", this, false);
        window.removeEventListener("keydown", this, true);
    },
    keydown: function(e) {
        if (e.shiftKey && !e.ctrlKey && !e.altKey && e[this.data.key] == this.data.val) {
            var target = popup.querySelector("menu[_moz-menuactive]:not([open])");
            if (!target) return;
            var {firstChild} = target;
            firstChild.remove();
            setTimeout(() => target.appendChild(firstChild), 0);
            self.bla({target: target, type: "command", shiftKey: true});
        }
    }
};
addEventListener("popupshown", keyListener, false, popup);

Отредактировано Dumby (27-04-2016 07:37:01)

Отсутствует

 

№128827-04-2016 18:06:22

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Dumby
Хех, спасибо, впечатляет. Вот только я не потяну такое в свою кнопку запихнуть. :D

В общем, решил пока обойтись тем, что есть. Последняя просьба (клянусь): не подскажешь, как клавиша DOM_VK_CONTEXT_MENU по правильному называется, чтобы в описании указать. Не могу нагуглить.

Отсутствует

 

№128901-05-2016 02:26:23

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Обсуждение кнопок CB

turbot пишет

не подскажешь, как клавиша DOM_VK_CONTEXT_MENU по правильному называется

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

скрытый текст

В общем, решил пока обойтись тем, что есть.

Что-то не могу сообразить, а как собственно сам #quick-aboutconfig-menupopup
у тебя с клавиатуры открывается. В Инициализации, вроде, нет для этого специального кода.
И во вкладке Код нет строки для поддержки стандартного CB сочетания клавиш.

Вот только я не потяну такое в свою кнопку запихнуть.

Это не так сложно, как кажется. Можно ничего в твоём коде не менять,
а просто попробовать добавить в конец что-нибудь типа

Выделить код

Код:

addEventListener("popupshown", {
    handleEvent: function(e) {
        this[e.type](e);
    },
    popupshown: function(e) {
        if (e.target != menuPopup) return;
        menuPopup.addEventListener("popuphidden", this, false);
        window.addEventListener("keydown", this, true);
    },
    popuphidden: function(e) {
        if (e.target != menuPopup) return;
        menuPopup.removeEventListener("popuphidden", this, false);
        window.removeEventListener("keydown", this, true);
    },
    popupshowing: function(e) {
        e.target.parentNode.removeEventListener("popupshowing", this, false);
        e.preventDefault();
    },
    get old() {
        delete this.old;
        this.e = new MouseEvent("contextmenu", {});
        return this.old = parseInt(Services.appinfo.platformVersion) < 25;
    },
    get prop() {
        delete this.prop;
        if ("key" in KeyboardEvent.prototype) this.prop = "key", this.val = "Enter";
        else this.prop = "keyCode", this.val = KeyboardEvent.DOM_VK_RETURN;
        return this.prop;
    },
    keydown: function(e) {
        if (!e.shiftKey || e.ctrlKey || e.altKey || e[this.prop] != this.val) return;
        var target = menuPopup.querySelector("menu[_moz-menuactive]:not([open])");
        if (!target) return;

        this.old ? target.addEventListener("popupshowing", this, false) : e.stopPropagation();
        target.dispatchEvent(this.e);
        menuPopup.dispatchEvent(this.e);
    }
}, false, menuPopup);

Отсутствует

 

№129001-05-2016 05:59:08

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 48.0

Re: Обсуждение кнопок CB

Dumby
Спасибо. :beer:

а как собственно сам #quick-aboutconfig-menupopup
у тебя с клавиатуры открывается

Забыл вставить листенер. Добавил. :dumb:

Фух, на этом успокоюсь пока. Не слишком монструозно получилось? Или не стоит успокаиваться и надо переделывать под обсерверы? :sick:

Отсутствует

 

№129101-05-2016 22:16:12

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Обсуждение кнопок CB

turbot пишет

Забыл вставить листенер. Добавил.

А чем обусловлен именно такой выбор EventTarget'а?
То есть, если фокус вне gBrowser'а (например, в адресной строке),
то листенер срабатывать не должен?

Отсутствует

 

№129201-05-2016 22:19:20

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Dumby
Хм, не подумал. :dumb:
Хотя, может так и лучше?

А к чему тогда его присобачить?

Отсутствует

 

№129302-05-2016 00:23:35

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Обсуждение кнопок CB

turbot пишет

Хотя, может так и лучше?

А вот прояви воображение, примерь ситуацию на себя.
Тебе бы так было лучше, или тебе так было бы не лучше.

А к чему тогда его присобачить?

Ну, предположу, что присобачить к window, и ещё, возможно,
на всякий случай, добавить проверку других модификаторов,
в том смысле, что именно Alt+M, а не какой-нибудь Ctrl+Alt+M.

Отсутствует

 

№129402-05-2016 00:45:43

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Примерил. Раз фокус со строки не убирается, при открытии менюшки, то хуже точно не станет. Сделаю. :)

в том смысле, что именно Alt+M, а не какой-нибудь Ctrl+Alt+M.

Понял. Сделаю. Спасибо. (Хотя у меня ж на keyup повешен - разве нужно?) хех, проверил, нужно.

Отредактировано turbot (02-05-2016 00:51:22)

Отсутствует

 

№129502-05-2016 10:21:46

Ferguss114
Участник
 
Группа: Members
Зарегистрирован: 31-03-2012
Сообщений: 207
UA: Firefox 31.0

Re: Обсуждение кнопок CB

Не могу понять.
Вчера document.activeElement.tagName и document.activeElement.nodeName возвращали мне xul:browser (это если просто кликнуто на странице).

А сегодня в обоих случаях возвращает просто browser.
Вроде ничего не менял. В чем тут прикол?

Отсутствует

 

№129602-05-2016 12:03:44

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Обсуждение кнопок CB

Ferguss114
Возможно прикол в том, что вчера было кликнуто на странице
того браузера, который создаётся биндингом <tabbrowser>'а
(первая вкладка после запуска лисы), а сегодня нет.

Отсутствует

 

№129702-05-2016 14:49:18

Ferguss114
Участник
 
Группа: Members
Зарегистрирован: 31-03-2012
Сообщений: 207
UA: Firefox 31.0

Re: Обсуждение кнопок CB

Dumby
Да, точно!  Именно так и получилось  :D

Отсутствует

 

№129806-05-2016 17:24:40

KOT040188
Участник
 
Группа: Members
Зарегистрирован: 07-11-2012
Сообщений: 425
UA: Firefox 46.0

Re: Обсуждение кнопок CB

Выделить код

Код:

// полноценная строка поиска
function onFind() { gFindBar.onFindCommand(); setTimeout(()=> gFindBar._findField.selectionStart = 2, 0) };
messageManager.addMessageListener("Findbar:Keypress", onFind);
addDestructor(()=> messageManager.removeMessageListener("Findbar:Keypress", onFind));

Как исправить код, чтобы он не реагировал на клавиши верх/вниз/влево/вправо, ентер и пробел?

Отредактировано KOT040188 (18-06-2016 16:32:30)


Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!

Отсутствует

 

№129908-05-2016 07:11:38

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 158
UA: Firefox 28.0

Re: Обсуждение кнопок CB

Подскажите,а не существует ли кнопки,которая может заменить Tab History Menu ?

Отсутствует

 

№130008-05-2016 07:24:12

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 49.0

Re: Обсуждение кнопок CB

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]