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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№955109-02-2021 18:40:12

aleks609
Участник
 
Группа: Members
Зарегистрирован: 09-02-2021
Сообщений: 10
UA: Firefox 79.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

aleks609
да <keyset id="devtoolsKeyset" добавляется динамически с отложенной загрузкой
можно тоже отложить выполнение вашего кода

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

Выделить код

Код:

Services.obs.addObserver(function delayed() {
            Services.obs.removeObserver(delayed, "browser-delayed-startup-finished");
            setTimeout(() => {
                document.querySelector("key#key_toggleToolboxF12")?.setAttribute("disabled", "true");
                // и т. д.
            }, 100);
        }, "browser-delayed-startup-finished");

Спасибо работает, а если сразу вставить keyset#devtoolsKeyset то блочатся все хоткеи из этого блока, на сколько я понял.
Подскажите пожалуйста, не пойму откуда берется сочетание клавиш ctrl+shift+s, в browser.xhtml я этого не нахожу?

Отсутствует

 

№955209-02-2021 19:27:34

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 86.0

Re: Настройка внешнего вида Firefox в userChrome.css

voqabuhe пишет

А как в вашем стиле №5119 уменьшить расстояние между пунктами меню?

Ну правильно 8 строка, там по умолчанию 24px стоит,
если нужно изменить где-то конкретно добавляем например к нужному селектору и переменная изменится в нем и в его потомках
selector {
    --v-menupopup-item-min-height: 20px;
}

voqabuhe пишет

И чем отличается 78 + от 78 + V2?

Иконками, вначале был первый вариант затем я решил переделать чтобы были тонкие иконки как в KDE, но не точно такие

скрытый текст
Screenshot_20210209_184732.png

да и во втором варианте отображаются чекбоксы и радио даже если они отключены

aleks609 пишет

Подскажите пожалуйста, не пойму откуда берется сочетание клавиш ctrl+shift+s, в browser.xhtml я этого не нахожу?

Так это скриншотер он в виде расширения лежит - папка установки/browser/features/
Ctrl+Shift+S

скрытый текст
Screenshot_20210209_184731.png

селектор такой можно использовать
keyset#ext-keyset-id-screenshots_mozilla_org > key[key='S']
ну или весь keyset...

Отредактировано Vitaliy V. (09-02-2021 20:05:39)

Отсутствует

 

№955309-02-2021 20:30:55

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

Ну правильно 8 строка, там по умолчанию 24px стоит,

Видно я давно просто не обновлялся, поэтому и небыло этой строки. У меня почему-то работает только в сторону увеличения, а уменьшение не даёт никакого результата?

Vitaliy V. пишет

Иконками, вначале был первый вариант затем я решил переделать чтобы были тонкие иконки как в KDE, но не точно такие

У меня чего-то вообще нет никаких иконок?

Отсутствует

 

№955409-02-2021 21:05:51

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 86.0

Re: Настройка внешнего вида Firefox в userChrome.css

voqabuhe
[firefox] 85 [windows] 8.1

скрытый текст
Screenshot_20210209_184733.png

Пункты меню уменьшаются, но могут не уменьшаться если увеличен размер шрифта, это как бы очевидно, обрезать шрифт некрасиво.
Иконки на месте, там их всего три вида (чекбокс, радио, стрелка меню) , а не то что вы наверняка подумали

Отредактировано Vitaliy V. (09-02-2021 21:12:17)

Отсутствует

 

№955511-02-2021 01:04:49

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

Пункты меню уменьшаются, но могут не уменьшаться если увеличен размер шрифта, это как бы очевидно, обрезать шрифт некрасиво.

Ну да шрифт увеличин, но до обрезки вроде как ещё далеко, примерно 5мм между строками.

Vitaliy V. пишет

Иконки на месте, там их всего три вида (чекбокс, радио, стрелка меню) , а не то что вы наверняка подумали

Ну конечно подумал, после того как вы показали такую красоту на скрине, как могло быть иначе. :) А радио это где, что-то никогда такого не видел?

Добавлено 11-02-2021 01:12:32
Vitaliy V.
А понял, из-за сепараторов скорее всего дальнейшее уменьшение не происходит, вот они да могут уже на шрифт наехать.

Отредактировано voqabuhe (11-02-2021 01:12:32)

Отсутствует

 

№955611-02-2021 02:00:50

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1228
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

voqabuhe пишет

А радио это где, что-то никогда такого не видел?

Как это не видел? Vitaliy V. сделал контур у кнопок: чекбокс - галочка в квадратике, радио - кружочек в кружке.))

Вот так по умолчанию
JvDQoU9.png

Отсутствует

 

№955712-02-2021 00:26:29

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1228
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

Есть CB, которые вроде как и не кнопки вовсе, а инициализируют некое поведение функций в браузере. Например, прокрутка СКМ в urlbar или searchbar очищает соответствующее поле (про кнопку в Add Toolbar Buttons знаю, но мне удобнее СКМ, точнее - колёсико мышки крутануть). Можно ли в ucf сделать некую инициализацию этих функций?

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

Выделить код

Код:

// Очистить панель адреса или поиска прокруткой колёсиком мыши на панели
["urlbar", "searchbar"].forEach(el=> document.getElementById(el).onwheel=e=> e.target.value = "");

// Автоматически открывать папки закладок на панели закладок, от 22.08.2016. ...............
// https://forum.mozilla-russia.org/viewtopic.php?pid=740043#p740043
(()=> { 
addEventListener('mouseover', (e, targ = e.target)=> {
   if ( targ.getAttribute('type') != 'menu'
        || (document.querySelectorAll('[open^="true"]').length > 0        
        && !document.getElementById('PlacesChevron').hasAttribute('open')) 
        ) return;

   document.getElementById('PlacesChevronPopup').hidePopup();
      
   setTimeout(()=> { 
      if ( !targ.f ) try { targ.children[0].openPopup(targ, "after_start") } catch(e) {};
   }, 500, targ.f = false);
   targ.onmouseleave =()=> { targ.f = true; targ.onmouseleave = null };
   
}, false, document.getElementById('PlacesToolbar'));
})();

// Пункт для контекстного меню адресной строки, подставляющий модификаторы поиска
// Отсюда https://forum.mozilla-russia.org/viewtopic.php?pid=771818#p771818
(bar => addEventListener("popupshowing", {
    handleEvent(e) {
        if (e.originalTarget != this.popup) return;
        removeEventListener("popupshowing", this, false, bar);

        var sep = this.append("menuseparator", this.popup);
        var menu = this.append("menu", this.popup, {label: "Вставить ^ * + % ~ # @"});
        var popup = this.append("menupopup", menu, {oncommand: "insert(event);"});
        addDestructor(() => sep.remove(menu.remove()));

        this.handleEvent = e => {
            removeEventListener("popupshowing", this, false, popup);
            var df = document.createDocumentFragment();
            for(var label of [
                "^ История",
                "* Закладки",
                "+ Страницы с метками",
                "% Текущие открытые вкладки",
                "~ Набранные",
                "# Названия",
                "@ Веб-адреса (URLs)"
            ])
                this.append("menuitem", df, {label});
            popup.append(df);

            var ed = gURLBar.inputField.editor
//                .QueryInterface(Ci.nsIPlaintextEditor); // https://forum.mozilla-russia.org/viewtopic.php?pid=779668#p779668

            popup.insert = e => {
                gURLBar.inputField.focus(); // Код: очистка адресной строки, начало
                gURLBar.inputField.editor.selectAll();
                goDoCommand("cmd_delete");
                gURLBar.view.close();       // Код: очистка адресной строки, конец
                var str = e.target.label[0] + " ";
                var val = gURLBar.inputField.value;
                if (val && !val.endsWith(" ")) str = " " + str;
                ed.endOfDocument();
                ed.insertText(str);
            }
        }
        addEventListener("popupshowing", this, false, popup);
    },
    get popup() {
        delete this.popup;
        return this.popup = gURLBar.inputField.parentNode.menupopup;
    },
    append(name, parent, attrs) {
        var elm = document.createElementNS(xulns, name);
        if (attrs) for(var a in attrs) elm.setAttribute(a, attrs[a]);
        return parent.appendChild(elm);
    }
}, false, bar || 1))(document.getElementById("urlbar"));

// Добавить подменю "Поиск изображения в" в контекстном меню изображений, от 31.05.2019. .............
// https://forum.mozilla-russia.org/viewtopic.php?pid=770573#p770573
(()=> {
   var copyimage = document.getElementById("context-copyimage-contents");
   var contextMenu = copyimage.parentNode;

   var array = [
      ['Google', 'https://www.google.lv/favicon.ico', 'https://www.google.com/searchbyimage?&image_url='],
      ['Яндекс', 'https://yastatic.net/morda-logo/i/favicon_islands.ico', 'https://yandex.ru/images/search?rpt=imageview&img_url='],
      ['Bing', 'https://www.bing.com/s/a/bing_p.ico', 'https://www.bing.com/images/searchbyimage?FORM=IRSBIQ&cbir=sbi&imgurl='],
      ['Tineye', 'https://tineye.com/favicon.ico', 'https://tineye.com/search?pluginver=bookmark_1.0&url='],
   ];
  
   var menu = contextMenu.insertBefore(document.createElementNS(xulns, "menu"), copyimage); 
   menu.setAttribute("label", "Поиск изображения в ...");
   menu.setAttribute("class", "menu-iconic");
   menu.setAttribute("image", array[0][1]);
   menu.onclick =e=> { e.target.nodeName == 'menu' && search(array[0][2]); setTimeout(()=> contextMenu.hidePopup(), 20) };
   addEventListener("popupshowing", ()=> menu.hidden = copyimage.hidden, true, contextMenu);
   addDestructor(()=> contextMenu.removeChild(menu));

   var menuPopup = menu.appendChild(document.createElementNS(xulns, "menupopup"));              
   array.forEach(m=> {
      var mItem = menuPopup.appendChild(document.createElementNS(xulns, "menuitem"));
      mItem.setAttribute("label", m[0]);       
      mItem.setAttribute("image", m[1]);
      mItem.setAttribute("class", "menuitem-iconic");
      mItem.onclick =()=> search(m[2]);
   });
   function search(finder) { gBrowser.selectedTab = gBrowser.addTrustedTab(finder + encodeURIComponent(gContextMenu.imageURL)) };
  
   var mItem = menuPopup.appendChild(document.createElementNS(xulns, "menuitem"));
   mItem.setAttribute("label", 'Искать во всех поисковиках');       
   mItem.onclick =()=> { array.forEach(m=> {  gBrowser.selectedTab = gBrowser.addTrustedTab(m[2] + encodeURIComponent(gContextMenu.imageURL)) }) };
  
})();


Про поиск изображения в поисковиках спросил ещё здесь, там же есть и скриншот.

Отредактировано xrun1 (12-02-2021 00:45:03)

Отсутствует

 

№955812-02-2021 06:27:10

rubel
Участник
 
Группа: Members
Откуда: г.Самара
Зарегистрирован: 10-05-2005
Сообщений: 570
UA: Firefox 79.0

Re: Настройка внешнего вида Firefox в userChrome.css

xrun1
А как вы прикрутили иконки в контекстном меню? Вот здесь.

Поделитесь, плиз.:)

Отсутствует

 

№955912-02-2021 09:55:47

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1228
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

rubel
Это мы втроём мутили Vitaliy V., Dumby и Ваш покорный слуга.)) Изначальные ссылки на мучение есть в стиле. Стиль для ucf (в смысле моих путей), замените на свои, если нужно. Я после тех ссылок ещё добавлял иконки и пункты.
https://www.upload.ee/files/12872394/icons-in-menu.zip.html
P.S. В папке icons несколько лишних иконок, у меня используются в других местах. Думаю, это не принципиально, вычищать лень.

Отредактировано xrun1 (12-02-2021 10:00:21)

Отсутствует

 

№956012-02-2021 23:19:35

ALEX_45_ORP
Участник
 
Группа: Members
Зарегистрирован: 18-01-2018
Сообщений: 162
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

подскажите, плз, можно ли кодом userChrome.css уменьшить высоту панелей меню, навигации и вкладок в 85?

Отредактировано ALEX_45_ORP (12-02-2021 23:20:29)


Win 10х64

Отсутствует

 

№956112-02-2021 23:49:50

harryk
Участник
 
Группа: Members
Зарегистрирован: 23-12-2019
Сообщений: 418
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

ALEX_45_ORP пишет

вкладок в 85?

Персонализация -> Значки -> Компактные
Или нужно еще меньше?

Отсутствует

 

№956213-02-2021 01:06:18

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

xrun1 пишет

Это мы втроём мутили Vitaliy V., Dumby и Ваш покорный слуга.)) Изначальные ссылки на мучение есть в стиле. Стиль для ucf (в смысле моих путей), замените на свои, если нужно. Я после тех ссылок ещё добавлял иконки и пункты.
https://www.upload.ee/files/12872394/icons-in-menu.zip.html

Спасибо, интересно получилось. А в Панели меню, чего не домутили?

Отсутствует

 

№956313-02-2021 02:40:10

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 86.0

Re: Настройка внешнего вида Firefox в userChrome.css

xrun1
custom_script_win.js

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

Выделить код

Код:

// Очистить панель адреса или поиска прокруткой колёсиком мыши на панели
        (this.clearsearchurlbar = {
            init(that) {
                for (let el of (this.urlsearcbar = document.querySelectorAll("#urlbar,#searchbar")))
                    el.addEventListener("wheel", this);
                that.unloadlisteners.push("clearsearchurlbar");
            },
            handleEvent(e) {
                e.target.value = "";
            },
            destructor() {
                for (let el of this.urlsearcbar)
                    el.removeEventListener("wheel", this);
            },
        }).init(this);

        // Автоматически открывать папки закладок на панели закладок
        (this.placesmenudndhandler = {
            delay: 350,
            init(that) {
                var PlacesToolbar = this.PlacesToolbar = document.querySelector("#PlacesToolbar");
                if (!PlacesToolbar) return;
                PlacesToolbar.addEventListener("mouseover", this);
                this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
                that.unloadlisteners.push("placesmenudndhandler");
            },
            isButtonMenu(node) {
                if (node.localName == "toolbarbutton" &&
                    node.getAttribute("type") == "menu" &&
                    node.menupopup?.hasAttribute("placespopup"))
                    return true;
                return false;
            },
            isOpen(popup) {
                if (popup.state === "open")
                    return true;
                return false;
            },
            handleEvent(event, target = event.target, popup) {
                if (!this.isButtonMenu(target) || this.isOpen(popup = target.menupopup))
                    return;
                this.timer.cancel();
                this.timer.initWithCallback(() => {
                    if (this.curpopup && this.isOpen(this.curpopup))
                        this.curpopup.hidePopup();
                    this.curpopup = popup;
                    popup.openPopup();
                }, this.delay, Ci.nsITimer.TYPE_ONE_SHOT);
                target.addEventListener("mouseleave", () => {
                    this.timer.cancel();
                }, { once: true });
            },
            destructor() {
                this.PlacesToolbar.removeEventListener("mouseover", this);
            },
        }).init(this);

        // Пункт для контекстного меню адресной строки, подставляющий модификаторы поиска
        (this.searchmodifiers = {
            init(that) {
                var urlbar = this.urlbar = document.querySelector("#urlbar");
                if (!urlbar) return;
                urlbar.addEventListener("popupshowing", this);
                that.unloadlisteners.push("searchmodifiers");
            },
            handleEvent(e) {
                if (e.originalTarget != this.popup) return;
                this.urlbar.removeEventListener("popupshowing", this);
                this.urlbar = null;
                this.append("menuseparator", this.popup);
                var menu = this.append("menu", this.popup, {label: "Вставить ^ * + % ~ # @"});
                var popup = this.append("menupopup", menu, {oncommand: "insert(event);"});
                popup.addEventListener("popupshowing", this, { once: true });
                this.handleEvent = e => {
                    var df = document.createDocumentFragment();
                    for(var label of [
                        "^ История",
                        "* Закладки",
                        "+ Страницы с метками",
                        "% Текущие открытые вкладки",
                        "~ Набранные",
                        "# Названия",
                        "@ Веб-адреса (URLs)"
                    ])
                        this.append("menuitem", df, {label});
                    popup.append(df);
                    var ed = gURLBar.inputField.editor
                        .QueryInterface(Ci.nsIEditor || Ci.nsIPlaintextEditor);
                    popup.insert = e => {
                        var str = e.target.label[0] + " ";
                        var val = gURLBar.inputField.value;
                        if (val && !val.endsWith(" ")) str = " " + str;
                        ed.endOfDocument();
                        ed.insertText(str);
                    };
                };
            },
            get popup() {
                delete this.popup;
                return this.popup = gURLBar.inputField.parentNode.menupopup;
            },
            append(name, parent, attrs) {
                var elm = document.createXULElement(name);
                if (attrs) for(var a in attrs) elm.setAttribute(a, attrs[a]);
                parent.append(elm);
                return elm;
            },
            destructor() {
                this.urlbar?.removeEventListener("popupshowing", this);
            },
        }).init(this);

        // Добавить подменю "Поиск изображения в" в контекстном меню изображений
        (this.searchimagecontextmenu = {
            handleEvent(e) {
                var array = [
                    ['Google', 'https://www.google.lv/favicon.ico', 'https://www.google.com/searchbyimage?&image_url='],
                    ['Яндекс', 'https://yastatic.net/morda-logo/i/favicon_islands.ico', 'https://yandex.ru/images/search?rpt=imageview&url='],
                    ['Bing', 'https://www.bing.com/s/a/bing_p.ico', 'https://www.bing.com/images/search?view=detailv2&iss=sbi&form=SBIHMP&sbisrc=UrlPaste&q=imgurl:'],
                    ['Tineye', 'https://tineye.com/favicon.ico', 'https://tineye.com/search?pluginver=bookmark_1.0&url='],
                ];
                var menu = document.createXULElement("menu");
                menu.setAttribute("label", "Поиск изображения в ...");
                menu.setAttribute("class", "menu-iconic");
                menu.setAttribute("image", array[0][1]);
                menu.setAttribute("onclick", "_searcclick(event);");
                menu._searcclick = function(e) {
                    if (e.target != this) return;
                    gBrowser.selectedTab = gBrowser.addTrustedTab(this._searcharg[2] + encodeURIComponent(gContextMenu.imageURL), { index: gBrowser.selectedTab._tPos + 1 } );
                    this.parentNode.hidePopup();
                }
                menu._searcharg = array[0];
                var menuPopup = document.createXULElement("menupopup");
                menu.append(menuPopup);
                array.forEach(m=> {
                    var mItem = document.createXULElement("menuitem");
                    mItem.setAttribute("label", m[0]);
                    mItem.setAttribute("image", m[1]);
                    mItem.setAttribute("class", "menuitem-iconic");
                    mItem.setAttribute("oncommand", "gBrowser.selectedTab = gBrowser.addTrustedTab(_searcharg[2] + encodeURIComponent(gContextMenu.imageURL), { index: gBrowser.selectedTab._tPos + 1 } );");
                    mItem._searcharg = m;
                    menuPopup.append(mItem);
                });
                var mItem = document.createXULElement("menuitem");
                mItem.setAttribute("label", 'Искать во всех поисковиках');
                mItem.setAttribute("oncommand", "_searcharg.forEach(m => { gBrowser.selectedTab = gBrowser.addTrustedTab(m[2] + encodeURIComponent(gContextMenu.imageURL), { index: gBrowser.selectedTab._tPos + 1 } );});");
                mItem._searcharg = array;
                menuPopup.append(mItem);
                this.contextMenu.querySelector("#context-copyimage-contents")?.before(menu);
                (this.handleEvent = e => {
                    menu.hidden = !gContextMenu?.imageURL;
                })(e);
            },
            init(that) {
                var contextMenu = this.contextMenu = document.querySelector("#contentAreaContextMenu");
                if (!contextMenu) return;
                contextMenu.addEventListener("popupshowing", this);
                that.unloadlisteners.push("searchimagecontextmenu");
            },
            destructor() {
                this.contextMenu.removeEventListener("popupshowing", this);
            },
        }).init(this);

Update

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

Выделить код

Код:

// Очистить панель адреса или поиска прокруткой колёсиком мыши на панели
 (this.clearsearchurlbar = {
    init(that) {
        for (let el of (this.urlsearcbar = document.querySelectorAll("#urlbar,#searchbar")))
            el.addEventListener("wheel", this);
        that.unloadlisteners.push("clearsearchurlbar");
    },
    handleEvent(e) {
        e.target.value = "";
    },
    destructor() {
        for (let el of this.urlsearcbar)
            el.removeEventListener("wheel", this);
    },
}).init(this);

// Автоматически открывать папки закладок на панели закладок
(this.placesmenudndhandler = {
    delay: 350,
    init(that) {
        var PlacesToolbar = this.PlacesToolbar = document.querySelector("#PlacesToolbar");
        if (!PlacesToolbar) return;
        PlacesToolbar.addEventListener("mouseover", this);
        this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
        that.unloadlisteners.push("placesmenudndhandler");
    },
    isButtonMenu(node) {
        if (node.localName == "toolbarbutton" &&
            node.getAttribute("type") == "menu" &&
            node.menupopup?.hasAttribute("placespopup"))
            return true;
        return false;
    },
    isOpen(popup) {
        if (popup.state === "open")
            return true;
        return false;
    },
    handleEvent(event, target = event.target, popup) {
        if (!this.isButtonMenu(target) || this.isOpen(popup = target.menupopup))
            return;
        this.timer.cancel();
        this.timer.initWithCallback(() => {
            if (this.curpopup && this.isOpen(this.curpopup))
                this.curpopup.hidePopup();
            this.curpopup = popup;
            popup.openPopup();
        }, this.delay, Ci.nsITimer.TYPE_ONE_SHOT);
        target.addEventListener("mouseleave", () => {
            this.timer.cancel();
        }, { once: true });
    },
    destructor() {
        this.PlacesToolbar.removeEventListener("mouseover", this);
    },
}).init(this);

// Пункт для контекстного меню адресной строки, подставляющий модификаторы поиска
(this.searchmodifiers = {
    init(that) {
        var urlbar = this.urlbar = gURLBar.textbox;
        if (!urlbar) return;
        urlbar.addEventListener("popupshowing", this);
        that.unloadlisteners.push("searchmodifiers");
    },
    handleEvent(e) {
        if (e.originalTarget != this.popup) return;
        this.urlbar.removeEventListener("popupshowing", this);
        this.urlbar = null;
        var sep = this.popup.querySelector("menuseparator.menuseparator-add-engine") || this.popup.lastElementChild;
        var menu = this.append("menu", sep, {label: "Вставить ^ * + % ~ # @"}, "before");
        this.append("menuseparator", menu, null, "before");
        var popup = this.append("menupopup", menu, {oncommand: "insert(event);"}, "append");
        popup.addEventListener("popupshowing", this, { once: true });
        this.handleEvent = e => {
            var df = document.createDocumentFragment();
            for (let label of [
                "^ История",
                "* Закладки",
                "+ Страницы с метками",
                "% Текущие открытые вкладки",
                "~ Набранные",
                "# Названия",
                "@ Веб-адреса (URLs)"
            ])
                this.append("menuitem", df, {label}, "append");
            popup.append(df);
            var ed = gURLBar.inputField.editor
                .QueryInterface(Ci.nsIEditor || Ci.nsIPlaintextEditor);
            popup.insert = e => {
                var str = e.target.label[0] + " ";
                var val = gURLBar.inputField.value;
                if (val && !val.endsWith(" ")) str = " " + str;
                ed.endOfDocument();
                ed.insertText(str);
            };
        };
    },
    get popup() {
        delete this.popup;
        return this.popup = gURLBar.inputField.parentNode.menupopup;
    },
    append(name, parent, attrs, func) {
        var elm = document.createXULElement(name);
        if (attrs) for (let a in attrs) elm.setAttribute(a, attrs[a]);
        parent[func](elm);
        return elm;
    },
    destructor() {
        this.urlbar?.removeEventListener("popupshowing", this);
    },
}).init(this);

// Добавить подменю "Поиск изображения в" в контекстном меню изображений
(this.searchimagecontextmenu = {
    handleEvent(evt) {
        if (evt.target != this.contextMenu || !gContextMenu?.imageInfo?.currentSrc) return;
        var array = [
            ['Google', 'https://www.google.lv/favicon.ico', 'https://www.google.com/searchbyimage?&image_url='],
            ['Яндекс', 'https://yastatic.net/morda-logo/i/favicon_islands.ico', 'https://yandex.ru/images/search?rpt=imageview&url='],
            ['Bing', 'https://www.bing.com/s/a/bing_p.ico', 'https://www.bing.com/images/search?view=detailv2&iss=sbi&form=SBIHMP&sbisrc=UrlPaste&q=imgurl:'],
            ['Tineye', 'https://tineye.com/favicon.ico', 'https://tineye.com/search?pluginver=bookmark_1.0&url='],
        ];
        var menu = document.createXULElement("menu");
        menu.setAttribute("label", "Поиск изображения в ...");
        menu.setAttribute("class", "menu-iconic");
        menu.setAttribute("image", array[0][1]);
        menu.setAttribute("onclick", "_searcclick(event);");
        menu._searcclick = function(e) {
            if (e.target != this) return;
            gBrowser.selectedTab = gBrowser.addTrustedTab(this._searcharg[2] + encodeURIComponent(gContextMenu.imageInfo.currentSrc), { index: gBrowser.selectedTab._tPos + 1 } );
            this.parentNode.hidePopup();
        }
        menu._searcharg = array[0];
        var menuPopup = document.createXULElement("menupopup");
        menu.append(menuPopup);
        array.forEach(m=> {
            var mItem = document.createXULElement("menuitem");
            mItem.setAttribute("label", m[0]);
            mItem.setAttribute("image", m[1]);
            mItem.setAttribute("class", "menuitem-iconic");
            mItem.setAttribute("oncommand", "gBrowser.selectedTab = gBrowser.addTrustedTab(_searcharg[2] + encodeURIComponent(gContextMenu.imageInfo.currentSrc), { index: gBrowser.selectedTab._tPos + 1 } );");
            mItem._searcharg = m;
            menuPopup.append(mItem);
        });
        var mItem = document.createXULElement("menuitem");
        mItem.setAttribute("label", 'Искать во всех поисковиках');
        mItem.setAttribute("oncommand", "_searcharg.forEach(m => { gBrowser.selectedTab = gBrowser.addTrustedTab(m[2] + encodeURIComponent(gContextMenu.imageInfo.currentSrc), { index: gBrowser.selectedTab._tPos + 1 } );});");
        mItem._searcharg = array;
        menuPopup.append(mItem);
        this.contextMenu.querySelector("#context-copyimage-contents")?.before(menu);
        this.popupshowing = e => {
            if (e.target != this.contextMenu) return;
            menu.hidden = !gContextMenu?.imageInfo?.currentSrc;
        };
        this.popuphiding = e => {
            if (e.target != this.contextMenu) return;
            menu.hidden = true;
        };
        this.contextMenu.addEventListener("popuphiding", this);
        this.handleEvent = e => {
            this[e.type](e);
        };
    },
    init(that) {
        var contextMenu = this.contextMenu = document.querySelector("#contentAreaContextMenu");
        if (!contextMenu) return;
        contextMenu.addEventListener("popupshowing", this);
        that.unloadlisteners.push("searchimagecontextmenu");
    },
    destructor() {
        this.contextMenu.removeEventListener("popupshowing", this);
        this.contextMenu.removeEventListener("popuphiding", this);
    },
}).init(this);

Отредактировано Vitaliy V. (25-11-2021 17:00:46)

Отсутствует

 

№956413-02-2021 05:27:44

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
А можете ещё добавить очистку поиска в боковой панели и окна звёздочки.

Отсутствует

 

№956513-02-2021 06:51:35

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1228
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

А как сжать на 1-2 пикселя расстояние между кнопками в боковой панели? Пробовал по аналогии с этим стилем https://forum.mozilla-russia.org/viewtopic.php?pid=775867#p775867
Получается слишком узко...

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

Выделить код

Код:

/* Сжать доп.панели https://forum.mozilla-russia.org/viewtopic.php?pid=775867#p775867 */
#add-additional-top-bar,
#add-additional-bottom-bar {
    --toolbarbutton-outer-padding: 2px !important; /* было 0px */
    --toolbarbutton-inner-padding: 2px !important;
    min-height: 20px !important;
}
#add-additional-bottom-closebutton {
    padding: 0 !important;
}
#add-additional-vertical-bar {
    --toolbarbutton-outer-padding: 2px !important; /* было 0px */
    --toolbarbutton-inner-padding: 2px !important;
    min-width: 20px !important;
}
:-moz-any(#add-additional-top-bar,#add-additional-bottom-bar,#add-additional-vertical-bar) .toolbarbutton-badge {
    margin-inline-end: calc(-1 * (var(--toolbarbutton-outer-padding) + var(--toolbarbutton-inner-padding))) !important;
}

Добавлено 13-02-2021 07:13:42

voqabuhe пишет

А в Панели меню, чего не домутили?

Я не пользуюсь, про других не знаю. Сделать не сложно, иконки почти все есть. Как получить ID меню здесь https://forum.mozilla-russia.org/viewtopic.php?pid=758758#p758758
Vitaliy V.
Спасибо, отлично работает!

Отредактировано xrun1 (13-02-2021 07:13:42)

Отсутствует

 

№956613-02-2021 10:03:23

ALEX_45_ORP
Участник
 
Группа: Members
Зарегистрирован: 18-01-2018
Сообщений: 162
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

harryk пишет
ALEX_45_ORP пишет

вкладок в 85?

Персонализация -> Значки -> Компактные
Или нужно еще меньше?

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


Win 10х64

Отсутствует

 

№956713-02-2021 11:45:40

harryk
Участник
 
Группа: Members
Зарегистрирован: 23-12-2019
Сообщений: 418
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

Как убрать синюю полосу сверху активной вкладки?

Отредактировано harryk (13-02-2021 13:01:06)

Отсутствует

 

№956813-02-2021 13:42:15

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

harryk пишет

Как убрать синюю полосу сверху активной вкладки?

Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

Отсутствует

 

№956913-02-2021 14:18:25

harryk
Участник
 
Группа: Members
Зарегистрирован: 23-12-2019
Сообщений: 418
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79
А другие варианты есть? Это ломает отображение табов в аддоне Session Boss

Отсутствует

 

№957013-02-2021 14:28:58

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

harryk пишет

А другие варианты есть?

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

Выделить код

Код:

.tab-line[selected=true] {
  height: 0px !important;
}

Отредактировано sandro79 (13-02-2021 14:33:49)

Отсутствует

 

№957113-02-2021 14:38:23

harryk
Участник
 
Группа: Members
Зарегистрирован: 23-12-2019
Сообщений: 418
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79
При первом варианте табов в сохраненной сессии воообще нет, а при втором все табы накладываются друг на друга в одной строке, а как бы должны быть каждый в своей строке.
Может как-то можно не прятать зту полоску, а перекрасить в тот же цвет, что и активная вкладка?

Отсутствует

 

№957213-02-2021 14:45:38

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 78.0

Re: Настройка внешнего вида Firefox в userChrome.css

harryk пишет

Может как-то можно не прятать зту полоску, а перекрасить в тот же цвет, что и активная вкладка?

Да, можно перекрасить.


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

Выделить код

Код:

.tabbrowser-tab[selected] .tab-line {
    background-color: var(--classic_squared_tabs_active_tab) !important;
}

Отредактировано sandro79 (13-02-2021 15:17:07)

Отсутствует

 

№957313-02-2021 14:54:42

harryk
Участник
 
Группа: Members
Зарегистрирован: 23-12-2019
Сообщений: 418
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79
Да, спасибо. То, что нужно

Отсутствует

 

№957413-02-2021 17:11:50

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 86.0

Re: Настройка внешнего вида Firefox в userChrome.css

voqabuhe пишет

А можете ещё добавить очистку поиска в боковой панели и окна звёздочки.

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

Выделить код

Код:

(this.clearsearchurlbar = {
            init(that) {
                for (let el of (this.urlsearcbar = document.querySelectorAll("#urlbar,#searchbar,#sidebar")))
                    el.addEventListener("wheel", this);
                (document.querySelector("#editBookmarkPanelTemplate")?.content.querySelector("#editBookmarkPanelRows")
                || document.querySelector("#editBookmarkPanelRows"))
                ?.setAttribute("onwheel", "if (event.target.value && event.target.localName === 'input') event.target.value = '';");
                that.unloadlisteners.push("clearsearchurlbar");
            },
            handleEvent(e, target = e.target) {
                if (target.value) {
                    if ("_clearSearch" in target)
                        target._clearSearch();
                    else if (target.localName === "input")
                        target.value = "";
                }
            },
            destructor() {
                for (let el of this.urlsearcbar)
                    el.removeEventListener("wheel", this);
            },
        }).init(this);

xrun1 пишет

Получается слишком узко...

--toolbarbutton-inner-padding не пробовали прибавить?

ALEX_45_ORP пишет

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

не знаю насчет сборки попробуйте это
https://forum.mozilla-russia.org/viewto … 77#p786677

Отредактировано Vitaliy V. (13-02-2021 17:27:55)

Отсутствует

 

№957513-02-2021 17:24:20

ALEX_45_ORP
Участник
 
Группа: Members
Зарегистрирован: 18-01-2018
Сообщений: 162
UA: Firefox 85.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

не знаю насчет сборки попробуйте это
https://forum.mozilla-russia.org/viewto … 77#p786677

спс, теперь подгоню по своим потребностям.


Win 10х64

Отсутствует

 

Board footer

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