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

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№937621-11-2020 15:42:19

linlin
Участник
 
Группа: Members
Зарегистрирован: 30-09-2020
Сообщений: 127
UA: Firefox 83.0

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

Моя тема покрасила два меню:
выпадающее меню закладок кнопки-звёздочки - полупрозрачное
и меню "трёх полосок" - непрозрачное.

Остальные меню окрашены этим стилем:
https://forum.mozilla-russia.org/viewto … 65#p764365,
который подхватил прозрачность первого меню. Мне бы хотелось, чтобы меню были непрозрачные. Как это сделать?

Отсутствует

 

№937721-11-2020 17:41:50

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

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

linlin
что касается стиля, можно только если указать свои цвета.
Или тему изменить в manifest.json
"theme": {
        "colors": {
             ...
            "popup": rgba заменить на rgb и т.д.

Отсутствует

 

№937821-11-2020 17:53:02

dezhnev
Участник
 
Группа: Members
Зарегистрирован: 21-04-2016
Сообщений: 58
UA: Firefox 82.0

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

Vitaliy

можно ли поправить ваше расширение spooftimezone, чтобы оно во фрейме работало тоже
понимаю, что проще через ком строку поменять, но лень матушка :rolleyes:

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

в окне
browserleakscomJavaScript-window.1605970158.png

во фрейме

browserleakscomJavaScript-iframe.1605970193.png

Отсутствует

 

№937921-11-2020 19:03:11

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

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

dezhnev
проверьте на этом сайте https://webbrowsertools.com/timezone/
вероятно https://browserleaks.com/ использует "агрессивный" метод поэтому может показывать реальный часовой пояс.
С [normal] iframe.contentWindow работает как положено.

Отредактировано Vitaliy V. (21-11-2020 19:07:08)

Отсутствует

 

№938022-11-2020 11:35:08

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

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

Vitaliy V.
Работает, спасибо.

Отсутствует

 

№938123-11-2020 14:36:27

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 586
UA: Firefox 83.0

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

Vitaliy V.
Имею код . Hover на иконки в nav-bar. С иконки "скриншот"  не исчезает, пока в popop сидишь...:not([open="true"]) - не помогает...

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

Выделить код

Код:

#PanelUI-menu-button:hover, #nav-bar-customization-target > .toolbarbutton-1:not(#custombuttons-button13):not([open="true"]):hover{
  background-image: url( chrome://browser/skin/tabbrowser/tab-bg-active.png);
  background-repeat: repeat-x !important;
  border: none !important;
  background-position: left center !important;
  border-radius: 3px !important; 
  background-color: #333 !important; 
}


feubcrsj.jpg

Отсутствует

 

№938223-11-2020 16:28:52

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

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

solombala пишет

:not([open="true"]) - не помогает...

ну у тебя ж кнопка не стандартная
попробуй заменить в Save.js
self._handleClick =()=> menuPopup.openPopup(this, "after_start");
на
self.setAttribute("type", "menu");

не знаю сработает ли для CB, проверял на этой кнопке https://forum.mozilla-russia.org/viewto … 58#p781458

Отредактировано Vitaliy V. (23-11-2020 16:29:27)

Отсутствует

 

№938323-11-2020 16:44:52

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 586
UA: Firefox 83.0

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

Vitaliy V.

Vitaliy V. пишет

self._handleClick =()=> menuPopup.openPopup(this, "after_start");
на
self.setAttribute("type", "menu");

Высший класс!

Отсутствует

 

№938424-11-2020 17:33:33

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

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

Никак не соображу, как к этой кнопке прикрутить тултип (чтобы название "Save" при наведении на иконку показывало).
Vitaliy V.
Стоит tabs_focus.2020.9.15.xpi, [firefox] 83. Если на странице кликнуть, например, ПКМ, а потом увести мышку на другой таб, меню остаётся (может, так и раньше было, а я не замечал...).

Отсутствует

 

№938524-11-2020 20:39:41

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 519
UA: Firefox 78.0

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

xrun1
Как в других, по аналогии. Например:

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

Выделить код

Код:

try {CustomizableUI.createWidget({
	id: "ucf-cbbtn-Save",
	tooltiptext: "Сохранить страницу\n/ часть / выделенное",
	localized: false,

Отсутствует

 

№938625-11-2020 00:09:22

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

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

_zt
Затупил что-то.:/ Спасибо.

Отсутствует

 

№938725-11-2020 03:26:24

FirefoxCPU
Участник
 
Группа: Members
Зарегистрирован: 09-12-2017
Сообщений: 9
UA: Firefox 83.0

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

Здравствуйте. Подскажите пожалуйста как убрать ореол вокруг стрелок Назад-Вперед? Раньше не было, с последними обновами вроде добавили, напрягает и темами не убирается

скрытый текст
a890898595c3fbbce1b6811e8d3120b1-full.png

Отредактировано FirefoxCPU (25-11-2020 03:30:26)

Отсутствует

 

№938825-11-2020 08:55:21

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

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

Vitaliy V.
Заглянул в Tabs Focus 2020.9.15, и, мне кажется,
все вот эти перестановки .onMouse{In, Out, Clicked} не работают

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

Выделить код

Код:

var tabs_focus = {
    ...
    observe: function(subject, topic, pref) {
        var func_by_prefs = {
            ...
            "extensions.tabs_focus.previewmode": () => {
                var onMouseIn, onMouseOut, onMouseClicked;
                if (this.previewmode = this.Prefs.getBoolPref("previewmode")) {
                    onMouseIn = "__onMouseIn";
                    onMouseOut = "__onMouseOut";
                    onMouseClicked = "__onMouseClicked";
                } else {
                    onMouseIn = "_onMouseIn";
                    onMouseOut = "_onMouseOut";
                    onMouseClicked = "_onMouseClicked";
                }
                for (let [winInfo, obj] of objectMap) {
                    obj.onMouseIn = obj[onMouseIn];
                    obj.onMouseOut = obj[onMouseOut];
                    obj.onMouseClicked = obj[onMouseClicked];
                }
            },
            ...
        };
        ...
    },
    ...
};

Tabsfocus.prototype = {
    ...
    onMouseIn(e) {
        if (!tabs_focus.previewmode)
            this.onMouseIn = this._onMouseIn;
        else
            this.onMouseIn = this.__onMouseIn;
        this.onMouseIn(e);
    },
    ...
    onMouseOut() {
        if (!tabs_focus.previewmode)
            this.onMouseOut = this._onMouseOut;
        else
            this.onMouseOut = this.__onMouseOut;
        this.onMouseOut();
    },
    ...
    onMouseClicked(e) {
        if (!tabs_focus.previewmode)
            this.onMouseClicked = this._onMouseClicked;
        else
            this.onMouseClicked = this.__onMouseClicked;
        this.onMouseClicked(e);
    },
    ...
};


Вернее работают, но вхолостую, совершенно бесполезно.


Дело в том, что в Tabsfocus.prototype.load()
добавляет обработчики как функции, являющиеся
bind-производными от соответствующих методов прототипа.


А приведённые фрагменты кода просто переставляют
методы в Tabsfocus-экземплярах, что не оказывает никакого
воздействия на сами (уже) добавленные листенеры.


Более того, в таком виде, никакого воздействия
не было бы, даже если менять методы в самом прототипе.


Если так, вот попробовал, как вариант,
перерисовать чуть ближе к усмотренной концепции
(я не в смысле нахлобучки, а просто мысли вслух).

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

Выделить код

Код:

var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
var PREF_BRANCH = "extensions.tabs_focus.", objectMap = new Map(), contExt;
var tabs_focus = {
    delay: 150,
    returndelay: 50,
    previewmode: false,
    clickreloadtab: false,
    Prefs: null,
    init: function() {
        var branch = Services.prefs.getDefaultBranch(PREF_BRANCH);
        branch.setIntPref("delay", 150);
        branch.setBoolPref("previewmode", false);
        branch.setIntPref("returndelay", 50);
        branch.setBoolPref("clickreloadtab", false);
        var Prefs = this.Prefs = Services.prefs.getBranch(PREF_BRANCH);
        var delay = Prefs.getIntPref("delay");
        if (delay < 1)
            Prefs.setIntPref("delay", (delay = 150));
        this.delay = delay;
        var returndelay = Prefs.getIntPref("returndelay");
        if (returndelay < 1)
            Prefs.setIntPref("returndelay", (returndelay = 50));
        this.returndelay = returndelay;

        // ■■■■■■■■■■■■■■■■
        //this.previewmode = Prefs.getBoolPref("previewmode");
        this.observe(null, null, PREF_BRANCH + "previewmode");

        this.clickreloadtab = Prefs.getBoolPref("clickreloadtab");
        for (let win of contExt.windowManager.getAll())
            this.loadIntoWindow(win.window, win.id);
        Services.prefs.addObserver(PREF_BRANCH, this);
    },
    loadIntoWindow: function(win, winInfo) {
        var obj = new Tabsfocus();
        obj.load(win);
        objectMap.set(winInfo, obj);
    },
    unloadFromWindow: function(winInfo) {
        objectMap.get(winInfo).unload();
        objectMap.delete(winInfo);
    },
    // ■■■■■■■■■■■■■■■■
    mouseFunctions: {
        // functions for Tabsfocus.prototype if extensions.tabs_focus.previewmode = false
        false: {
            mouseover(e) {
                var tab = e.target.closest("tab.tabbrowser-tab:not([selected='true'])");
                if (!tab) return;
                this.callback.setTarget(tab);
                this.tid.initWithCallback(this.callback, tabs_focus.delay, this.tid.TYPE_ONE_SHOT);
            },
            mouseout() {
                this.tid.cancel();
                this.callback.setTarget(null);
            },
            click(e) {
                if (tabs_focus.clickreloadtab && e.detail == 1 && e.button == 0 && !this.callback.target && (e.composedTarget || e.originalTarget || e.target).matches("tab.tabbrowser-tab :not(toolbarbutton):not(image):scope, tab.tabbrowser-tab image.tab-icon-image:scope")) {
                    if (e.shiftKey)
                        this.win.BrowserReloadSkipCache();
                    else
                        this.win.BrowserReload();
                }
                this.tid.cancel();
                this.callback.setTarget(null);
            }
        },
        // functions for Tabsfocus.prototype if extensions.tabs_focus.previewmode = true
        true: {
            mouseover(e) {
                this.previewReturnTid.cancel();
                var tab = e.target.closest("tab.tabbrowser-tab:not([selected='true'])");
                if (!tab) return;
                this.callback.setTarget(tab);
                this.tid.initWithCallback(this.callback, tabs_focus.delay, this.tid.TYPE_ONE_SHOT);
            },
            mouseout() {
                this.tid.cancel();
                this.callback.setTarget(null);
                if (!this.previewBaseTab) return;
                this.previewReturnTid.cancel();
                this.previewCallback.setTarget(this.previewBaseTab);
                this.previewReturnTid.initWithCallback(this.previewCallback, tabs_focus.returndelay, this.previewReturnTid.TYPE_ONE_SHOT);
            },
            click(e) {
                this.previewReturnTid.cancel();
                this.previewCallback.setTarget(null);
                var tab = this.win.gBrowser.selectedTab;
                if (tabs_focus.clickreloadtab && e.detail == 1 && e.button == 0 && !this.callback.target && this.previewBaseTab == tab && (e.composedTarget || e.originalTarget || e.target).matches("tab.tabbrowser-tab :not(toolbarbutton):not(image):scope, tab.tabbrowser-tab image.tab-icon-image:scope")) {
                    if (e.shiftKey)
                        this.win.BrowserReloadSkipCache();
                    else
                        this.win.BrowserReload();
                }
                this.tid.cancel();
                this.callback.setTarget(null);
                this.previewBaseTab = tab;
            }
        }
    },
    observe: function(subject, topic, pref) {
        var func_by_prefs = {
            "extensions.tabs_focus.delay": () => {
                var delay = this.Prefs.getIntPref("delay");
                if (delay < 1)
                    //this.Prefs.setIntPref("delay", (delay = 150));
                    this.Prefs.setIntPref("delay", delay = 150);
                this.delay = delay;
            },
            "extensions.tabs_focus.returndelay": () => {
                var returndelay = this.Prefs.getIntPref("returndelay");
                if (returndelay < 1)
                    //this.Prefs.setIntPref("returndelay", (returndelay = 50));
                    this.Prefs.setIntPref("returndelay", returndelay = 50);
                this.returndelay = returndelay;
            },
            // ■■■■■■■■■■■■■■■■
            /*
            "extensions.tabs_focus.previewmode": () => {
                var onMouseIn, onMouseOut, onMouseClicked;
                if (this.previewmode = this.Prefs.getBoolPref("previewmode")) {
                    onMouseIn = "__onMouseIn";
                    onMouseOut = "__onMouseOut";
                    onMouseClicked = "__onMouseClicked";
                } else {
                    onMouseIn = "_onMouseIn";
                    onMouseOut = "_onMouseOut";
                    onMouseClicked = "_onMouseClicked";
                }
                for (let [winInfo, obj] of objectMap) {
                    obj.onMouseIn = obj[onMouseIn];
                    obj.onMouseOut = obj[onMouseOut];
                    obj.onMouseClicked = obj[onMouseClicked];
                }
            },
            */
            "extensions.tabs_focus.previewmode": () => Object.assign(
                Tabsfocus.prototype,
                this.mouseFunctions[this.Prefs.getBoolPref("previewmode", false)]
            ),

            "extensions.tabs_focus.clickreloadtab": () => {
                this.clickreloadtab = this.Prefs.getBoolPref("clickreloadtab");
            }
        };
        func_by_prefs[pref]?.();
    },
    GetPref: function(name) {
        var type = Services.prefs.getPrefType(name);
        switch (type) {
            case Services.prefs.PREF_BOOL:
                return Services.prefs.getBoolPref(name);
            case Services.prefs.PREF_INT:
                return Services.prefs.getIntPref(name);
            case Services.prefs.PREF_STRING:
                return Services.prefs.getStringPref(name);
        }
    },
    SetPref: function(name, value) {
        var type = Services.prefs.getPrefType(name);
        switch (type) {
            case Services.prefs.PREF_BOOL:
                Services.prefs.setBoolPref(name, value);
                break;
            case Services.prefs.PREF_INT:
                Services.prefs.setIntPref(name, value);
                break;
            case Services.prefs.PREF_STRING:
                Services.prefs.setStringPref(name, value);
                break;
        }
    },
    uninit: function() {
        Services.prefs.removeObserver(PREF_BRANCH, this);
        for (let win of contExt.windowManager.getAll())
            this.unloadFromWindow(win.id);
    }
};

function TabfocusCallback() {
    this.win = null;
    this.target = null;
}
TabfocusCallback.prototype = {
    setTarget(target) {
        this.target = target;
    },
    setWindow(win) {
        this.win = win;
    },
    notify() {
        var target = this.target;
        if (target != null) {
            this.win.gBrowser.selectedTab = target;
            this.target = null;
        }
    },
};

function Tabsfocus() {
    this.win = null;
    this.tid = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
    this.callback = new TabfocusCallback();
    this.previewBaseTab = null;
    this.previewCallback = new TabfocusCallback();
    this.previewReturnTid = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
}

// ■■■■■■■■■■■■■■■■
/*
Tabsfocus.prototype = {
    load(win) {
        this.win = win;
        this.callback.setWindow(win);
        this.previewCallback.setWindow(win);
        var gBrowser = win.gBrowser;
        this.previewBaseTab = gBrowser.selectedTab;
        this.onMouseIn_ = this.onMouseIn.bind(this);
        var slot = this.slot = gBrowser.tabs[0].flattenedTreeParentNode;
        slot.addEventListener("mouseover", this.onMouseIn_);
        this.onMouseOut_ = this.onMouseOut.bind(this);
        slot.addEventListener("mouseout", this.onMouseOut_);
        this.onMouseClicked_ = this.onMouseClicked.bind(this);
        slot.addEventListener("click", this.onMouseClicked_);
    },
    unload() {
        var slot = this.slot;
        slot.removeEventListener("mouseover", this.onMouseIn_);
        slot.removeEventListener("mouseout", this.onMouseOut_);
        slot.removeEventListener("click", this.onMouseClicked_);
    },
    onMouseIn(e) {
        Cu.reportError("onMouseIn_ORIGINAL\n" + this.onMouseIn);
        if (!tabs_focus.previewmode)
            this.onMouseIn = this._onMouseIn;
        else
            this.onMouseIn = this.__onMouseIn;
        this.onMouseIn(e);
    },
    _onMouseIn(e) {
        var tab = e.target.closest("tab.tabbrowser-tab:not([selected='true'])");
        if (!tab) return;
        this.callback.setTarget(tab);
        this.tid.initWithCallback(this.callback, tabs_focus.delay, this.tid.TYPE_ONE_SHOT);
    },
    __onMouseIn(e) {
        this.previewReturnTid.cancel();
        var tab = e.target.closest("tab.tabbrowser-tab:not([selected='true'])");
        if (!tab) return;
        this.callback.setTarget(tab);
        this.tid.initWithCallback(this.callback, tabs_focus.delay, this.tid.TYPE_ONE_SHOT);
    },
    onMouseOut() {
        if (!tabs_focus.previewmode)
            this.onMouseOut = this._onMouseOut;
        else
            this.onMouseOut = this.__onMouseOut;
        this.onMouseOut();
    },
    _onMouseOut() {
        this.tid.cancel();
        this.callback.setTarget(null);
    },
    __onMouseOut() {
        this.tid.cancel();
        this.callback.setTarget(null);
        if (!this.previewBaseTab) return;
        this.previewReturnTid.cancel();
        this.previewCallback.setTarget(this.previewBaseTab);
        this.previewReturnTid.initWithCallback(this.previewCallback, tabs_focus.returndelay, this.previewReturnTid.TYPE_ONE_SHOT);
    },
    onMouseClicked(e) {
        if (!tabs_focus.previewmode)
            this.onMouseClicked = this._onMouseClicked;
        else
            this.onMouseClicked = this.__onMouseClicked;
        this.onMouseClicked(e);
    },
    _onMouseClicked(e) {
        if (tabs_focus.clickreloadtab && e.detail == 1 && e.button == 0 && !this.callback.target && (e.composedTarget || e.originalTarget || e.target).matches("tab.tabbrowser-tab :not(toolbarbutton):not(image):scope, tab.tabbrowser-tab image.tab-icon-image:scope")) {
            if (!e.shiftKey)
                this.win.BrowserReload();
            else
                this.win.BrowserReloadSkipCache();
        }
        this.tid.cancel();
        this.callback.setTarget(null);
    },
    __onMouseClicked(e) {
        this.previewReturnTid.cancel();
        this.previewCallback.setTarget(null);
        var tab = this.win.gBrowser.selectedTab;
        if (tabs_focus.clickreloadtab && e.detail == 1 && e.button == 0 && !this.callback.target && this.previewBaseTab == tab && (e.composedTarget || e.originalTarget || e.target).matches("tab.tabbrowser-tab :not(toolbarbutton):not(image):scope, tab.tabbrowser-tab image.tab-icon-image:scope")) {
            if (!e.shiftKey)
                this.win.BrowserReload();
            else
                this.win.BrowserReloadSkipCache();
        }
        this.tid.cancel();
        this.callback.setTarget(null);
        this.previewBaseTab = tab;
    },
};
*/
Tabsfocus.prototype = {
    events: ["mouseover", "mouseout", "click"],
    load(win) {
        this.callback.setWindow(this.win = win);
        this.previewCallback.setWindow(win);
        this.previewBaseTab = win.gBrowser.selectedTab;
        var slot = this.slot = win.gBrowser.tabs[0].flattenedTreeParentNode;

        for(var type of this.events)
            slot.addEventListener(type, this);
    },
    unload() {
        for(var type of this.events)
            this.slot.removeEventListener(type, this);
    },
    handleEvent(e) {
        this[e.type](e);
    }
};

this.TabsFocus = class extends ExtensionAPI {
    onShutdown(reason) {
        if (reason != "APP_SHUTDOWN")
            tabs_focus.uninit();
    }
    getAPI(context) {
        contExt = context.extension;
        return {
            TabsFocus: {
                initExt() {
                    tabs_focus.init();
                },
                loadWin(winInfo) {
                    tabs_focus.loadIntoWindow(contExt.windowManager.get(winInfo).window, winInfo);
                },
                unloadWin(winInfo) {
                    tabs_focus.unloadFromWindow(winInfo);
                },
                getPref(arr) {
                    return arr.map(name => [name, tabs_focus.GetPref(name)]);
                },
                setPref(arr) {
                    arr.forEach(nv => {
                        tabs_focus.SetPref(nv[0], nv[1]);
                    });
                }
            }
        };
    }
};

Отредактировано Dumby (25-11-2020 08:58:45)

Отсутствует

 

№938925-11-2020 14:26:44

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 586
UA: Firefox 83.0

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

Vitaliy V.
Такое дело. Есть hbox (красным) и не могу его привязать к #BMB_unsortedBookmarksPopup
3yahqg3o.jpg
Заделал так hbox[part="innerbox"]  {margin-left: .......) Не косяк ли это?

Отсутствует

 

№939025-11-2020 15:37:52

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

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

xrun1 пишет

Если на странице кликнуть, например, ПКМ, а потом увести мышку на другой таб, меню остаётся (может, так и раньше было, а я не замечал...).

Да так было и раньше, но так же и с сочетанием клавиш Ctrl + PageDown|PageUp. А это чем то мешает или считаете неправильным?

Dumby пишет

все вот эти перестановки .onMouse{In, Out, Clicked} не работают

Да верно, это грубая ошибка не знаю чем я думал, и даже не проверил толком.
Но всё же вариант с обратным вызовом меня тоже не устраивает, может попробую свою реализацию довести до ума.
Что скажешь насчет этого, пока расширение не обновлял

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

Выделить код

Код:

var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
var PREF_BRANCH = "extensions.tabs_focus.", objectMap = new Map(), contExt;
var tabs_focus = {
    delay: 150,
    returndelay: 50,
    previewmode: false,
    clickreloadtab: false,
    Prefs: null,
    init: function() {
        var branch = Services.prefs.getDefaultBranch(PREF_BRANCH);
        branch.setIntPref("delay", 150);
        branch.setBoolPref("previewmode", false);
        branch.setIntPref("returndelay", 50);
        branch.setBoolPref("clickreloadtab", false);
        var Prefs = this.Prefs = Services.prefs.getBranch(PREF_BRANCH);
        var delay = Prefs.getIntPref("delay");
        if (delay < 1)
            Prefs.setIntPref("delay", (delay = 150));
        this.delay = delay;
        var returndelay = Prefs.getIntPref("returndelay");
        if (returndelay < 1)
            Prefs.setIntPref("returndelay", (returndelay = 50));
        this.returndelay = returndelay;
        this.previewmode = Prefs.getBoolPref("previewmode");
        this.clickreloadtab = Prefs.getBoolPref("clickreloadtab");
        for (let win of contExt.windowManager.getAll())
            this.loadIntoWindow(win.window, win.id);
        Services.prefs.addObserver(PREF_BRANCH, this);
    },
    loadIntoWindow: function(win, winInfo) {
        var obj = new Tabsfocus();
        obj.load(win);
        objectMap.set(winInfo, obj);
    },
    unloadFromWindow: function(winInfo) {
        objectMap.get(winInfo).unload();
        objectMap.delete(winInfo);
    },
    observe: function(subject, topic, pref) {
        ({
            "extensions.tabs_focus.delay": () => {
                var delay = this.Prefs.getIntPref("delay");
                if (delay < 1)
                    this.Prefs.setIntPref("delay", (delay = 150));
                this.delay = delay;
            },
            "extensions.tabs_focus.returndelay": () => {
                var returndelay = this.Prefs.getIntPref("returndelay");
                if (returndelay < 1)
                    this.Prefs.setIntPref("returndelay", (returndelay = 50));
                this.returndelay = returndelay;
            },
            "extensions.tabs_focus.previewmode": () => {
                var onMouseIn, onMouseOut, onMouseClicked;
                if (this.previewmode = this.Prefs.getBoolPref("previewmode")) {
                    onMouseIn = "__onMouseIn";
                    onMouseOut = "__onMouseOut";
                    onMouseClicked = "__onMouseClicked";
                } else {
                    onMouseIn = "_onMouseIn";
                    onMouseOut = "_onMouseOut";
                    onMouseClicked = "_onMouseClicked";
                }
                for (let [winInfo, obj] of objectMap) {
                    obj.unload();
                    obj.onMouseIn = obj[onMouseIn];
                    obj.onMouseOut = obj[onMouseOut];
                    obj.onMouseClicked = obj[onMouseClicked];
                    obj.loadListeners();
                }
            },
            "extensions.tabs_focus.clickreloadtab": () => {
                this.clickreloadtab = this.Prefs.getBoolPref("clickreloadtab");
            }
        })[pref]?.();
    },
    GetPref: function(name) {
        var type = Services.prefs.getPrefType(name);
        switch (type) {
            case Services.prefs.PREF_BOOL:
                return Services.prefs.getBoolPref(name);
            case Services.prefs.PREF_INT:
                return Services.prefs.getIntPref(name);
            case Services.prefs.PREF_STRING:
                return Services.prefs.getStringPref(name);
        }
    },
    SetPref: function(name, value) {
        var type = Services.prefs.getPrefType(name);
        switch (type) {
            case Services.prefs.PREF_BOOL:
                Services.prefs.setBoolPref(name, value);
                break;
            case Services.prefs.PREF_INT:
                Services.prefs.setIntPref(name, value);
                break;
            case Services.prefs.PREF_STRING:
                Services.prefs.setStringPref(name, value);
                break;
        }
    },
    uninit: function() {
        Services.prefs.removeObserver(PREF_BRANCH, this);
        for (let win of contExt.windowManager.getAll())
            this.unloadFromWindow(win.id);
    }
};

function TabfocusCallback() {
    this.win = null;
    this.target = null;
}
TabfocusCallback.prototype = {
    setTarget(target) {
        this.target = target;
    },
    setWindow(win) {
        this.win = win;
    },
    notify() {
        var target = this.target;
        if (target != null) {
            this.win.gBrowser.selectedTab = target;
            this.target = null;
        }
    },
};

function Tabsfocus() {
    this.win = null;
    this.tid = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
    this.callback = new TabfocusCallback();
    this.previewBaseTab = null;
    this.previewCallback = new TabfocusCallback();
    this.previewReturnTid = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
}
Tabsfocus.prototype = {
    load(win) {
        this.win = win;
        this.callback.setWindow(win);
        this.previewCallback.setWindow(win);
        var gBrowser = win.gBrowser;
        this.previewBaseTab = gBrowser.selectedTab;
        if (!tabs_focus.previewmode) {
            this.onMouseIn = this._onMouseIn;
            this.onMouseOut = this._onMouseOut;
            this.onMouseClicked = this._onMouseClicked;
        } else {
            this.onMouseIn = this.__onMouseIn;
            this.onMouseOut = this.__onMouseOut;
            this.onMouseClicked = this.__onMouseClicked;
        }
        this.slot = gBrowser.tabs[0].flattenedTreeParentNode;
        this.loadListeners();
    },
    loadListeners() {
        var slot = this.slot;
        this.onMouseIn_ = this.onMouseIn.bind(this);
        slot.addEventListener("mouseover", this.onMouseIn_);
        this.onMouseOut_ = this.onMouseOut.bind(this);
        slot.addEventListener("mouseout", this.onMouseOut_);
        this.onMouseClicked_ = this.onMouseClicked.bind(this);
        slot.addEventListener("click", this.onMouseClicked_);
    },
    unload() {
        var slot = this.slot;
        slot.removeEventListener("mouseover", this.onMouseIn_);
        slot.removeEventListener("mouseout", this.onMouseOut_);
        slot.removeEventListener("click", this.onMouseClicked_);
    },
    _onMouseIn(e) {console.log("_onMouseIn\n" + this.onMouseIn);
        var tab = e.target.closest("tab.tabbrowser-tab:not([selected='true'])");
        if (!tab) return;
        this.callback.setTarget(tab);
        this.tid.initWithCallback(this.callback, tabs_focus.delay, this.tid.TYPE_ONE_SHOT);
    },
    __onMouseIn(e) {console.log("__onMouseIn\n" + this.onMouseIn);
        this.previewReturnTid.cancel();
        var tab = e.target.closest("tab.tabbrowser-tab:not([selected='true'])");
        if (!tab) return;
        this.callback.setTarget(tab);
        this.tid.initWithCallback(this.callback, tabs_focus.delay, this.tid.TYPE_ONE_SHOT);
    },
    _onMouseOut() {console.log("_onMouseOut\n" + this.onMouseOut);
        this.tid.cancel();
        this.callback.setTarget(null);
    },
    __onMouseOut() {console.log("__onMouseOut\n" + this.onMouseOut);
        this.tid.cancel();
        this.callback.setTarget(null);
        if (!this.previewBaseTab) return;
        this.previewReturnTid.cancel();
        this.previewCallback.setTarget(this.previewBaseTab);
        this.previewReturnTid.initWithCallback(this.previewCallback, tabs_focus.returndelay, this.previewReturnTid.TYPE_ONE_SHOT);
    },
    _onMouseClicked(e) {console.log("_onMouseClicked\n" + this.onMouseClicked);
        if (tabs_focus.clickreloadtab && e.detail == 1 && e.button == 0 && !this.callback.target && (e.composedTarget || e.originalTarget || e.target).matches("tab.tabbrowser-tab :not(toolbarbutton):not(image):scope, tab.tabbrowser-tab image.tab-icon-image:scope")) {
            if (!e.shiftKey)
                this.win.BrowserReload();
            else
                this.win.BrowserReloadSkipCache();
        }
        this.tid.cancel();
        this.callback.setTarget(null);
    },
    __onMouseClicked(e) {console.log("__onMouseClicked\n" + this.onMouseClicked);
        this.previewReturnTid.cancel();
        this.previewCallback.setTarget(null);
        var tab = this.win.gBrowser.selectedTab;
        if (tabs_focus.clickreloadtab && e.detail == 1 && e.button == 0 && !this.callback.target && this.previewBaseTab == tab && (e.composedTarget || e.originalTarget || e.target).matches("tab.tabbrowser-tab :not(toolbarbutton):not(image):scope, tab.tabbrowser-tab image.tab-icon-image:scope")) {
            if (!e.shiftKey)
                this.win.BrowserReload();
            else
                this.win.BrowserReloadSkipCache();
        }
        this.tid.cancel();
        this.callback.setTarget(null);
        this.previewBaseTab = tab;
    },
};

this.TabsFocus = class extends ExtensionAPI {
    onShutdown(reason) {
        if (reason != "APP_SHUTDOWN")
            tabs_focus.uninit();
    }
    getAPI(context) {
        contExt = context.extension;
        return {
            TabsFocus: {
                initExt() {
                    tabs_focus.init();
                },
                loadWin(winInfo) {
                    tabs_focus.loadIntoWindow(contExt.windowManager.get(winInfo).window, winInfo);
                },
                unloadWin(winInfo) {
                    tabs_focus.unloadFromWindow(winInfo);
                },
                getPref(arr) {
                    return arr.map(name => [name, tabs_focus.GetPref(name)]);
                },
                setPref(arr) {
                    arr.forEach(nv => {
                        tabs_focus.SetPref(nv[0], nv[1]);
                    });
                }
            }
        };
    }
};

solombala пишет

не могу его привязать к #BMB_unsortedBookmarksPopup

зачем именно к #BMB_unsortedBookmarksPopup привязывать если хочешь сдвинуть вправо то это должно же сработать и для других menu
или нет?
для [windows] например так

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

Выделить код

Код:

#BMB_bookmarksPopup menupopup[placespopup="true"] {
    padding-inline-start: 6px !important;
}

Отсутствует

 

№939125-11-2020 16:05:16

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

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

Vitaliy V. пишет

А это чем то мешает или считаете неправильным?

Не мешает. Просто раньше не замечал.:)

Отсутствует

 

№939225-11-2020 20:17:59

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

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

Vitaliy V. пишет

Что скажешь насчет этого, пока расширение не обновлял

Да, в этой концепции, теперь выглядит стройно.


Кстати, когда меняется настройка extensions.tabs_focus.previewmode
там же идёт перебор экземпляров, так вот, стоит ли, заодно, устанавливать previewBaseTab?
Как бы типа
obj.previewBaseTab = this.previewmode && obj.win.gBrowser.selectedTab;

Отсутствует

 

№939325-11-2020 20:52:30

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

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

Dumby пишет

стоит ли, заодно, устанавливать previewBaseTab?

Да не помешает, спасибо что глянул Tabs Focus

Хотел сказать ещё когда эту кнопку смотрел https://forum.mozilla-russia.org/viewto … 58#p781458
заметил что там опять [firefox] 84+ saveURI изменился поэтому сохранение в png не работает, надо бы добавить ещё один null аргумент

Отсутствует

 

№939426-11-2020 00:05:18

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

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

Vitaliy V. пишет

надо бы добавить ещё один null аргумент

Добавил, спасибо.

Отсутствует

 

№939526-11-2020 00:36:51

alla51
Участник
 
Группа: Members
Зарегистрирован: 17-11-2015
Сообщений: 44
UA: Firefox 78.0

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

Подскажите, пожалуйста:
1. возможно ли в FF 78 ESR 5.0 перенести панель вкладок вниз, под панель закладок?
2. выбрала Стандартную тему. Цвет верхнего меню и панели вкладок-голубой(как рабочего стола), а цвет панели с адресной строкой и панели закладок-белый. Можно ли их сделать такого же цвета- тоже голубыми?

Отсутствует

 

№939626-11-2020 13:26:01

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

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

alla51 пишет

возможно ли в FF 78 ESR 5.0 перенести панель вкладок вниз, под панель закладок?

Да, возможно, и не раз поднимался этот вопрос и корректировался стиль с 65-ой версии.
Или, если используете, обновите свой CustomCSSforFx и переключите toolkit.legacyUserProfileCustomizations.stylesheets в true для поддержки css файлов.

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

скрытый текст
Взято из вышеуказанного комплекта с правкой
8f8693362459.png

Выделить код

Код:

:root {
  --general_toolbar_color_toolbars: linear-gradient(SkyBlue,SkyBlue);
  --general_toolbar_color_navbar: linear-gradient(SkyBlue,SkyBlue);
  --general_toolbar_text_color: inherit;
  --general_toolbar_text_shadow: transparent;
}

#nav-bar:not(:-moz-lwtheme) {
  -moz-appearance: none !important;
  background: var(--general_toolbar_color_navbar, inherit) !important;
}

toolbar:not(#TabsToolbar):not(#toolbar-menubar):not(#nav-bar):not(:-moz-lwtheme) {
  -moz-appearance: none !important;
  background: var(--general_toolbar_color_toolbars, inherit) !important;
}

/* Fix issue aboves code creates on Fx75+ */
#nav-bar:not(:-moz-lwtheme) #urlbar ::-moz-selection {
  background-color: Highlight !important;
  color: HighlightText !important;
}

/**/

#main-window:not(:-moz-lwtheme) #PersonalToolbar #bookmarks-menu-button::after,
#main-window:not(:-moz-lwtheme) toolbar > toolbarbutton > .toolbarbutton-text,
#main-window:not(:-moz-lwtheme) toolbar #stop-reload-button toolbarbutton > .toolbarbutton-text,
#main-window:not(:-moz-lwtheme) toolbar #PanelUI-button toolbarbutton > .toolbarbutton-text,
#main-window:not(:-moz-lwtheme) toolbar > toolbarbutton >.toolbarbutton-badge-stack .toolbarbutton-text,
#main-window:not(:-moz-lwtheme) #nav-bar-customization-target > toolbarbutton > .toolbarbutton-text,
#main-window:not(:-moz-lwtheme) #PlacesToolbarItems toolbarbutton > :-moz-any(label,description) {
  color: var(--general_toolbar_text_color, inherit) !important;
  text-shadow: 1px 1px 1px var(--general_toolbar_text_shadow, inherit) !important;
}

/* findbar */
#main-window :-moz-any(.browserContainer,#viewSource):not(:-moz-lwtheme) :-moz-any(findbar,#FindToolbar) {
  background: var(--general_toolbar_color_toolbars, inherit) !important;
}

#main-window[style*='--lwt-header-image']:-moz-lwtheme :-moz-any(.browserContainer,#viewSource) :-moz-any(findbar,#FindToolbar) {
  background: var(--lwt-header-image) !important;
  background-position: calc(100vw - 5px) !important;
}

#main-window[style*='--lwt-header-image']:-moz-lwtheme :-moz-any(.browserContainer,#viewSource) :-moz-any(findbar,#FindToolbar) :-moz-any(.toolbarbutton-icon,.toolbarbutton-text) {
  color: var(--lwt-text-color) !important;
  fill: var(--lwt-text-color) !important;
}
#main-window[style*='--lwt-header-image']:-moz-lwtheme-brighttext :-moz-any(.browserContainer,#viewSource) :-moz-any(findbar,#FindToolbar) :-moz-any(.toolbarbutton-icon,.toolbarbutton-text) {
  text-shadow: 1px 1px 1px black !important;
}

/* fix Firefox + Windows 8.1 + lw-theme bug (occurring without custom code too) */
@media (-moz-os-version:windows-win8) {
	#navigator-toolbox:-moz-lwtheme {
	  border: unset !important;
	}
}

Или этот код ещё можно попробовать.


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

Выделить код

Код:

#identity-box[pageproxystate="valid"].verifiedDomain > #identity-icon, 
#identity-box[pageproxystate="valid"].mixedActiveBlocked > #identity-icon,
#identity-popup[connection^="secure"][lock-icon-gray] .identity-popup-security-connection {
    -moz-context-properties: fill !important;
    fill: #12BC00 !important;
}

Отредактировано sandro79 (26-11-2020 16:03:31)

Отсутствует

 

№939726-11-2020 22:50:11

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1406
UA: Firefox 68.0

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

Всем привет
Можно ли сделать чтобы заработало в фф 78, неограниченый размер боковой панели?
Это у меня в папке chrome userChrome.css

Выделить код

Код:

/* FF- Sidebar безразмерный*/
#sidebar-box {
    overflow-x: hidden !important;
    max-width: none !important;
}
#sidebar {
    min-width: 0px !important;
    max-width: none !important;
    overflow-x: hidden !important;
}

Отредактировано Stkvsky (26-11-2020 22:50:41)

Отсутствует

 

№939827-11-2020 00:53:02

alla51
Участник
 
Группа: Members
Зарегистрирован: 17-11-2015
Сообщений: 44
UA: Firefox 78.0

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

alla51 пишет

возможно ли в FF 78 ESR 5.0 перенести панель вкладок вниз, под панель закладок?

Перенесла в FF 78 ESR 5.0 панель вкладок вниз, под панель закладок, как посоветовал sandro79, дав ссылку на описание Vitaliy V. в https://forum.mozilla-russia.org/viewtopic.php?pid=784310#p784310 .Взяла код отсюда.
Раньше на FF 60 файла userChrome вообще не было.
Но теперь 3 панели: адресная, закладок и вкладок стали почти белыми. Как их сделать такими же или близкими по цвету к панели меню (голубыми)?
и на панели вкладок выделенная вкладка стала такого же цвета, что и остальные невыделенные (как ее сделать белой?)

скрытый текст
714a0a96f476t.jpg

Отсутствует

 

№939927-11-2020 12:53:43

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

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

Stkvsky
сами же ответили на свой вопрос?

alla51 пишет

Но теперь 3 панели: адресная, закладок и вкладок стали почти белыми.

стиль покрасил только панель вкладок остальные по дефолту.


чтобы заменить системные цвета панелей добавьте это

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

Выделить код

Код:

*|*:root {
    --toolbar-non-lwt-bgcolor: #a0cdf4 !important;
    --toolbar-non-lwt-textcolor: black !important;
}
.tabbrowser-tab[multiselected="true"]:not(:-moz-lwtheme),
.tabbrowser-tab[selected="true"]:not(:-moz-lwtheme) {
    --toolbar-bgcolor: white !important;
    color: black !important;
}

Отредактировано Vitaliy V. (27-11-2020 12:54:11)

Отсутствует

 

№940027-11-2020 13:25:15

alla51
Участник
 
Группа: Members
Зарегистрирован: 17-11-2015
Сообщений: 44
UA: Firefox 78.0

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

Vitaliy V., спасибо большое. Все панели стали одинакового сине-голубого цвета!

Отсутствует

 

Board footer

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