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

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » Сегодня 01:14:26

Bug 1702013 - Re-introduce "view image info" in the context menu behind a hidden (about:config) pref and enable that pref by default in devedition


Status: RESOLVED FIXED
Milestone: 89 Branch


browser.menu.showViewImageInfo

Сustom Buttons » Custom Buttons » Вчера 22:43:00

Stkvsky пишет

чтобы при таком октрытии (с буфера при нажатии ПКМ на +) вкладки загружались

[spoiler][code](async (sel, self) => ({

    icon: "circle",
    colors: [
        "mediumseagreen",
        "silver",
        "crimson",
        "blue",
        "peru",
    ],

    initColors() {
        var colorName = "ucf-gen";
        var css = "@-moz-document url(about:preferences#containers),"
            + " url-prefix(chrome://browser/content/browser.x) {\n";
        this.colors.forEach((color, ind) => {
            var [ic, tc] = color.split(/\s*\|\s*/);
            css += `\t.identity-color-${colorName}${ind} {\n`
                + `\t\t--identity-tab-color: ${tc || ic};\n`
                + `\t\t--identity-icon-color: ${ic};\n\t}\n`
        });
        var url = "data:text/css;charset=utf-8," + encodeURIComponent(css + "}");
        var sss = Cc["@mozilla.org/content/style-sheet-service;1"]
            .getService(Ci.nsIStyleSheetService);
        sss.loadAndRegisterSheet(Services.io.newURI(url), sss.USER_SHEET);

        var len = this.colors.length;
        var pref = "ucf.openInGeneratedContainer.lastColor";
        var ind = Math.

Сustom Buttons » Custom Buttons » 15-04-2021 23:19:35

Stkvsky
Хмм, странно. Завёл Firefox 78.9.0esr,
развернул ucf 2021-2-14, добавил код в custom_script.js


Поставил Copy Tab Links 0.0.3, открыл и выделил несколько вкладок,
ПКМ по вкладке — в пункте «Copy Tab Links», в субменю, выбрал «Copy URLs».


Теперь ПКМ на кнопке [+] (#tabs-newtab-button) — и вкладки открылись,
с теми адесами, которые были скопированы у выделенных вкладок.
И атрибут "usercontextid" есть, и у вкладок, и у связннных браузеров,
и цветная индикация присутствует, ну, то есть, открылись в контейнере.


Даже не знаю что и предложить. Разве что попробовать
закрыть браузер, и очистить startupCache вручную, вдруг заклинило.
Ну и, может, в консоль посмотреть на предмет подсказок.
Новый проверочный профиль можно собрать, но это, скорее, на интерес.

Сustom Buttons » Custom Buttons » 15-04-2021 20:18:43

Stkvsky пишет

вставлял в инциализацию

При чём здесь инциализация? Это тот же самый что и раньше
контейнерский код для custom_script.js, только чуть модифицированый.
Ну не собирать же отдельный для этого.

Что может быть не так?

Наверно, по скупому набору слов, не смог угадать что требуется.
Выпрашивать подробности настроения нет, полагаю, что если бы
было желание, то и скриншот был бы сразу, и номер версии Firefox,
и рассказ, что из себя представляет «список вкладкок с буфера»
и как он в этом буфере появляется.
А так — попробовал наугад. Нет так нет, забудем.

Сustom Buttons » Custom Buttons » 15-04-2021 17:56:46

Dobrov пишет

Save+Alert

[spoiler][code](async (id, func) => {
    await window.delayedStartupPromise;
    var btn = document.getElementById("downloads-button");
    if (!btn) return;

    var save = () => {
        var {wm} = Services, find = w => !w.closed && w.toolbar.visible;
        var as = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
        var obs = class {
            constructor(path, alertName) {
                this.fp = path;
                this.an = alertName;
            }
            noop() {}
            win = Cu.getWeakReference(window).get;
            observe(s, topic) {switch(topic) {
                case "alertshow":
                    (this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer))
                        .initWithCallback(this, 5e3, Ci.nsITimer.TYPE_ONE_SHOT_LOW_PRIORITY);
                    break;
                case "alertclickcallback":
                    var win = this.win();
                    if (!win || win.closed) win = Array.from(wm.getEnumerator("navigator:browser")).find(find);
                    if (win) {
                        win.gBrowser.selectedTab = win.gBrowser.addTrustedTab(win.PathUtils.toFileURI(this.fp));
   

Сustom Buttons » Custom Buttons » 14-04-2021 19:18:22

Dobrov
Для начала, убери оболчку от другого кода, неуместно вообще.

ведь текст Загрузок может меняться?

Без понятия. Если у тебя меняется, тогда напиши
при каких обстоятельствах это можно увидеть.

btn.tooltipText = btn.tooltipText +

btn.tooltipText = GetDynamicShortcutTooltipText(btn.id) +

код, открывающий папку Загрузки

Downloads.getSystemDownloadsDirectory()
    .then(path => FileUtils.File(path).launch(), Cu.reportError);

Сustom Buttons » Custom Buttons » 14-04-2021 08:24:00

Dobrov пишет

не закрывает найденную вкладку: строка for( var tab of gBrowser.tabs)

e.view.gBrowser


Dobrov пишет

Добавил этот код в custom_script.js

custom_script_win.js

Сustom Buttons » Custom Buttons » 12-04-2021 15:27:06

Dobrov
Ещё раз — метод switchToTab() из метода command()
следует вызывать так: this.switchToTab(аргументы);
ну как this.eyedropper(trg);

Сustom Buttons » Custom Buttons » 12-04-2021 08:32:55

Dobrov пишет

Не могу исправить ошибку - код напрямую в кнопке работает, а обёрнутый в функцию нет!

По тем кускам непонятно, может this.switchToTab('about:config', e);


ВВП пишет

Не могу пункт добавить(копировать url кнопки)

[spoiler][code]((id, g, iconizer) => addDestructor(r => r[5] == "e" && id in g && g[id].destroy()) + addEventListener("showing", {
    //------------------------------------------------------------------
    "Копировать имя_i": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAByUlEQVQ4jY2TTUhUURiGn5tD0Sp00iAwXM1iFu4kWkUZg/9MoZQhdoUCV7ooItq4atFORRGkuLMwoc0kNBGKDLSwFpEIQgspqGUUNsjI3HvPX4s7I3Nn7oW+1fn5vvd8z3vOsYiIgXuPneFMr21ZVmh9+m7GisoPxcTsM2d46on5c1gy9bHgvDVR+afqJzNzy870xIgNUJGGkqf4XVEAuJ4XeWCiNpibX3MGr/XYPd0pADxlOK0MQgf7Xw++sfJq0zRiJQAWcgWndHRkr28UWcrlAfCVwa8KrK4XOPxbYqz/MsnWcyfFi7lCIPD9x0/70YNRykKz+eELQkny74sIJbnQmqQ71UVhe+cES2hoP9uC63mBgO/7dF7s4NexZPRmBqlBaMPHnc+kL7UTh1VxqwKuGxjkaUP+zRZCSVqwKJeP2dvdj8SqGZuod9hXhr6hGwgNL5ZfEoc1PnaL

Сustom Buttons » Custom Buttons » 10-04-2021 21:20:03

Dobrov пишет

command(e)

Ну и нет никакого «window is not defined».


SidebarUI.hide() — не зачищен, return — не на своём месте,
и что, разве на Mac #menu_eyedropper есть,
пока субменю «Веб-разработка» не откроешь?


Кстати, когда-то спрашивали про пипетку,
код сохранился, вот — вписал, на всякий случай.
[spoiler][code]...
        eyedropper(trg) {
            var obj = ChromeUtils.import("resource://devtools/shared/Loader.jsm")
                .require("devtools/client/menus").menuitems
                .find(menuitem => menuitem.id == "menu_eyedropper");
            (this.eyedropper = target => obj.oncommand({target}))(trg);
        },
        command(e) {
            var trg = e.target;
            if (trg.btn) {
                if (e.shiftKey) e.altKey
                    ? this.eyedropper(trg) // Shift+Alt — Пипетка
                    : e.view.PlacesCommandHook.showPlacesOrganizer("History"); // Shift — Библиотека (журнал)

                else if (e.altKey)
                    trg.ownerDocument.getElementById("key_browserConsole").doCommand(); // Alt — Консоль браузера
                else {
                    var bar = trg.ownerDocument.get

Сustom Buttons » Custom Buttons » 09-04-2021 22:12:51

Stkvsky пишет

Можно ли указать чтобы разных цветов были?

Допустим в коде, в массиве colors: [...], перебор по кругу.
[spoiler][code](async (sel, self) => ({

    icon: "circle",
    colors: [
        "mediumseagreen",
        "silver",
        "crimson",
        "blue",
        "peru",
    ],

    initColors() {
        var colorName = "ucf-gen";
        var css = "@-moz-document url(about:preferences#containers),"
            + " url-prefix(chrome://browser/content/browser.x) {\n";
        this.colors.forEach((color, ind) => {
            var [ic, tc] = color.split(/\s*\|\s*/);
            css += `\t.identity-color-${colorName}${ind} {\n`
                + `\t\t--identity-tab-color: ${tc || ic};\n`
                + `\t\t--identity-icon-color: ${ic};\n\t}\n`
        });
        var url = "data:text/css;charset=utf-8," + encodeURIComponent(css + "}");
        var sss = Cc["@mozilla.org/content/style-sheet-service;1"]
            .getService(Ci.nsIStyleSheetService);
        sss.loadAndRegisterSheet(Services.io.newURI(url), sss.USER_SHEET);

        var len = this.colors.length;
        var pref = "ucf.openInGeneratedContainer.las

Сustom Buttons » Custom Buttons » 08-04-2021 22:53:54

Пострел пишет

Здравствуйте. Можно ли адаптировать кнопку
"При повторном открытии боковой панели закладок, все открытые папки автоматически сворачиваются"
для 87 версии Fierfox?

То, что кавычках, не совсем точно.
Этот код просто отключал запоминание состояния развёрнутости.
Поэтому, перед установкой, следует открыть боковую панель закладок,
и свернуть все папки вручную (ну, или, может, оставить, если какие нужно).

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

Выделить код

Код:

(sb => {
	var gv = () => sb.contentDocument
		?.getElementById("bookmarks-view")?.view;
	var func = function(row) {
		var node = this._rows[row];
		node.containerOpen = !node.containerOpen;
	}
	var set = () => {
		var view = gv();
		if (view) view.toggleOpenState = func;
	}
	set();
	addEventListener("pageshow", set, false, sb);
	addDestructor(() => {
		var view = gv();
		if (view) delete view.toggleOpenState;
	});
})(document.getElementById("sidebar"));

Stkvsky пишет

а можно две поправки внести?
Чтобы контейнер не выбирать из списка, а

Сustom Buttons » Custom Buttons » 07-04-2021 21:50:41

Stkvsky пишет

в контекстном меню папки закладок "Открыть всё в контейнере"

Для custom_script.js
[spoiler][code](async (sel, self) => ({
    init(topic) {
        Services.obs.addObserver(self = this, topic);
        Services.obs.addObserver(function quit(s, t) {
            Services.obs.removeObserver(mm, topic);
            Services.obs.removeObserver(quit, t);
        }, "quit-application-granted");
    },
    observe(doc) {
        var list = doc.querySelectorAll(sel);
        list.length && new this.listener(Array.from(list));
    },
    listener: class {
        constructor(list) {
            var popup = this.popup = (this.list = list)[0].parentNode;
            popup.addEventListener("popupshowing", this);
            popup.ownerGlobal.addEventListener("unload",
                () => popup.removeEventListener("popupshowing", this)
            , {once: true});
        }
        get shouldHide() {
            return (this.ind = this.list.findIndex(this.find)) == -1;
        }
        find(node) {
            return !node.hidden && !node.disabled;
        }
        handleEvent() {
            if (this.shouldHide) return;
            var doc = this.popup.owne

Сustom Buttons » Custom Buttons » 06-04-2021 09:07:40

Dobrov пишет

Как вернуть "белый" цвет для строк, подсвеченых курсором?

Наверно можно стилем.
Дописать вызов регистрации стиля в onCreated(), и, далее, сам метод.
Как-то так

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

Выделить код

Код:

...
		onCreated(btn) {
			...

			this.addSheet(btn);
		},
		addSheet(btn) {
			var cb = Array.isArray(btn._destructors);
			var id = cb ? btn.id : "QuickToggleAboutConfigSettings";
			var css = `#${id} menu[_moz-menuactive] {
				color: unset /*white*/ !important;
			}`;
			var args = [
				"data:text/css;charset=utf-8," + encodeURIComponent(css),
				Ci.nsIDOMWindowUtils.USER_SHEET
			];
			if (cb) var destructor = function() {
				this.removeSheetUsingURIString(...args);
			}
			var add = b => b.ownerGlobal.windowUtils.loadSheetUsingURIString(...args);
			(this.addSheet = !cb ? add : btn => {
				add(btn);
				btn._destructors.push({destructor, context: btn.ownerGlobal.windowUtils});
			})(btn);
		},

Dobrov пишет

PlacesCommandHook is not defined

e.view.PlacesComma

Сustom Buttons » Custom Buttons » 04-04-2021 21:39:34

ВВП пишет

А то там тишина...

Тоже особо сказать нечего.
Для многострочности вкладок мне известен только этот проект.
Ещё Tab Mix Plus, но там (пока?) не готово.


Dobrov пишет

А как сделать, чтобы строка меню стала зелёной, если "преф не существует"?

Можно в upd() дописать, если цвет внешним стилем не приколочен
(без if (...) если не только для этой настройки, а для всех)

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

Выделить код

Код:

...
			if (pref.pref == "general.useragent.override") exists
				? node.style.removeProperty("color")
				: node.style.setProperty("color", "green", "important");

Dobrov пишет

Второй вопрос: как выполнить команду меню: "Показать все закладки"
PlacesCommandHook.showPlacesOrganizer('BookmarksToolbar') // это не работает…

Работает. И в 84.0.2, и в 89.0a1
А команда пункта меню "Показать все закладки" запускает
PlacesCommandHook.sh

Сustom Buttons » Custom Buttons » 04-04-2021 13:07:05

Dobrov пишет

параметр не меняется, почему-то тип general.useragent.override всегда логический, а не строковый…

Не вижу такого.


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

Сustom Buttons » Custom Buttons » 04-04-2021 09:38:57

ВВП пишет

А tooltipText нельзя на значок ?

скрытый текст
                if (lab) {
                    if (td) doc.l10n.setAttributes(item, `${
                        active ? "dis" : "en"
                    }able-addon-button`);
                    else item.textContent = "Проверить обновление";
                }
                else if (!td) item.setAttribute("title", "Tooltip Text");

Stkvsky пишет

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

[spoiler][code](async id => {
    var menuitem = document.createXULElement("menuitem");
    document.getElementById(id).after(menuitem);
    typeof addDestructor == "function"
        && addDestructor(() => menuitem.remove());
    menuitem.render = function() {
        this.id = "context_bookmarkContainer";
        this.label = "Добавить контейнер в закладки";
        this.setAttribute("oncommand", "bookmark()");

        var bm = PlacesUtils.bookmarks, attr = "usercontextid";
        var {toolbarGuid: parentGuid, TYPE_FOLDER: type} = bm;
        this.b

Сustom Buttons » Custom Buttons » 03-04-2021 22:19:38

ВВП пишет

В aboutaddons.html пункт я ввел и в popup его видно, но хочу и туда, можно просто значок , label не обязательно.

Ну, код на «значок» как бы не рассчитан.
И что значит «я ввел»? Типа теперь и я ввести должен?
Ладно, попробую что-нибудь сочинить.
[spoiler][code]((id, g, css) => {
    addDestructor(r => r[5] == "e" && g[id]?.destroy(true));
    if (g[id]) return;
    var btnActions = ["update-check", "preferences", "toggle-disabled", "remove", "install-update"];
    var noLabs = ["update-check", ];
    var icons = {
        "update-check": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACVUlEQVQ4jXWT30vTYRTGP3Mb+ZbiXmm6DGUO0pkQGQR2URBdKZWWIHRlFHYhXnQRdVUEBUn/gBddFZERaalUoAUhYUglVIjO5TKbjMDtq2vDQ9t8u0jnr3Xgvfuch/M87zk2rTX/K+u05QROUMBVlrmkn+lvWxlHzsbjVj4uzlHFFec15/7UYCrFU6xcrF0ptbn5jNVADS9o47yvxed24yZRnchLz6dbpUSUlMhHNavSa3zeNskMIZzYOQChPyGmolNIXGz+Tn/lvu59d6jhtdVkZX1vm0AFVFSKpZfPNHKQ3SSBPsxCfMEWi8Rwtbkq5L3UqnH1OCtgNVleqRaf+MUjXrH0Sx2TUuklQAt+

Сustom Buttons » Custom Buttons » 31-03-2021 22:53:42

ВВП пишет

gBrowser.docShell.allowJavascript = !gBrowser.docShell.allowJavascript;

gBrowser.selectedBrowser.messageManager.loadFrameScript(
    "data:,docShell.allowJavascript=!docShell.allowJavascript", false
);

Сustom Buttons » CB for xul browser (FF=<52 PaleMoon и другие) » 31-03-2021 10:22:30

mokujin
Так получше?

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

Выделить код

Код:

function sortTabs3() {
	var num = gBrowser._numPinnedTabs;
	var tabs = gBrowser.visibleTabs.slice(num);
	var re = /^https?$/;

	var sortVal = tab => {
		var res, uri = tab.linkedBrowser.currentURI;
		if (re.test(uri.scheme)) try {
			res = Services.eTLD.getBaseDomain(uri);
		} catch(ex) {
			res = uri.asciiHost;
		}
		return res ? res + uri.path : "\uffff" + uri.spec;
	}
	tabs.sort((a, b) => sortVal(a).localeCompare(sortVal(b)));
	for(var tab of tabs) gBrowser.moveTabTo(tab, num++);
}

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 30-03-2021 18:45:09

Stkvsky пишет

Но, не удобно потому что при перезагрузке браузера введенное в поиск значение стирается
Вы не знаете как сделать чтобы после перезапуска значение не стиралось?

Наверно потому, что текстовое поле находится в Shadow DOM.
Можно попробовать добавить зеркальный input для SessionStore.
Например так, в custom_script.js
[spoiler][code](async meds => {
    var url = "chrome://global/content/config.js";
    var code = Cu.readUTF8URI(Services.io.newURI(url)) + meds;
    var newURL = "data:application/javascript;charset=utf-8," + encodeURIComponent(code);
    var ams = Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup);
    globalThis[Symbol("aboutconfig meds")] = ams.registerChrome(
        Cc["@mozilla.org/network/protocol;1?name=resource"]
            .getService(Ci.nsIResProtocolHandler).getSubstitution("gre"),
        [["override", url, newURL]]
    );
})(`
addEventListener("DOMContentLoaded", () => {
    var input = document.createElement("input");
    input.style.cssText = \`

Сustom Buttons » Custom Buttons » 30-03-2021 12:14:55

momo2000 пишет

Подправте кнопку Reload user{Chrome, Content}
Уже давно не работает Reload userContent по ПКМ

Ну, попробую, так, разве что чисто формально, это весьма сложно тестировать.
[spoiler][code](obj => {
    this.onclick = obj.click.bind(obj);
    this.oncontextmenu = obj.contextmenu.bind(obj);
    this.tooltipText = "L: Reload userChrome.css\nM: CB Menu\nR: Reload userContent.css";
})({
    async click(e) {
        if (e.button == 1) return gShowPopup(self);
        if (e.button || !this.chromeSheet) return;
        await this.reload(this.chromeSheet);
        this.restyle(0);
    },
    re: /^(?:web.*|file|extension|privilegedabout)$/,
    get url() {
        delete this.url;
        return this.url = `chrome://extensions/content/dummy.x${
            parseInt(Services.appinfo.platformVersion) >= 74 ? "htm" : "u"
        }l`;
    },
    async contextmenu(e) {
        if (e.ctrlKey || e.shiftKey || e.detail != 1 || !this.contentSheetURL) return;
        e.preventDefault();

        var count = Services.ppmm.childCount, one = count == 1;
        var data = await this.re

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 30-03-2021 10:45:35

voqabuhe пишет

у вас случаем нет  способа вернуть старый вид about:config?

Вид? В смысле выпиленный древесный? Ну, можно файло куда-нибудь переложить.
Такие проекты есть, но основная проблема в локализации,
поэтому её просто берут одну, и хардкодят прямо внутрь xhtml и js.


Могу попробовать сделать перерисовку из CB,
однако там свои проблемы: движуха L10nRegistry —> Rust.


Вобщем, берём zip-архив, извлекаем папку aboutconfig, и кладём её в папку user_chrome_files.
Доступ к странице по адресу chrome://user_chrome_files/content/aboutconfig/config.xhtml

CSS-стили » Настройка внешнего вида Firefox в userChrome.css » 28-03-2021 19:09:31

Vitaliy V.
Извиняюсь за Windows-контекст STR, но я просто обратить внимание.
В Firefox 88 завезли баг :usch:
Bug 1691860 - Make context menu separator hiding more robust


STR:
1. ПКМ на изображении.
2. ПКМ на простой (без изображения, без ничего) ссылке.
AR:
В контекстном меню торчит два подряд сепаратора
#context-sep-copylink и #context-sep-setbackground


То есть, видимо, "нам" предлагается вызывать this.contextMenu.showHideSeparators();
Так тоже, вроде, на первый взгляд, работает
[spoiler][code](async cmd => {
    var menuitem = document.createXULElement("menuitem");
    document.getElementById("context-sendimage").after(menuitem);
    menuitem.render = function() {
        this.id = "context-viewimageinfo";
        this.setAttribute("oncommand", cmd);
        this.label = "Информация об изображении";
        (this.render = function() {
            var {context, browser} = nsContextMenu.contentData || {};
            this.hidden = !context?.onImage ||
                browse

Сustom Buttons » Custom Buttons » 27-03-2021 14:11:56

DenisRodman пишет

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

Да, весьма наглядно. Но это проблемы старой, неправленной кнопки.
Вот скриншот с видео. Видишь createElement? А должен быть createXULElement.


Раз тулбары колбасит при добавлении кнопки, значит инициализация кнопок не отключена.
Тогда, ещё раз:


1. Копируем длинную custombutton-ссылку из этого поста в буфер обмена.


2. Кликаем правой клавишей мыши по кнопке из видео,
    в открывшемся контекстном меню жмём пункт «Обновить кнопку».


Dobrov пишет

Ну, я хотел при изменении прокси-сервера затенять иконку, а при дефолтном прокси возвращать цвет.
То есть, нужно в пятом элементе массива вызвать код или функцию, которая поменяет цвет иконки:

[spoiler]
Нет, ни разу не «то есть». Вообще никак не связанные вещи.
Прокси может быть переключён как угодно, прямо в about:config,
через лисий UI, любым сторо

Board footer

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