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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№1007619-04-2021 00:56:55

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

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

Vitaliy V.
А нельзя ли изменить код urlbarhistorydropmarker так, чтобы его можно было подключить импортом через этот загрузчик?
Пытался я его править в начале и конце по аналогии с другими Вашими кодами, но ничего не получилось.
Загрузчик я немного подрезал, убрал неиспользуемое мной, ниже код, работает исправно.
Скажите, правильно я его укоротил? Строку try { this.urlbarhistorydropmarker.constructor(); } catch (e) {} я закомментировал, чтоб не попасть впросак.
Там сразу я подправил, но это уже неактуально.

скрытый текст
Да, ещё, скрипты кладу в папку scripts3 ...`chrome://user_chrome_files/content/custom_scripts/scripts3/${relpath}`...

Выделить код

Код:

/* ************************************************ */
(() => {
            var loadscript = (relpath, obj) => {
                try {
                    Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/scripts3/${relpath}`, obj, "UTF-8");
                    return true;
                } catch(e) { }
                return false;
            },
            load_scripts_by_url = {
                browser: win => {
                    setTimeout(() => {
                    loadscript("favicon_in_urlbar.js", win);
                    loadscript("search_engine_icon.js", win);
                    loadscript("urlbarhistorydropmarker.js", this);
                    loadscript("Tabs_Focus.js", win);
                    loadscript("tabstoolbar_doubleclick_opennewtab.js", win);
                    loadscript("contextmenuopenwith.js", this);
                    loadscript("restart_item_in_menu.js", this);
                    loadscript("add_bookmark_the_bookmarks_menu.js", win);
                    }, 0);
                },
            };
            load_scripts_by_url.browser(window);
        })();
        /* ************************************************ */

Отредактировано sandro79 (19-04-2021 18:42:09)

Отсутствует

 

№1007719-04-2021 13:37:18

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 378
UA: Firefox 88.0

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

Здравствуйте господа форумчане перестал работать код в user_chrome_files в user_chrome.manifest для отображения фавиконки может есть решение этой проблемы? [firefox] 88.0

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

Выделить код

Код:

content user_chrome_files ./
# Не уверены, не редактируйте этот файл!
override chrome://mozapps/skin/places/defaultFavicon.svg chrome://user_chrome_files/content/svg/defaultFavicon.svg

и как бы сделать поуже панель закладок?

Отредактировано egorsemenov06 (19-04-2021 16:54:01)

Отсутствует

 

№1007819-04-2021 17:38:30

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

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

sandro79 пишет

А нельзя ли изменить код urlbarhistorydropmarker так, чтобы его можно было подключить импортом через этот загрузчик?

Изменил

sandro79 пишет

Загрузчик я немного подрезал, убрал неиспользуемое мной, ниже код, работает исправно.
Скажите, правильно я его укоротил?

Да. Но все ли скрипты надо загружать в loadscript("search_engine_icon.js", this);
Пока только мои скрипты так загружаются, для остальных win

egorsemenov06 пишет

перестал работать код в user_chrome_files в user_chrome.manifest для отображения фавиконки может есть решение этой проблемы? [firefox] 88.0

chrome://mozapps/skin/places/defaultFavicon.svg
chrome://global/skin/icons/defaultFavicon.svg

egorsemenov06 пишет

и как бы сделать поуже панель закладок?

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

Выделить код

Код:

#PersonalToolbar {
  --bookmark-block-padding: 1px;
  padding-block: 1px !important;
}

Отредактировано Vitaliy V. (19-04-2021 17:59:58)

Отсутствует

 

№1007919-04-2021 18:28:43

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 378
UA: Firefox 88.0

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

Vitaliy V. пишет
egorsemenov06 пишет

перестал работать код в user_chrome_files в user_chrome.manifest для отображения фавиконки может есть решение этой проблемы? [firefox] 88.0

chrome://mozapps/skin/places/defaultFavicon.svg
chrome://global/skin/icons/defaultFavicon.svg

egorsemenov06 пишет

и как бы сделать поуже панель закладок?

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

Выделить код

Код:

#PersonalToolbar {
  --bookmark-block-padding: 1px;
  padding-block: 1px !important;
}

Спасибо большое!!!

Отсутствует

 

№1008019-04-2021 18:36:09

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

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

Vitaliy V.
После обновы  до 88 перестали работать коды, прописанные в custom_script_win.js, с custom_scrip.js и стилями все ОК. Не посмотрите, маэстро? Или это конец? на 87 прекрасно отрабатывал

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

Выделить код

Код:

// Этот скрипт работает в главном окне браузера если включено в настройках

var ucf_custom_script_win = {
    initialized: false,
    get unloadlisteners() {
        delete this.unloadlisteners;
        window.addEventListener("unload", this, { once: true });
        return this.unloadlisteners = [];
    },
    load() {
        if (this.initialized)
            return;
        this.initialized = true;
        this.specialwidgets.init(); // <-- Special Widgets
        // this.autohidesidebar.init(); // <-- Auto Hide Sidebar
        /* ************************************************ */
        // Здесь может быть ваш код который сработает по событию "load" не раньше
        
        try { this.urlbarhistorydropmarker.constructor(); } catch (e) {} /* https://forum.mozilla-russia.org/viewtopic.php?pid=781188#p781188 */
        this.contextmenuopenwith.constructor();
        // this.faviconinurlbar.constructor(); /* https://forum.mozilla-russia.org/viewtopic.php?pid=781087#p781087 */
        this.menubarvisibilitychance.setbuttonboxwidth(); /* https://forum.mozilla-russia.org/viewtopic.php?pid=784310#p784310 */
        (() => {
            var loadscript = (relpath, obj) => {
                try {
                    Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${relpath}`, obj, "UTF-8");
                    return true;
                } catch(e) { }
                return false;
            },
        load_scripts_by_url = {
            browser: win => {
                //>>>>>>>>>>| Этот блок требуется для боковой панели и др., очистите строку ниже если он нужен |>>>>>>>>>>
                var box = document.querySelector("#browser") || window;
                var listener = e => {
                    var doc = e.target || ({});
                    load_scripts_by_url[doc.documentURI]?.(doc.defaultView);
                };
                box.addEventListener("pageshow", listener);
                this.loadscriptswinandsidebar = {
                    destructor() {
                        box.removeEventListener("pageshow", listener);
                    }
                };
                this.unloadlisteners.push("loadscriptswinandsidebar");
                /* <<<<<<<<<<<<<<<<<<<< */
                setTimeout(() => {
                  //>>>>>>>>>>| Загрузка скриптов для browser.xhtml |>>>>>>>>>>
                  loadscript("cs_win/favicon_in_urlbar.uc.js", win);
                  loadscript("cs_win/search_engine_icon_in_searchbar.uc.js", win);
                  loadscript("cs_win/sidebar_open_close_folder_button.js", win);
                  loadscript("cs_win/restart_in_menu.js", win);
                  loadscript("cs_win/tab_focus.js", win);
				  loadscript("cs_win/close_page.uc.js", win);
				  loadscript("cs_win/context-searchselect.js", win);
//                  loadscript("cs_win/custom_scrollbars.uc.js", win);
//                  loadscript("cs_win/tabstoolbar_doubleclickontab_reloadtab.uc.js", win);        
                  // и так далее
                  //<<<<<<<<<<<<<<<<<<<<
                }, 0);
            },
            //>>>>>>>>>>| Загрузка скриптов для др. документов |>>>>>>>>>> https://forum.mozilla-russia.org/viewtopic.php?pid=788301#p788301
                "chrome://browser/content/places/bookmarksSidebar.xhtml": win => {
                    // боковая панель закладок
                    loadscript("cs_win/SidebarBookmarkSearchOpenFolder.uc.js", win);
                },
            //<<<<<<<<<<<<<<<<<<<<
          };
          load_scripts_by_url.browser(window);
        })();
        // https://forum.mozilla-russia.org/viewtopic.php?pid=788229#p788229
        // Очистить панель адреса или поиска прокруткой колёсиком мыши на панели https://forum.mozilla-russia.org/viewtopic.php?pid=788262#p788262
        (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);

        // Автоматически открывать папки закладок на панели закладок
        (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 = [
                    ['Yandx', 'https://yastatic.net/morda-logo/i/favicon_islands.ico', 'https://yandex.ru/images/search?rpt=imageview&url='],
                    ['Googl', 'https://www.google.lv/favicon.ico', 'https://www.google.com/searchbyimage?&image_url='],
                    ['Bingo', '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);

        /* Очистить куки ПКМ на иконке в строке адреса https://forum.mozilla-russia.org/viewtopic.php?pid=783022#p783022 */
        (this.clearsitedatawithrightclick = {
            get clearSiteData() {
                delete this.clearSiteData;
                try {
                    return this.clearSiteData = eval(`(${gIdentityHandler.clearSiteData})`.replace(/^\((async\s)?.*?clearSiteData/, "($1function clearSiteData").replace(/this\s*\./g, "gIdentityHandler.").replace(/(?:let\s*hidden\s*=\s*new\s*Promise\s*\([\S\s]+await\s*hidden\s*;|PanelMultiView\.hidePopup.+?;|event\.stopPropagation.+?;)/g, ""));
                } catch (e) {}
                return this.clearSiteData = function() {}
            },
            init(that) {
                var identitybox = this.identitybox = document.querySelector("#identity-box");
                if (!identitybox)
                    return;
                identitybox.addEventListener("contextmenu", this, true);
                identitybox.addEventListener("click", this, true);
                that.unloadlisteners.push("clearsitedatawithrightclick");
            },
            handleEvent(e) {
                if (e.button != 2)
                    return;
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();
                if (e.type != "click")
                    return;
                this.clearSiteData(e);
            },
            destructor() {
                this.identitybox.removeEventListener("contextmenu", this, true);
                this.identitybox.removeEventListener("click", this, true);
            },
        }).init(this);
		
		// Перевод https://forum.mozilla-russia.org/viewtopic.php?pid=788872#p788872
		({
		async init() {
				await delayedStartupPromise;
				var code = Cu.readUTF8URI(Services.io.newURI(
					"chrome://user_chrome_files/content/custom_scripts/cs_win/google-translate.js"
				));
				var addEventListener = (...args) => {
					var trg = args[3];
					if (!trg) trg = args[3] = window;
					trg.addEventListener(...args);
					this.handlers.push(args);
				}
				new Function(
					"_id,xhtmlns,addDestructor,addEventListener,gClipboard", code
				).call(
					this, "ucf-cbinit-google-translate", "http://www.w3.org/1999/xhtml",
					() => {}, addEventListener, {read: () => readFromClipboard()}
				);
				addEventListener("unload", this, {once: true});
		},
		handlers: [],
		handleEvent() {
			for(var args of this.handlers)
				args.pop().removeEventListener(...args);
			delete this.handlers;
		}
}).init();
        
        		
        /* ************************************************ */
    },
    handleEvent(e) {
        this[e.type](e);
    },
    unload() {
        this.unloadlisteners.forEach(str => {
            try {
                this[str].destructor();
            } catch (e) {}
        });
    },
    specialwidgets: {
        _timer: null,
        get Customizable() {
            delete this.Customizable;
            if ("createSpecialWidget" in CustomizableUI)
                return this.Customizable = CustomizableUI;
            var scope = null;
            try {
                scope = Cu.import("resource:///modules/CustomizableUI.jsm", {}).CustomizableUIInternal;
            } catch (e) { }
            return this.Customizable = scope;
        },
        init() {
            if (!("CustomizableUI" in window) || !("gCustomizeMode" in window))
                return;
            ucf_custom_script_win.unloadlisteners.push("specialwidgets");
            window.addEventListener("customizationready", this);
        },
        destructor() {
            window.removeEventListener("customizationready", this);
        },
        handleEvent(e) {
            this[e.type](e);
        },
        customizationchange() {
            clearTimeout(this._timer);
            this._timer = setTimeout(() => {
                this.createSpecialWidgets();
            }, 1000);
        },
        customizationready() {
            if (!this.Customizable)
                return;
            this.createSpecialWidgets();
            window.addEventListener("customizationchange", this);
            window.addEventListener("customizationending", this);
        },
        customizationending() {
            window.removeEventListener("customizationchange", this);
            window.removeEventListener("customizationending", this);
        },
        createSpecialWidgets() {
            try {
                let fragment = document.createDocumentFragment();
                if (this.findSpecialWidgets("spring")) {
                    let spring = this.Customizable.createSpecialWidget("spring", document);
                    spring.setAttribute("label", "Растягивающийся интервал");
                    fragment.append(gCustomizeMode.wrapToolbarItem(spring, "palette"));
                }
                if (this.findSpecialWidgets("spacer")) {
                    let spacer = this.Customizable.createSpecialWidget("spacer", document);
                    spacer.setAttribute("label", "Интервал");
                    fragment.append(gCustomizeMode.wrapToolbarItem(spacer, "palette"));
                }
                if (this.findSpecialWidgets("separator")) {
                    let separator = this.Customizable.createSpecialWidget("separator", document);
                    separator.setAttribute("label", "Разделитель");
                    fragment.append(gCustomizeMode.wrapToolbarItem(separator, "palette"));
                }
                gCustomizeMode.visiblePalette.append(fragment);
            } catch (e) {}
        },
        findSpecialWidgets(string) {
            try {
                if (!gCustomizeMode.visiblePalette.querySelector(`toolbar${string}[id^="customizableui-special-${string}"]`))
                    return true;
            } catch (e) {}
            return false;
        }
    },
    autohidesidebar: {
        events: ["dragenter", "drop", "dragexit", "MozLayerTreeReady"],
        init() {
            var sidebar = this.sidebar = document.querySelector("#sidebar-box");
            if (!sidebar) return;
            for (let type of this.events)
                sidebar.addEventListener(type, this);
            ucf_custom_script_win.unloadlisteners.push("autohidesidebar");
            var popup = this.popup = document.querySelector("#sidebarMenu-popup");
            if (!popup) return;
            popup.addEventListener("popupshowing", this);
        },
        destructor() {
            var sidebar = this.sidebar;
            for (let type of this.events)
                sidebar.removeEventListener(type, this);
            if (!this.popup) return;
            this.popup.removeEventListener("popupshowing", this);
        },
        handleEvent(e) {
            this[e.type](e);
        },
        MozLayerTreeReady(e) {
            if (e.originalTarget?.id == "webext-panels-browser" && !this.sidebar.hasAttribute("sidebardrag")) {
                window.addEventListener("mousedown", () => {
                    this.drop();
                }, { once: true });
                this.dragenter();
            }
        },
        popupshowing() {
            this.popup.addEventListener("popuphidden", () => {
                this.drop();
            }, { once: true });
            this.dragenter();
        },
        dragenter() {
            if (!this.sidebar.hasAttribute("sidebardrag"))
                this.sidebar.setAttribute("sidebardrag", "true");
        },
        drop() {
            if (this.sidebar.hasAttribute("sidebardrag"))
                this.sidebar.removeAttribute("sidebardrag");
        },
        dragexit(e) {
            var sidebar = this.sidebar;
            var boxObj = sidebar.getBoundingClientRect(), boxScrn = !sidebar.boxObject ? sidebar : sidebar.boxObject;
            if ((!e.relatedTarget || e.screenY <= (boxScrn.screenY + 5) || e.screenY  >= (boxScrn.screenY + boxObj.height - 5)
                || e.screenX <= (boxScrn.screenX + 5) || e.screenX >= (boxScrn.screenX + boxObj.width - 5))
                && sidebar.hasAttribute("sidebardrag"))
                sidebar.removeAttribute("sidebardrag");
        }
    },
	
    urlbarhistorydropmarker: {
        dropmarker: null,
        provider: null,
        constructor: function() {
            Services.prefs.addObserver("browser.urlbar.suggest.topsites", this);
            ucf_custom_script_win.unloadlisteners.push("urlbarhistorydropmarker");
            var {UrlbarProviderTopSites: provider} = {UrlbarProviderTopSites: this.provider} = ChromeUtils.import("resource:///modules/UrlbarProviderTopSites.jsm");
            if (!provider.orig_isActive) {
                provider.orig_isActive = provider.isActive;
                provider.ucf_isActive = true;
            }
            if (!Services.prefs.getBoolPref("browser.urlbar.suggest.topsites", true))
               this.createDropmarker();
        },
        createDropmarker: function() {
            this.provider.isActive = {
                isActive(queryContext) {
                    var ucf_isActive = this.ucf_isActive;
                    this.ucf_isActive = true;
                    return !queryContext.searchString ? ucf_isActive : false;
                }
            }.isActive;
            var fragment = MozXULElement.parseXULToFragment(`<image class="urlbar-history-dropmarker urlbar-icon chromeclass-toolbar-additional" role="button" tooltiptext="Показать историю"/>`);
            var dropmarker = this.dropmarker = fragment.firstElementChild;
            document.querySelector("#urlbar #page-action-buttons").before(fragment);
            dropmarker.addEventListener("mousedown", this);
        },
        destructor: function() {
            if (this.dropmarker)
                this.dropmarker.removeEventListener("mousedown", this);
            Services.prefs.removeObserver("browser.urlbar.suggest.topsites", this);
        },
        observe: function() {
            if (!this.dropmarker)
                this.createDropmarker();
            else {
                this.dropmarker.removeEventListener("mousedown", this);
                this.dropmarker.remove();
                this.dropmarker = null;
                this.provider.isActive = this.provider.orig_isActive;
            }
        },
        handleEvent: function(event) {
            event.preventDefault();
            event.stopPropagation();
            if (gURLBar.view.isOpen)
                gURLBar.view.close();
            else {
                this.provider.ucf_isActive = false;
                gURLBar.focus();
                gURLBar.startQuery({
                    allowAutofill: false
                });
            }
        }
    },
    contextmenuopenwith: {
        _eventlisteners: [],
        constructor: function() {
            var attrimage = true; // true или false Добавить иконки (атрибут "image") или нет
            var submenu = true; // true или false Добавить подменю для пунктов или нет
            // ['ID пункта', 'имя приложения', 'путь к приложению', 'аргументы через пробел (то что в двойных кавычках считается за один аргумент)', 'иконка (для ОС Windows необязательно)'],
            var arrayWindows = [ // для Windows
                // ['edge', 'Microsoft Edge', 'C:\\Windows\\explorer.exe', '"microsoft-edge:%OpenURI "', 'moz-icon://file://C:\\Windows\\SystemApps\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\MicrosoftEdge.exe?size=16'],
                ['imagup', 'ImageUpl', 'd:\\Install\\Graphika\\ImageUp\\1.3.3.4856\\Image Uploader.exe', '%OpenURI'],
                ['usd', 'USDownd', 'd:\\Install\\Net\\USDown\\1.3.5.91\\USDownloader.exe', '%OpenURI'],
                ['qtrans', 'Qtranslat', 'c:\\Program Files (x86)\\QTranslate\\QTranslate.exe', '%OpenURI'],
                ['potplayer', 'PotPlayer', 'c:\\Program Files\\PotPlayer\\PotPlayerMini64.exe', '%OpenURI /add'],
                // ['iexplore', 'IExplor', 'C:\\Program Files\\Internet Explorer\\iexplore.exe', '%OpenURI'],
            ];
            var arrayLinux = [ // для Linux
                ['smplayer', 'SMPlayer', '/usr/bin/smplayer', '%OpenURI', 'moz-icon://stock/smplayer?size=menu'],
                ['vlc', 'VLC', '/usr/bin/vlc', '%OpenURI', 'moz-icon://stock/vlc?size=menu'],
                ['uget', 'uGet', '/usr/bin/uget-gtk', '%OpenURI', 'moz-icon://stock/uget-icon?size=menu'],
            ];
            var arrayMacos = [ // для MacOS
                [],
            ];

            var arrayOS, platform = AppConstants.platform, length;
            if (platform == "win")
                arrayOS = arrayWindows;
            else if (platform == "linux")
                arrayOS = arrayLinux;
            else if (platform == "macosx")
                arrayOS = arrayMacos;
            else
                return;
            if (!(length = arrayOS.length))
                return;
            var addEventListener = this.addEventListener.bind(this);
            ucf_custom_script_win.unloadlisteners.push("contextmenuopenwith");
            var popup = document.querySelector("#contentAreaContextMenu"), seppage = popup.querySelector("#context-sep-viewbgimage"), sepopen = popup.querySelector("#context-sep-open"),
            fragpage = document.createDocumentFragment(), fraglink = document.createDocumentFragment(), subpage = "", sublink = "";
            if (length == 1)
                submenu = false;
            if (!submenu) {
                subpage = "Открыть страницу в ";
                sublink = "Открыть ссылку в ";
            }
            arrayOS.forEach(item => {
                var id = item[0], name = item[1], path = item[2], arg = !item[3] ? "" : item[3], iconpath;
                if (!id || !name || !path)
                    return;
                var menuitem_0 = document.createXULElement("menuitem");
                menuitem_0.id = `open-current-page-with-${id}`;
                menuitem_0.className = "menuitem-iconic open-current-page-with-application";
                menuitem_0.setAttribute("label", `${subpage}${name}`);
                menuitem_0.applicationpath = path;
                menuitem_0.applicationarg = arg;
                if (attrimage) {
                    iconpath = !item[4] ? (`moz-icon://file://${path}?size=16`) : item[4];
                    menuitem_0.setAttribute("image", iconpath);
                }
                fragpage.append(menuitem_0);
                addEventListener(menuitem_0, "command", function(event) {
                    try {
                        var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                        file.initWithPath(target.applicationpath);
                        if (!file.exists() || !file.isExecutable()) return;
                        arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => {
                            if (/%OpenURI/g.test(sp)) {
                                let uri = gBrowser.selectedBrowser.currentURI.displaySpec;
                                try {
                                    let _uri;
                                    if (_uri = ReaderMode.getOriginalUrl(uri))
                                        uri = Services.io.newURI(_uri).displaySpec;
                                } catch(e) {}
                                try {
                                    uri = decodeURIComponent(uri);
                                } catch(e) {}
                                return sp.replace(/^"|"$/g, "").replace("%OpenURI", uri);
                            }
                            return sp.replace(/^"|"$/g, "");
                        }) : [];
                        var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
                        process.init(file);
                        process.runwAsync(arg, arg.length);
                    } catch(e) {}
                });
                var menuitem_1 = document.createXULElement("menuitem");
                menuitem_1.id = `open-link-with-${id}`;
                menuitem_1.className = "menuitem-iconic open-link-with-application";
                menuitem_1.setAttribute("label", `${sublink}${name}`);
                menuitem_1.applicationpath = path;
                menuitem_1.applicationarg = arg;
                if (attrimage)
                    menuitem_1.setAttribute("image", iconpath);
                fraglink.append(menuitem_1);
                addEventListener(menuitem_1, "command", function(event) {
                    try {
                        var target = event.currentTarget, arg = target.applicationarg, file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
                        file.initWithPath(target.applicationpath);
                        if (!file.exists() || !file.isExecutable() || !window?.gContextMenu?.linkURI?.displaySpec) return;
                        arg = (arg !== "") ? arg.split(/\s+(?=(?:[^"]*"[^"]*")*[^"]*$)/g).map(sp => {
                            if (/%OpenURI/g.test(sp)) {
                                let uri = gContextMenu.linkURI.displaySpec;
                                try {
                                    let _uri;
                                    if (_uri = ReaderMode.getOriginalUrl(uri))
                                        uri = Services.io.newURI(_uri).displaySpec;
                                } catch(e) {}
                                try {
                                    uri = decodeURIComponent(uri);
                                } catch(e) {}
                                return sp.replace(/^"|"$/g, "").replace("%OpenURI", uri);
                            }
                            return sp.replace(/^"|"$/g, "");
                        }) : [];
                        var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
                        process.init(file);
                        process.runwAsync(arg, arg.length);
                    } catch(e) {}
                });
            });
            if (!submenu) {
                seppage.before(fragpage);
                sepopen.before(fraglink);
            } else {
                let menu = document.createXULElement("menu");
                menu.id = "open-current-page-with-submenu";
                menu.className = "menu-iconic open-current-page-with-application";
                menu.setAttribute("label", "Открыть страницу в...");
                let menupopup = document.createXULElement("menupopup");
                menupopup.append(fragpage);
                menu.append(menupopup);
                seppage.before(menu);
                menu = document.createXULElement("menu");
                menu.id = "open-link-with-submenu";
                menu.className = "menu-iconic open-link-with-application";
                menu.setAttribute("label", "Открыть ссылку в...");
                menupopup = document.createXULElement("menupopup");
                menupopup.append(fraglink);
                menu.append(menupopup);
                sepopen.before(menu);
            }
            var style = "data:text/css;charset=utf-8," + encodeURIComponent(`
                #contentAreaContextMenu #context-openlink:not([hidden="true"]) ~ .open-current-page-with-application,
                #contentAreaContextMenu #context-openlink[hidden="true"] ~ .open-link-with-application {
                    display: none !important;
                }
            `);
            windowUtils.loadSheetUsingURIString(style, windowUtils.USER_SHEET);
        },
        addEventListener: function(...arr) {
            var elm = arr[0];
            if (!elm)
                return;
            elm.addEventListener(...arr.slice(1));
            this._eventlisteners.push(arr);
        },
        destructor: function() {
            for(var arr of this._eventlisteners)
                arr.shift().removeEventListener(...arr);
            delete this._eventlisteners;
        }
    },
    faviconinurlbar: {
        constructor: function() {
            var faviconinurlbar = document.querySelector("#permissions-granted-icon");
            if (!faviconinurlbar)
                return;
            gBrowser.tabContainer.addEventListener("TabAttrModified", this);
            gBrowser.addProgressListener(this);
            ucf_custom_script_win.unloadlisteners.push("faviconinurlbar");
            this.handleEvent = function(event) {
                var tab = event.target, image;
                if (tab.selected)
                    faviconinurlbar.style.setProperty("--v-faviconinurlbar", (image = tab.image) ? `url("${image}")` : "");
            };
            this.onStateChange = function(aWebProgress, aRequest, aStateFlags, aStatus) {
                var nsiwpl = Ci.nsIWebProgressListener;
                if ((aStateFlags & nsiwpl.STATE_IS_NETWORK) && aWebProgress && aWebProgress.isTopLevel) {
                    if (aStateFlags & nsiwpl.STATE_START) {
                        faviconinurlbar.setAttribute("busy", true);
                    } else if (aStateFlags & nsiwpl.STATE_STOP) {
                        faviconinurlbar.setAttribute("busy", false);
                        if (!gBrowser.selectedTab.image)
                            faviconinurlbar.style.setProperty("--v-faviconinurlbar", "");
                    }
                }
            };
        },
        destructor: function() {
            gBrowser.tabContainer.removeEventListener("TabAttrModified", this);
            gBrowser.removeProgressListener(this);
        }
    },
    menubarvisibilitychance: {
        buttons: null,
        buttonsfullscreen: null,
        constructor() {
            var menubar = this.menubar = document.querySelector("#toolbar-menubar");
            if (!menubar) return;
            this.observer = new MutationObserver(() => {
                this.settoolbarvisibility();
            });
            this.observer.observe(menubar, {
                attributeFilter: ["autohide", "inactive"],
                attributes: true,
            });
            this.sizemodechange = new MutationObserver(() => {
                this.setbuttonboxwidth();
            });
            this.sizemodechange.observe(document.documentElement, {
                attributeFilter: ["sizemode"],
                attributes: true,
            });
            ucf_custom_script_win.unloadlisteners.push("menubarvisibilitychance");
            this.settoolbarvisibility();
        },
        settoolbarvisibility() {
            var docElm = document.documentElement;
            if (this.menubar.getAttribute("autohide") == "true" && this.menubar.getAttribute("inactive") == "true") {
                docElm.setAttribute("v_menubar_autohide", true);
                this.setbuttonboxwidth();
            } else
                docElm.setAttribute("v_menubar_autohide", false);
        },
        width(outerRect, innerRect) {
            if (!window.RTL_UI)
                this.width = (outerRect, innerRect) => outerRect.right - innerRect.left;
            else
                this.width = (outerRect, innerRect) => innerRect.right - outerRect.left;
            this.width(outerRect, innerRect);
        },
        setbuttonboxwidth() {
            var buttons, docElm = document.documentElement;
            if (docElm.getAttribute("sizemode") != "fullscreen")
                buttons = (this.buttons || (this.buttons = this.menubar.querySelector(".titlebar-buttonbox-container")));
            else
                buttons = (this.buttonsfullscreen || (this.buttonsfullscreen = document.querySelector("#window-controls")));
            var innerRect = buttons.getBoundingClientRect();
            if (innerRect.width < 1) {
                docElm.style.setProperty("--v-titlebar-buttonbox-container-width", "0px");
                return;
            }
            var outerRect = docElm.getBoundingClientRect();
            docElm.style.setProperty("--v-titlebar-buttonbox-container-width", `${this.width(outerRect, innerRect)}px`);
        },
        destructor() {
            this.observer.disconnect();
            this.sizemodechange.disconnect();
            this.observer = null;
            this.sizemodechange = null;
        }
    },
};

if (window.document.readyState != "complete") {
    window.addEventListener("load", function load() {
        ucf_custom_script_win.load();
    }, { once: true });
} else
    ucf_custom_script_win.load();

ucf_custom_script_win.menubarvisibilitychance.constructor();

Отредактировано bezuma (19-04-2021 19:01:26)

Отсутствует

 

№1008119-04-2021 18:58:15

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

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

Vitaliy V. пишет

Изменил

Спасибо! Великолепно!

Vitaliy V. пишет

Да. Но все ли скрипты надо загружать в loadscript("search_engine_icon.js", this);
Пока только мои скрипты так загружаются, для остальных win

Понятно, подправил, в предыдущем посте тоже. Всё работает! Благодарю!
bezuma

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

Выделить код

Код:

Выделите всё что у вас под спойлером и нажмите кнопку Code

Отсутствует

 

№1008219-04-2021 19:04:41

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

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

sandro79
сделал, я и смотрю, откуда там смайлы появились

Отсутствует

 

№1008319-04-2021 20:15:18

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

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

bezuma
about:user-chrome-files т.е. настройки открываются?

Отсутствует

 

№1008419-04-2021 20:19:27

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

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

Vitaliy V.
Да

скрытый текст
39d9cce7dc3f750d551dc00320fa4940.png

Отсутствует

 

№1008519-04-2021 20:56:45

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

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

bezuma
Ну так вам обновить надо, из-за него не работало скорее всего contextmenuopenwith https://forum.mozilla-russia.org/viewto … 54#p782454
faviconinurlbar https://forum.mozilla-russia.org/viewto … 69#p789469
и этот сегодня обновил urlbarhistorydropmarker https://forum.mozilla-russia.org/viewto … 88#p781188

Отредактировано Vitaliy V. (19-04-2021 21:01:54)

Отсутствует

 

№1008619-04-2021 21:09:59

ofizer
Участник
 
Группа: Members
Зарегистрирован: 17-08-2013
Сообщений: 310
UA: Firefox 88.0

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

Vitaliy V.
Виталий, извиняюсь за очередное беспокойство, но перестал работать скрипт для контекстного меню "Информация об изображении": http://forum.mozilla-russia.org/viewtop … 35#p789635.

Отсутствует

 

№1008719-04-2021 21:21:40

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

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

ofizer
У меня работает на [firefox] 88
А на 89+ он уже не нужен https://forum.mozilla-russia.org/viewto … 21#p790021

Отсутствует

 

№1008819-04-2021 21:48:43

ofizer
Участник
 
Группа: Members
Зарегистрирован: 17-08-2013
Сообщений: 310
UA: Firefox 88.0

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

Vitaliy V.

У меня работает

Переустановил 87-ую, обновил до 88-ой - снова заработал.

А на 89+ он уже не нужен

Да, читал, спасибо.

Отсутствует

 

№1008921-04-2021 12:54:13

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 378
UA: Firefox 88.0

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

Здравствуйте,подскажите пожалуйста как при фокусе в панели адреса и поиска сделать чтобы убирались надписи поиск и введите поисковой запрос или адресa871a0a71932f22c5cd55ed15f410bca.png

Отсутствует

 

№1009021-04-2021 15:50:47

v4386
Участник
 
Группа: Members
Зарегистрирован: 16-11-2017
Сообщений: 122
UA: Firefox 88.0

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

Здравствуйте!
Подскажите, пожалуйста, код для решения проблемы чёрной полосы в Панели вкладок в Стандартной теме в последней версии FF 88, когда браузер оказывается не в фокусе.
94186f283032bf0ea4e79346af8e6987.jpeg
А так у меня выглядит эта Панель вкладок, когда браузер в фокусе.
4e823ee6559f1fc6138ab5ec3bc5de2d.jpeg

Отредактировано v4386 (21-04-2021 16:05:04)

Отсутствует

 

№1009122-04-2021 10:37:27

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

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

Dobrov пишет

    и может быть Greasemonkey скрипт

А это уже другая область, контента, можно использовать Frame script
Но framescript устарел, есть замена ему JSWindowActor
Вот пример JSWindowActor для user_chrome_files https://forum.mozilla-russia.org/viewto … 52#p788552
Есть смысл если скриптов Greasemonkey немного, иначе проще использовать менеджеры скриптов по их назначению.

Vitaliy , а можно живой пример на чем-нибудь простом, ну например вот открывашка спойлеров?

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

Выделить код

Код:

// ==UserScript==
// @name        Spoilers_open
// @namespace   comments
// @author	mokujin
// @match       *://*.livejournal.com/*
// @match       *://*.rutracker.org/*
// @match       *://forum.oszone.net/*
// @grant       none
// ==/UserScript==

setTimeout( ()=> document.addEventListener("scroll", moreSpoilerOpen, false) , 2000 );

function moreSpoilerOpen() {
let dom = document.domain.replace(/^www./i,'').split('.').reverse(), arrLinks = [];
     dom = dom[1] + "." + dom[0];

  switch(dom) {
       case "livejournal.com":
              arrLinks = Array.from( document.querySelectorAll( "A[class='b-pseudo']") );
              arrLinks.forEach( (el)=> { if ( el.innerHTML == 'Expand' ) el.click() } );
          break; return;
       case "rutracker.org":
              arrLinks = Array.from(document.getElementsByClassName('sp-head folded')); break;
       case "forum.oszone.net":
              arrLinks = Array.from(document.getElementsByClassName('spoiler-head')); break;
       default: return;
       }
  if( arrLinks.length > 0 ) arrLinks.forEach( (lnk)=> lnk.click() );
  document.removeEventListener("scroll", moreSpoilerOpen, false);

};

Отредактировано dezhnev (22-04-2021 10:38:01)

Отсутствует

 

№1009222-04-2021 14:49:13

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 397
UA: Firefox 87.0

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

Vitaliy V. - код searchSelect "Искать в…" не скрывает отключенные Поисковики.
исправьте для Firefox 87 !


А результат работы в custom_script_win.js такого же кода от Dumby - только с каждым правым кликом увеличивается число пустых подменю…

Отсутствует

 

№1009322-04-2021 17:41:16

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

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

Пользуюсь расширением Awesome RSS. В крайней версии [firefox] 88.0 значок в адресной строке раскорячило по вертикали. Автору отписался. Можно как-то самому исправить подручными средствами?

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

Отсутствует

 

№1009422-04-2021 18:18:47

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

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

xrun1
Очевидно та же проблема №15478 ?

Отсутствует

 

№1009522-04-2021 21:33:12

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 378
UA: Firefox 88.0

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

Ребята скажите пожалуйста как покрасить эти кнопки
e326d8968e327f64925d2ad10b0a3e3c.png

Отсутствует

 

№1009622-04-2021 21:50:49

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

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

egorsemenov06

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

Отсутствует

 

№1009722-04-2021 22:11:37

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 378
UA: Firefox 88.0

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

sandro79 пишет

egorsemenov06

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

Спасибо большое

Отсутствует

 

№1009823-04-2021 06:24:31

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

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

Vitaliy V.
Что-то у меня после обновления [firefox] в контекстном меню в начале сепараторов появился какой-то прямоугольник, в расширение меню видно сразу и стрелку, и квадратик, а под курсором пропало выделение строки.
Ну и попутно, стал появляться двойной сепаратор, при первом открытие меню, при повторном клике его уже нет. Откуда он берётся, это у всех так?

Скрин
e9dc6a4ffdc0ba5690f16e58dd85623f.png

Отредактировано voqabuhe (23-04-2021 06:26:09)

Отсутствует

 

№1009923-04-2021 14:16:21

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

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

dezhnev пишет

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

Этот простой специально подсунут, чтобы скрипт оживить? Особенно на livejournal.com
custom_script.js

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

Выделить код

Код:

ChromeUtils.registerWindowActor("UCFSpoilersOpen", {
    child: {
        moduleURI: "chrome://user_chrome_files/content/custom_scripts/UCFSpoilersOpenChild.jsm",
        events: {
            pageshow: {},
            pagehide: {},
        },
    },
    matches: ["*://*.livejournal.com/*", "*://*.rutracker.org/*", "*://forum.oszone.net/*"],
    allFrames: true,
    messageManagerGroups: ["browsers"],
});


UCFSpoilersOpenChild.jsm
скрытый текст

Выделить код

Код:

var EXPORTED_SYMBOLS = ["UCFSpoilersOpenChild"];
ChromeUtils.defineModuleGetter(this, "Services", "resource://gre/modules/Services.jsm");

class UCFSpoilersOpenChild extends JSWindowActorChild {
    actorCreated() {
        this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
    }
    pageshow(e) {
        this.afterchange(e);
        this.document.addEventListener("MozScrolledAreaChanged", this);
        this.listener = true;
    }
    MozScrolledAreaChanged(e) {
        this.afterchange(e);
    }
    afterchange(e) {
        this.timer.cancel();
        this.timer.initWithCallback(() => {
            var doc = this.document;
            doc.removeEventListener("MozScrolledAreaChanged", this);
            this.listener = false;
            var displayHost, selector;
            try {
                let uri = Services.io.newURI(doc.documentURI);
                let baseDomain = Services.eTLD.getBaseDomain(uri);
                displayHost = Cc["@mozilla.org/network/idn-service;1"].getService(Ci.nsIIDNService)
                .convertToDisplayIDN(baseDomain, {});
            } catch (e) {
                return;
            }
            ({
                "livejournal.com": () => {
                    selector = `.b-leaf-collapsed .b-leaf-actions-expand > a.b-pseudo, .b-leaf-seemore-expand > a.b-pseudo, .b-leaf-actions-expandchilds > a.b-pseudo`;
                },
                "rutracker.org": () => {
                    selector = `.sp-head.folded:not(.unfolded)`;
                },
                "oszone.net": () => {
                    selector = `.spoiler-head.folded.clickable:not(.unfolded)`;
                },
            })[displayHost]?.();
            if (!selector) return;
            for (let link of doc.querySelectorAll(selector))
                link.click();
            this.mut = new doc.defaultView.MutationObserver(mutations => {
                for (let { addedNodes } of mutations) {
                    for (let node of addedNodes) {
                        if (node.nodeType == 1) {
                            for (let link of node.querySelectorAll(selector))
                                link.click();
                        }
                    }
                }
            });
            this.mut.observe(doc.body, {
                childList: true,
                subtree: true,
            });
        }, 2000, Ci.nsITimer.TYPE_ONE_SHOT);
    }
    handleEvent(e) {
        this[e.type](e);
    }
    pagehide(e) {
        this.timer.cancel();
        this.mut?.disconnect();
        if (this.listener)
            this.document.removeEventListener("MozScrolledAreaChanged", this);
    }
}


Dobrov пишет

не скрывает отключенные Поисковики.
исправьте для Firefox 87 !

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

voqabuhe пишет

в контекстном меню в начале сепараторов появился какой-то прямоугольник, в расширение меню видно сразу и стрелку, и квадратик

Это не знаю откуда, возможно влияние др. стилей., у себя не наблюдаю проверял и на [windows] 8.1

voqabuhe пишет

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

переменная --arrowpanel-dimmed с color-mix
можно включить в about:config layout.css.color-mix.enabled - true
или использовать стиль в user_chrome_files

voqabuhe пишет

стал появляться двойной сепаратор, при первом открытие меню, при повторном клике его уже нет. Откуда он берётся, это у всех так?

Стиль тут не причем, это из-за https://forum.mozilla-russia.org/viewto … 41#p789641
смотрите какие js коды добавляют пункты в контекстное меню, и отключайте проверяйте...

Отсутствует

 

№1010023-04-2021 14:49:51

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 378
UA: Firefox 88.0

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

Vitaliy V. Здравствуйте а по моему вопросу №10089 что нибудь посоветуете или забыть?

Отсутствует

 

Board footer

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