Может у тебя есть какие-нибудь скрипты, которые уже что-то делают на about:addons ?
Я в том смысле, что тогда можно было бы попробовать дописать туда ещё кусок кода.
Только этот:
(async (css, self) => ({ //===[ Buttons ]=================================================================== vertical: true, btnActions: ["preferences", "toggle-disabled", "remove", "install-update"], cn: "ucf-cloned-button", update(e) { var trg = e.target; trg.nodeName == "ADDON-CARD" && trg.addon.type != "theme" && this.onCard(trg); }, onCard(card, again) { var btnsParent = card.querySelector("addon-options"); if (!btnsParent) return again || card.ownerGlobal .requestAnimationFrame(() => this.onCard(card, true)); var doc = card.ownerDocument; var [span] = card.getElementsByClassName(this.ccn); if (span) span.textContent = ""; else card.querySelector("button.more-options-button") .before(span = doc.createElement("span")), span.className = this.ccn; var item, num = 0; for(var sel of this.btnActions) { if (num++ == this.tInd) { if (!card.querySelector(this.ts)) continue; item = this.createPanelItem(doc); item.setAttribute("action", "toggle-disabled"); doc.l10n.setAttributes(item, `${ btnsParent.parentNode.getAttribute("active") == "true" ? "dis" : "en" }able-addon-button`); } else { item = btnsParent.querySelector(sel); if (!item) continue; item = this.clone(item); } span.append(item); item.shadowRoot.querySelector("button").classList.add(this.cn); } }, //===[ Popup ]===================================================================== items: { "Копировать имя": [ addon => self.copy(addon.name), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAByUlEQVQ4jY2TTUhUURiGn5tD0Sp00iAwXM1iFu4kWkUZg/9MoZQhdoUCV7ooItq4atFORRGkuLMwoc0kNBGKDLSwFpEIQgspqGUUNsjI3HvPX4s7I3Nn7oW+1fn5vvd8z3vOsYiIgXuPneFMr21ZVmh9+m7GisoPxcTsM2d46on5c1gy9bHgvDVR+afqJzNzy870xIgNUJGGkqf4XVEAuJ4XeWCiNpibX3MGr/XYPd0pADxlOK0MQgf7Xw++sfJq0zRiJQAWcgWndHRkr28UWcrlAfCVwa8KrK4XOPxbYqz/MsnWcyfFi7lCIPD9x0/70YNRykKz+eELQkny74sIJbnQmqQ71UVhe+cES2hoP9uC63mBgO/7dF7s4NexZPRmBqlBaMPHnc+kL7UTh1VxqwKuGxjkaUP+zRZCSVqwKJeP2dvdj8SqGZuod9hXhr6hGwgNL5ZfEoc1PnaL2sFNAlvvthFKxmJJbfCUqXbghhHSyTOkJwcBmHr4vAnLVwKhJEPZbLgDXwh678yG7rfjfLIJS2qD0IEP9R6kiq8XrzS+sOz9p5+asKodXB0YCQkcNBbHYUXlxP6u67dnIj9PY8QJpIC2/6iX/wDxeTOAfNDrywAAAABJRU5ErkJggg==", ], "Копировать ID": [ addon => self.copy(addon.id), "Копировать имя" ], "Копировать версию": [ addon => self.copy(addon.version), "Копировать имя", addon => !addon.version ], "Копировать имя и версию": [ addon => self.copy(addon.name + " " + addon.version), "Копировать имя", addon => !addon.version ], "Копировать URL кнопки": [ (addon, win) => { var btn = Object.assign({ parameters: {}, get initcode() {return this.initCode;}, setText(doc, name, t, cds) { win.custombutton.buttonSetText(doc, name, this[name], cds); } }, win.custombuttons.cbService.getButtonParameters(addon.buttonLink)); self.copy(win.custombutton.buttonGetURI(btn)); }, "Копировать имя", addon => addon.type != "custombuttons" ], "Домашняя страница": [ (addon, win) => win.openURL(addon.homepageURL || addon.reviewURL.replace(/\/reviews\/.*$/, "/")), "data:image/png;base64,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", addon => !addon.homepageURL && !addon.reviewURL ], "Поиск на АМО": [ (addon, win) => win.openURL( addon.homepageURL || ("https://addons.mozilla.org/search/?q=" + encodeURIComponent(addon.name)) ), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJGSURBVDjLjdJLSNRBHMDx78yqLZaKS75DPdgDDaFDbdJmde5QlhCJGxgpRJfqEEKnIsJLB7skQYQKZaSmdLaopPCgEvSCShCMzR5a7oq7/3l12RVtjfzBMA/4fWZ+MyOccwBM3g8HEbIdfCEhfAFnLVapOa28Uevpjrqz/WOsERJgsu9Uq5CZQzgqrJfo9BajNd5irEYn4p3OUiFExtCLmw2tawFi4l5zUMjMIau9u7K+qxeoAcoAA0wDb2OPwmfA16LiiaOHLj1edRLpkO3WmIis7+oBDgJbgQ2AH6gC6jY19N62RkcctKeVIJAhp9QgUA3kJXdONZVcq9JxPSgQoXRAyIDRth8oAXQyKdWnoCKrTD9CBv4GMqx1WGNZkeRWJKbG2hiD1Cb9FbTnzWFdY/LCdLKlgNQ84gyNKqHm0gDjqVHnxDHgA/B9RQkpaB6YklkZl62np9KBhOqwjpKFgeY2YAz4BESBWHI8Hhs6PVVSvc3v98ye4fP7T676B845nt040ip98qpWJmI9PWiU6bfWgXGN2YHcKwU7tsuc4kpUPMbU0+f8+vKt+Pitl7PLAMDI9cNBoB0hQwICzjqUp6MZvsy8yvp95BRuQUjJ75mPvH4wYo1NlJ64Mza7DPwrhi8cCOeXl/aUB4P4c/NJxKLMvpngycCrzxVFG2v/CwAMnguF80oLe8p27cQh+fnpPV/fTc95S6piXQDAw7a9YbWkezZXFbAwMx/xPFXb1D3+Y90AQF/L7kAsri9mZ4lrTd0TcYA/Kakr+x2JSPUAAAAASUVORK5CYII=", ["custombuttons", "theme", "plugin"] ], "Папка установки": [ addon => self.getFile(addon).reveal(), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABAklEQVR42mNkoBAwAjEXEAcCMTsW+U9AvB6I/+I0gJ2Noe3QJoZKASEgjwkq+h+C795lYPCKZMgC8mZg0fsfbICIIMOcF6cZkrGZ/v8fA0PndIa/7z8BXfAPqgVKv//A8GPeZoYERmE+hjmP1+AwAOgiTjOIP7HZLyjLMJNRmB/ogjMMyYzsUC8wIhQwsgCFWHAHoKAy0AARIYY5r69idwEhIKgBMgAYBq8vkGmALsyAU2QaYAwz4CiZBliADBAAGnCATANsYQbsJtMAJ5ABwGh8uZE8A4R9gAYwMzHkT8hl6Bfgxp5ecIH3Xxj+F05hyIdpUmXAnpnwge9AfJckW7EBAC/gSzisxsnmAAAAAElFTkSuQmCC", ["custombuttons", "theme", "plugin"] ], "Файл установки": [ addon => self.getFile(addon).launch(), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA51AAAOdQG5Y1EyAAAAhklEQVQ4y6WT0QnAIAxE78Bt2v1cod3PznP9kVLTRKUGBD+Sd5eQUBJWggCWCAkAJPGXOqlUPyVKkrSPQIoCQJGE6AF4HFyGuBmrR3cGQX8Wmp2cL8Cqv5JPD5Zm1D0nFZjTjHpQ7DuI1L3iBjBS9/pvhtjr21OukVkXiX/ug6SWj4mr53wDMz1vldHlLJkAAAAASUVORK5CYII=", ["custombuttons", "theme", "plugin"] ], "Проверить обновления": [ Cr.NS_ERROR_NET_TIMEOUT_EXTERNAL // Fx 87+ ? (addon, win) => win.content.checkForUpdate(addon) : (addon, win) => win.content.frames[0].checkForUpdate(addon), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACVUlEQVQ4jXWT30vTYRTGP3Mb+ZbiXmm6DGUO0pkQGQR2URBdKZWWIHRlFHYhXnQRdVUEBUn/gBddFZERaalUoAUhYUglVIjO5TKbjMDtq2vDQ9t8u0jnr3Xgvfuch/M87zk2rTX/K+u05QROUMBVlrmkn+lvWxlHzsbjVj4uzlHFFec15/7UYCrFU6xcrF0ptbn5jNVADS9o47yvxed24yZRnchLz6dbpUSUlMhHNavSa3zeNskMIZzYOQChPyGmolNIXGz+Tn/lvu59d6jhtdVkZX1vm0AFVFSKpZfPNHKQ3SSBPsxCfMEWi8Rwtbkq5L3UqnH1OCtgNVleqRaf+MUjXrH0Sx2TUuklQAt+XPRykyAzFHNIfgkUUyV58k4FVOifhVLe0sUnGhknnyoAPaAjzHGUbkYxjOlHup0R7iPATqCI9vUMHHhwAR7SGCJrdnS/DjPOMd2nhwD4zS2CZEgCBRxZF8gQJgrkYwcqNmaiJ3QGMADMMMsyMeyAE/e6QII3TEP54XIbhXSufqfXarEebEwcH7swFBIDUqSyIYpPFrFzIV4ZhwLqBDGskOE6XUxwUsqkRwWVyF6xscw0P3lOgodqSgXRWqO1tnGZVwxiiGAYw3CbpWbTbDpMh+EGH2jDvcpuetk9EK8ME6UBQwkOoJUdc445RodHqb9YXxaeDJ8StwyogIrnXGUVUEkplx7mKWKJWn7gTH1PwQqEv4bBQRHzLKlJNbJRwJbrGq2zlps9fKEOD5MIEZ6Q5K7u1xNb2ZzXiEFYxDBEF8I9PaBDOTngLwkg8PzzO00cAAAAAElFTkSuQmCC", addon => !addon.applyBackgroundUpdates || addon.isBuiltin ], }, listContainerId: "ucf-aa-extra-items-container", showing(e) { var card = e.target.closest("addon-card"); if (!card) return; this.labs = []; var imgs = new Map(); var set = (key, val) => imgs.set(key, imgs.has(key) ? imgs.get(key).concat(val) : [val]); var entries = Object.entries(this.items); entries.forEach(([lab, [func, img, hideOn]], ind) => { this.labs.push(lab); (this[lab] = func).hideOn = hideOn; img && set(this.items[img]?.[1] ? entries.findIndex(a => a[0] == img): ind, ind); }); if (imgs.size) { var cspRe = /^(?:chrome|file|jar|resource|moz-extension|https?):/; var [s, p, o] = this.vers >= 110 ? ["::part(button)", "background-image", "AUTHO"] : ["", "--icon", "USE"]; var reg = [], push = (ind, icon) => { var chromeImg = "chrome://user_chrome_files/content/aaepiimg_" + ind; reg.push(["override", chromeImg, icon]); return chromeImg; } var rules = []; for(var [ind, nums] of imgs) { var sel = [], img = entries[ind][1][1]; for(var num of nums) sel.push( `\t#${this.listContainerId} > panel-item:nth-child(${num + 1})${s}` ); rules.push(`${sel.join(",\t\n")} {\n\t\t${p}: url(${ cspRe.test(img) ? img : push(ind, img) }) !important;\n\t}`); } if (reg.length) { var ams = Cc["@mozilla.org/addons/addon-manager-startup;1"] .getService(Ci.amIAddonManagerStartup); var mUri = Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)); this.chromeReg = ams.registerChrome(mUri, reg); } this.regSheet(`\n${rules.join("\n")}\n}`, o + "R_SHEET"); } delete this.items; self = this; this.sym = Symbol.for(this.listContainerId); (this.showing = e => { var card = e.target.closest("addon-card"); card && this.onListShowind(card.addon, e.target); })(e); this.onListShowind(card.addon, e.target); }, async onListShowind(addon, list) { var doc = list.ownerDocument, win = doc.ownerGlobal; var container = doc[this.sym]; if (!container) { container = doc[this.sym] = doc.createElement("div"); container.onclick = this.cclick; container.id = this.listContainerId; for(var lab of this.labs) container.appendChild(this.createPanelItem(doc)).append(lab); var mo = new win.MutationObserver(this.mut); (container.mo = mo).container = container; } for(var item of container.children) { var h = this[item.textContent].hideOn; item.hidden = h && (h.call ? h(addon) : h.includes(addon.type)); } var {mo} = container; mo.disconnect(); list.contains(container) || list.prepend(container); mo.count = 0; mo.ts = Date.now(); mo.observe(list, {childList: true}); }, mut(muts, mo) { if (++mo.count > 10 || Date.now() - mo.ts > 100) return mo.disconnect(); var list = muts[0].target, {container} = mo; if (list.firstElementChild != container) mo.disconnect(), list.prepend(container), mo.observe(list, {childList: true}); }, cclick(e) { e.stopImmediatePropagation(); this.parentNode.hide(); self[e.target.textContent]( e.target.closest("addon-card").addon, e.view.windowRoot.ownerGlobal ); }, copy: str => (self.copy = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString )(str), getFile(addon) { var file, uri = addon.getResourceURI(); if (uri instanceof Ci.nsIJARURI) uri = uri.JARFile; if (uri instanceof Ci.nsIFileURL) file = uri.file; return file; }, //================================================================================ init(topic, quit) { Services.obs.addObserver(this, topic); Services.obs.addObserver(quit = (s, t) => { Services.obs.removeObserver(quit, t); Services.obs.removeObserver(this, topic); }, "quit-application-granted"); }, isTargetDoc: doc => doc.ownerGlobal.docShell .currentDocumentChannel.name.endsWith("/aboutaddons.html"), observe(doc) { if (!this.isTargetDoc(doc)) return; var vers = this.vers = parseInt(Services.appinfo.platformVersion); this.ts = `${vers >= 111 ? "moz-toggle" : "input"}[action="toggle-disabled"]`; css = css.replace("%TS%", this.ts) .replace(/%CN%/g, this.cn) .replace(/;$/gm, " !important;") .replace("%FD%", this.vertical ? "column" : "row"); this.regSheet(css, "USER_SHEET"); var unload = e => { e.target.removeEventListener("update", this, true); e.target.removeEventListener("showing", this, true); } var load = doc => { doc.addEventListener("update", this, true); doc.addEventListener("showing", this, true); doc.ownerGlobal.addEventListener("unload", unload, {once: true}); } this.handleEvent = e => this[e.type](e); this.observe = doc => this.isTargetDoc(doc) && load(doc); this.ccn = this.cn + "s-container"; this.tInd = this.btnActions.findIndex(s => s == "toggle-disabled"); this.btnActions = this.btnActions.map( action => `panel-list > panel-item[action="${action}"]` ); this.createPanelItem = vers == 110 ? doc => new (doc.ownerGlobal.customElements.get("panel-item")) : doc => doc.createElement("panel-item"); if (vers >= 89) this.clone = item => item.cloneNode(true); else { var cf = function(e) { var win = e.view; win.InspectorUtils.removeContentState(this, 4, true); Services.focus.clearFocus(win); } this.clone = item => { var clone = item.cloneNode(true); clone.onclick = cf; return clone; } } load(doc); }, regSheet(...args) { var prfx = "data:text/css;charset=utf8,@-moz-document url(about:addons),%0A" + "url(chrome://mozapps/content/extensions/aboutaddons.html) {"; var sss = Cc["@mozilla.org/content/style-sheet-service;1"] .getService(Ci.nsIStyleSheetService); (this.regSheet = (code, origin) => sss.loadAndRegisterSheet( Services.io.newURI(prfx + encodeURIComponent(code)), sss[origin] ))(...args); } }).init("chrome-document-loaded"))(`\ span.%CN%s-container { display: flex; flex-direction: %FD%; row-gap: 1px; } addon-card[expanded] span.%CN%s-container { flex-direction: row; } button.%CN% { -moz-appearance: none; margin: 0 1px; padding: 1px 6px 3px 6px; background-image: none; background-color: rgba(174, 236, 235, 0.9); border-radius: 0; border: 1px solid #bbb; font-size: 13px; white-space: nowrap; font-family: Segoe UI; } button.%CN%:hover { background-color: gold; } button.%CN%:after, %TS% { display: none; } }`);
В основном стилями обходился.
Ой, сейчас немного неохота, и некогда.
Не вопрос, конечно. Только, если можно, в мусорку просьбу мою не выкидывать... когда желание и время появятся - посмотреть, что можно сделать.
Отсутствует
Только этот
OK. Возвращаю модифицированный.
Вписал результат неких экспериментов на предмет просьбы,
которые, в 113, чисто с веб-консоли проводились.
(async (css, self) => ({ //===[ Buttons ]=================================================================== vertical: true, btnActions: ["preferences", "toggle-disabled", "remove", "install-update"], cn: "ucf-cloned-button", update(e) { var trg = e.target; trg.nodeName == "ADDON-CARD" && trg.addon.type != "theme" && this.onCard(trg); }, onCard(card, again) { var btnsParent = card.querySelector("addon-options"); if (!btnsParent) return again || card.ownerGlobal .requestAnimationFrame(() => this.onCard(card, true)); var doc = card.ownerDocument; var [span] = card.getElementsByClassName(this.ccn); if (span) span.textContent = ""; else card.querySelector("button.more-options-button") .before(span = doc.createElement("span")), span.className = this.ccn; var item, num = 0; for(var sel of this.btnActions) { if (num++ == this.tInd) { if (!card.querySelector(this.ts)) continue; item = this.createPanelItem(doc); item.setAttribute("action", "toggle-disabled"); doc.l10n.setAttributes(item, `${ btnsParent.parentNode.getAttribute("active") == "true" ? "dis" : "en" }able-addon-button`); } else { item = btnsParent.querySelector(sel); if (!item) continue; item = this.clone(item); } span.append(item); item.shadowRoot.querySelector("button").classList.add(this.cn); } }, //===[ Popup ]===================================================================== items: { "Копировать имя": [ addon => self.copy(addon.name), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAByUlEQVQ4jY2TTUhUURiGn5tD0Sp00iAwXM1iFu4kWkUZg/9MoZQhdoUCV7ooItq4atFORRGkuLMwoc0kNBGKDLSwFpEIQgspqGUUNsjI3HvPX4s7I3Nn7oW+1fn5vvd8z3vOsYiIgXuPneFMr21ZVmh9+m7GisoPxcTsM2d46on5c1gy9bHgvDVR+afqJzNzy870xIgNUJGGkqf4XVEAuJ4XeWCiNpibX3MGr/XYPd0pADxlOK0MQgf7Xw++sfJq0zRiJQAWcgWndHRkr28UWcrlAfCVwa8KrK4XOPxbYqz/MsnWcyfFi7lCIPD9x0/70YNRykKz+eELQkny74sIJbnQmqQ71UVhe+cES2hoP9uC63mBgO/7dF7s4NexZPRmBqlBaMPHnc+kL7UTh1VxqwKuGxjkaUP+zRZCSVqwKJeP2dvdj8SqGZuod9hXhr6hGwgNL5ZfEoc1PnaL2sFNAlvvthFKxmJJbfCUqXbghhHSyTOkJwcBmHr4vAnLVwKhJEPZbLgDXwh678yG7rfjfLIJS2qD0IEP9R6kiq8XrzS+sOz9p5+asKodXB0YCQkcNBbHYUXlxP6u67dnIj9PY8QJpIC2/6iX/wDxeTOAfNDrywAAAABJRU5ErkJggg==", ], "Копировать ID": [ addon => self.copy(addon.id), "Копировать имя" ], "Копировать версию": [ addon => self.copy(addon.version), "Копировать имя", addon => !addon.version ], "Копировать имя и версию": [ addon => self.copy(addon.name + " " + addon.version), "Копировать имя", addon => !addon.version ], "Копировать URL кнопки": [ (addon, win) => { var btn = Object.assign({ parameters: {}, get initcode() {return this.initCode;}, setText(doc, name, t, cds) { win.custombutton.buttonSetText(doc, name, this[name], cds); } }, win.custombuttons.cbService.getButtonParameters(addon.buttonLink)); self.copy(win.custombutton.buttonGetURI(btn)); }, "Копировать имя", addon => addon.type != "custombuttons" ], "Домашняя страница": [ (addon, win) => win.openURL(addon.homepageURL || addon.reviewURL.replace(/\/reviews\/.*$/, "/")), "data:image/png;base64,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", addon => !addon.homepageURL && !addon.reviewURL ], "Поиск на АМО": [ (addon, win) => win.openURL( addon.homepageURL || ("https://addons.mozilla.org/search/?q=" + encodeURIComponent(addon.name)) ), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJGSURBVDjLjdJLSNRBHMDx78yqLZaKS75DPdgDDaFDbdJmde5QlhCJGxgpRJfqEEKnIsJLB7skQYQKZaSmdLaopPCgEvSCShCMzR5a7oq7/3l12RVtjfzBMA/4fWZ+MyOccwBM3g8HEbIdfCEhfAFnLVapOa28Uevpjrqz/WOsERJgsu9Uq5CZQzgqrJfo9BajNd5irEYn4p3OUiFExtCLmw2tawFi4l5zUMjMIau9u7K+qxeoAcoAA0wDb2OPwmfA16LiiaOHLj1edRLpkO3WmIis7+oBDgJbgQ2AH6gC6jY19N62RkcctKeVIJAhp9QgUA3kJXdONZVcq9JxPSgQoXRAyIDRth8oAXQyKdWnoCKrTD9CBv4GMqx1WGNZkeRWJKbG2hiD1Cb9FbTnzWFdY/LCdLKlgNQ84gyNKqHm0gDjqVHnxDHgA/B9RQkpaB6YklkZl62np9KBhOqwjpKFgeY2YAz4BESBWHI8Hhs6PVVSvc3v98ye4fP7T676B845nt040ip98qpWJmI9PWiU6bfWgXGN2YHcKwU7tsuc4kpUPMbU0+f8+vKt+Pitl7PLAMDI9cNBoB0hQwICzjqUp6MZvsy8yvp95BRuQUjJ75mPvH4wYo1NlJ64Mza7DPwrhi8cCOeXl/aUB4P4c/NJxKLMvpngycCrzxVFG2v/CwAMnguF80oLe8p27cQh+fnpPV/fTc95S6piXQDAw7a9YbWkezZXFbAwMx/xPFXb1D3+Y90AQF/L7kAsri9mZ4lrTd0TcYA/Kakr+x2JSPUAAAAASUVORK5CYII=", ["custombuttons", "theme", "plugin"] ], "Папка установки": [ addon => self.getFile(addon).reveal(), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABAklEQVR42mNkoBAwAjEXEAcCMTsW+U9AvB6I/+I0gJ2Noe3QJoZKASEgjwkq+h+C795lYPCKZMgC8mZg0fsfbICIIMOcF6cZkrGZ/v8fA0PndIa/7z8BXfAPqgVKv//A8GPeZoYERmE+hjmP1+AwAOgiTjOIP7HZLyjLMJNRmB/ogjMMyYzsUC8wIhQwsgCFWHAHoKAy0AARIYY5r69idwEhIKgBMgAYBq8vkGmALsyAU2QaYAwz4CiZBliADBAAGnCATANsYQbsJtMAJ5ABwGh8uZE8A4R9gAYwMzHkT8hl6Bfgxp5ecIH3Xxj+F05hyIdpUmXAnpnwge9AfJckW7EBAC/gSzisxsnmAAAAAElFTkSuQmCC", ["custombuttons", "theme", "plugin"] ], "Файл установки": [ addon => self.getFile(addon).launch(), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA51AAAOdQG5Y1EyAAAAhklEQVQ4y6WT0QnAIAxE78Bt2v1cod3PznP9kVLTRKUGBD+Sd5eQUBJWggCWCAkAJPGXOqlUPyVKkrSPQIoCQJGE6AF4HFyGuBmrR3cGQX8Wmp2cL8Cqv5JPD5Zm1D0nFZjTjHpQ7DuI1L3iBjBS9/pvhtjr21OukVkXiX/ug6SWj4mr53wDMz1vldHlLJkAAAAASUVORK5CYII=", ["custombuttons", "theme", "plugin"] ], "Проверить обновления": [ Cr.NS_ERROR_NET_TIMEOUT_EXTERNAL // Fx 87+ ? (addon, win) => win.content.checkForUpdate(addon) : (addon, win) => win.content.frames[0].checkForUpdate(addon), "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACVUlEQVQ4jXWT30vTYRTGP3Mb+ZbiXmm6DGUO0pkQGQR2URBdKZWWIHRlFHYhXnQRdVUEBUn/gBddFZERaalUoAUhYUglVIjO5TKbjMDtq2vDQ9t8u0jnr3Xgvfuch/M87zk2rTX/K+u05QROUMBVlrmkn+lvWxlHzsbjVj4uzlHFFec15/7UYCrFU6xcrF0ptbn5jNVADS9o47yvxed24yZRnchLz6dbpUSUlMhHNavSa3zeNskMIZzYOQChPyGmolNIXGz+Tn/lvu59d6jhtdVkZX1vm0AFVFSKpZfPNHKQ3SSBPsxCfMEWi8Rwtbkq5L3UqnH1OCtgNVleqRaf+MUjXrH0Sx2TUuklQAt+XPRykyAzFHNIfgkUUyV58k4FVOifhVLe0sUnGhknnyoAPaAjzHGUbkYxjOlHup0R7iPATqCI9vUMHHhwAR7SGCJrdnS/DjPOMd2nhwD4zS2CZEgCBRxZF8gQJgrkYwcqNmaiJ3QGMADMMMsyMeyAE/e6QII3TEP54XIbhXSufqfXarEebEwcH7swFBIDUqSyIYpPFrFzIV4ZhwLqBDGskOE6XUxwUsqkRwWVyF6xscw0P3lOgodqSgXRWqO1tnGZVwxiiGAYw3CbpWbTbDpMh+EGH2jDvcpuetk9EK8ME6UBQwkOoJUdc445RodHqb9YXxaeDJ8StwyogIrnXGUVUEkplx7mKWKJWn7gTH1PwQqEv4bBQRHzLKlJNbJRwJbrGq2zlps9fKEOD5MIEZ6Q5K7u1xNb2ZzXiEFYxDBEF8I9PaBDOTngLwkg8PzzO00cAAAAAElFTkSuQmCC", addon => !addon.applyBackgroundUpdates || addon.isBuiltin ], }, listContainerId: "ucf-aa-extra-items-container", showing(e) { var card = e.target.closest("addon-card"); if (!card) return; this.labs = []; var imgs = new Map(); var set = (key, val) => imgs.set(key, imgs.has(key) ? imgs.get(key).concat(val) : [val]); var entries = Object.entries(this.items); entries.forEach(([lab, [func, img, hideOn]], ind) => { this.labs.push(lab); (this[lab] = func).hideOn = hideOn; img && set(this.items[img]?.[1] ? entries.findIndex(a => a[0] == img): ind, ind); }); if (imgs.size) { var cspRe = /^(?:chrome|file|jar|resource|moz-extension|https?):/; var [s, p, o] = this.vers >= 110 ? ["::part(button)", "background-image", "AUTHO"] : ["", "--icon", "USE"]; var reg = [], push = (ind, icon) => { var chromeImg = "chrome://user_chrome_files/content/aaepiimg_" + ind; reg.push(["override", chromeImg, icon]); return chromeImg; } var rules = []; for(var [ind, nums] of imgs) { var sel = [], img = entries[ind][1][1]; for(var num of nums) sel.push( `\t#${this.listContainerId} > panel-item:nth-child(${num + 1})${s}` ); rules.push(`${sel.join(",\t\n")} {\n\t\t${p}: url(${ cspRe.test(img) ? img : push(ind, img) }) !important;\n\t}`); } if (reg.length) { var ams = Cc["@mozilla.org/addons/addon-manager-startup;1"] .getService(Ci.amIAddonManagerStartup); var mUri = Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)); this.chromeReg = ams.registerChrome(mUri, reg); } this.regSheet(`\n${rules.join("\n")}\n}`, o + "R_SHEET"); } delete this.items; self = this; this.sym = Symbol.for(this.listContainerId); (this.showing = e => { var card = e.target.closest("addon-card"); card && this.onListShowind(card.addon, e.target); })(e); this.onListShowind(card.addon, e.target); }, async onListShowind(addon, list) { var doc = list.ownerDocument, win = doc.ownerGlobal; var container = doc[this.sym]; if (!container) { container = doc[this.sym] = doc.createElement("div"); container.onclick = this.cclick; container.id = this.listContainerId; for(var lab of this.labs) container.appendChild(this.createPanelItem(doc)).append(lab); var mo = new win.MutationObserver(this.mut); (container.mo = mo).container = container; } for(var item of container.children) { var h = this[item.textContent].hideOn; item.hidden = h && (h.call ? h(addon) : h.includes(addon.type)); } var {mo} = container; mo.disconnect(); list.contains(container) || list.prepend(container); mo.count = 0; mo.ts = Date.now(); mo.observe(list, {childList: true}); }, mut(muts, mo) { if (++mo.count > 10 || Date.now() - mo.ts > 100) return mo.disconnect(); var list = muts[0].target, {container} = mo; if (list.firstElementChild != container) mo.disconnect(), list.prepend(container), mo.observe(list, {childList: true}); }, cclick(e) { e.stopImmediatePropagation(); this.parentNode.hide(); self[e.target.textContent]( e.target.closest("addon-card").addon, e.view.windowRoot.ownerGlobal ); }, copy: str => (self.copy = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString )(str), getFile(addon) { var file, uri = addon.getResourceURI(); if (uri instanceof Ci.nsIJARURI) uri = uri.JARFile; if (uri instanceof Ci.nsIFileURL) file = uri.file; return file; }, //================================================================================ init(topic, quit) { Services.obs.addObserver(this, topic); Services.obs.addObserver(quit = (s, t) => { Services.obs.removeObserver(quit, t); Services.obs.removeObserver(this, topic); }, "quit-application-granted"); }, isTargetDoc: doc => doc.ownerGlobal.docShell .currentDocumentChannel.name.endsWith("/aboutaddons.html"), observe(doc) { if (!this.isTargetDoc(doc)) return; var vers = this.vers = parseInt(Services.appinfo.platformVersion); this.ts = `${vers >= 111 ? "moz-toggle" : "input"}[action="toggle-disabled"]`; css = css.replace("%TS%", this.ts) .replace(/%CN%/g, this.cn) .replace(/;$/gm, " !important;") .replace("%FD%", this.vertical ? "column" : "row"); this.regSheet(css, "USER_SHEET"); var unload = e => { e.target.removeEventListener("update", this, true); e.target.removeEventListener("showing", this, true); } var load = doc => { doc.addEventListener("update", this, true); doc.addEventListener("showing", this, true); var win = doc.ownerGlobal; win.addEventListener("unload", unload, {once: true}); this.inactiveAddonsVersion(win); } this.handleEvent = e => this[e.type](e); this.observe = doc => this.isTargetDoc(doc) && load(doc); this.ccn = this.cn + "s-container"; this.tInd = this.btnActions.findIndex(s => s == "toggle-disabled"); this.btnActions = this.btnActions.map( action => `panel-list > panel-item[action="${action}"]` ); this.createPanelItem = vers == 110 ? doc => new (doc.ownerGlobal.customElements.get("panel-item")) : doc => doc.createElement("panel-item"); if (vers >= 89) this.clone = item => item.cloneNode(true); else { var cf = function(e) { var win = e.view; win.InspectorUtils.removeContentState(this, 4, true); Services.focus.clearFocus(win); } this.clone = item => { var clone = item.cloneNode(true); clone.onclick = cf; return clone; } } load(doc); }, inactiveAddonsVersion(win) { var desc = win.Object.getOwnPropertyDescriptor(win.HTMLElement.prototype, "title"); var {set} = desc, cfg = {attributes: true, attributeFilter: ["title"]}; var handleMuts = function(m, {trg, val}) { this.disconnect(); var txt = trg.firstChild; if (txt) txt.data = txt.data.replace(trg.closest("addon-card").addon.name, val); } desc.set = function(val) { set.call(this, val); if (this.getAttribute("data-l10n-id") != "addon-name-disabled") return; var mo = new win.MutationObserver(handleMuts); mo.val = val; mo.observe(mo.trg = this, cfg); } for(var Elm of [win.HTMLAnchorElement, win.HTMLHeadingElement]) win.Object.defineProperty(Elm.prototype, "title", desc); }, regSheet(...args) { var prfx = "data:text/css;charset=utf8,@-moz-document url(about:addons),%0A" + "url(chrome://mozapps/content/extensions/aboutaddons.html) {"; var sss = Cc["@mozilla.org/content/style-sheet-service;1"] .getService(Ci.nsIStyleSheetService); (this.regSheet = (code, origin) => sss.loadAndRegisterSheet( Services.io.newURI(prfx + encodeURIComponent(code)), sss[origin] ))(...args); } }).init("chrome-document-loaded"))(`\ span.%CN%s-container { display: flex; flex-direction: %FD%; row-gap: 1px; } addon-card[expanded] span.%CN%s-container { flex-direction: row; } button.%CN% { -moz-appearance: none; margin: 0 1px; padding: 1px 6px 3px 6px; background-image: none; background-color: rgba(174, 236, 235, 0.9); border-radius: 0; border: 1px solid #bbb; font-size: 13px; white-space: nowrap; font-family: Segoe UI; } button.%CN%:hover { background-color: gold; } button.%CN%:after, %TS% { display: none; } }`);
Отсутствует
Попытался скрестить этот стиль со скриптом и максимум что у меня получилось:
Не знаю как flex-ы разделить, что бы меню скрипта оставалось как меню, а не встраивалось в таблицу, если это вообще возможно.
Отредактировано _zt (07-05-2023 22:04:54)
Отсутствует
Иногда надо в расширении что то подправить и приходится в отладку идти, и там искать, выделять, копировать
Далее, ожидалось «, затем …», но найдено «.»
Вы копирование uuid можете добавить?
Не исключено
//... "копирование uuid": [ addon => self.copy(addon.isActive ? Cu.getGlobalForObject(Cu).WebExtensionPolicy.getByID(addon.id).mozExtensionHostname : JSON.parse(Services.prefs.getCharPref("extensions.webextensions.uuids", "{}"))[addon.id] ), "Копировать имя", addon => addon.type != "extension" || !(addon.isWebExtension ?? true) ],
Попытался скрестить этот стиль со скриптом и максимум что у меня получилось:
Ожидался код стиля попытки получившегося максимума, но найдено ничего.
Отсутствует
Далее, ожидалось «, затем …», но найдено «.»
Затем userContent.css
Ожидался код стиля попытки получившегося максимума, но найдено ничего.
Так это просто заготовка. Я ни в чем не уверен и тестировал только на full_theme от VitalyV.
Отредактировано _zt (08-05-2023 18:05:34)
Отсутствует
Не исключено
Спасибо, работает.
И по поводу скрипта, у меня не везде срабатывал поиск на AMO, вместо этого пытался открыть домашнюю страницу, поэтому изменил пункт. Не знаю, верно или нет.
Отсутствует
userContent.css
Ааа, вот оно что.
Я-то прочитал «в расширении что то подправить»,
как «влезьть внутрь .xpi и там похозяйничать».
скрипт
Ух, неслабо ты его покрамсал.
Я так понимаю, предпочтение отдано
стилем-выведенным кнопкам, а не скриптом-добавленным кнопкам.
Тогда я тоже не знаю что здесь можно сделать.
Если бы наоборот, то хоть что-то можно было бы попробовать.
Я вот в стиле закомментировал этот кусок
addon-card panel-list { position: static !important; display: block !important; background: none !important; border: none !important; border-radius: 0 !important; padding: 0 !important; margin: 0 !important; box-shadow: none !important; min-width: 0 !important; }
/* vertical: true, btnActions: ["toggle-disabled"], */ vertical: false, btnActions: ["remove", "install-update", "preferences"],
/* onCard(card, again) { var btnsParent = card.querySelector("addon-options"); if (!btnsParent) return again || card.ownerGlobal .requestAnimationFrame(() => this.onCard(card, true)); var doc = card.ownerDocument; var [span] = card.getElementsByClassName(this.ccn); if (span) span.textContent = ""; else card.querySelector("button.more-options-button") .before(span = doc.createElement("span")), span.className = this.ccn; }, */ onCard(card, again) { var btnsParent = card.querySelector("addon-options"); if (!btnsParent) return again || card.ownerGlobal .requestAnimationFrame(() => this.onCard(card, true)); var doc = card.ownerDocument; var [span] = card.getElementsByClassName(this.ccn); var moreOptionsButton = card.querySelector("button.more-options-button"); if (span) span.textContent = ""; else moreOptionsButton.before(span = doc.createElement("span")), span.className = this.ccn; for(var sel of this.btnActions) { var item = btnsParent.querySelector(sel); if (item) span.append(item = this.clone(item)), item.shadowRoot.querySelector("button").classList.add(this.cn); } span.querySelector("[action=remove]").before(moreOptionsButton); },
data:image/png;base64,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
изменил пункт. Не знаю, верно или нет.
Ну, не то, чтобы прямо совсем неверно, но выражение
("https://addons.mozilla.org/search/?q=" + encodeURIComponent(addon.name)) || addon.homepageURL
это типа true || something
Результатом такого выражения никогда не будет something.
То есть, можно оставить только то, что в скобках.
Отсутствует
Dumby
Отлично, спасибо. Видимо я недотыркал.
Последняя проблема, при наличии обновлений тултип кнопки с меню обрезается по высоте. На первой анимации видно.
(async (css, self) => ({ //===[ Buttons ]=================================================================== vertical: false, btnActions: ["remove", "install-update", "preferences"], cn: "ucf-cloned-button", update(e) { var trg = e.target; trg.nodeName == "ADDON-CARD" && trg.addon.type != "theme" && this.onCard(trg); }, onCard(card, again) { var btnsParent = card.querySelector("addon-options"); if (!btnsParent) return again || card.ownerGlobal .requestAnimationFrame(() => this.onCard(card, true)); var doc = card.ownerDocument; var [span] = card.getElementsByClassName(this.ccn); if (span) span.textContent = ""; else card.querySelector("button.more-options-button") .before(span = doc.createElement("span")), span.className = this.ccn; var item, num = 0; for(var sel of this.btnActions) { if (num++ == this.tInd) { if (!card.querySelector(this.ts)) continue; item = this.createPanelItem(doc); item.setAttribute("action", "toggle-disabled"); doc.l10n.setAttributes(item, `${ btnsParent.parentNode.getAttribute("active") == "true" ? "dis" : "en" }able-addon-button`); } else { item = btnsParent.querySelector(sel); if (!item) continue; item = this.clone(item); } span.append(item); item.shadowRoot.querySelector("button").classList.add(this.cn); } }, //===[ Popup ]===================================================================== items: { "Копировать имя": [ addon => self.copy(addon.name), ], "Копировать ID": [ addon => self.copy(addon.id), "Копировать имя" ], "Копировать UUID": [ addon => self.copy(addon.isActive ? Cu.getGlobalForObject(Cu).WebExtensionPolicy.getByID(addon.id).mozExtensionHostname : JSON.parse(Services.prefs.getCharPref("extensions.webextensions.uuids", "{}"))[addon.id] ), "Копировать имя", addon => addon.type != "extension" || !(addon.isWebExtension ?? true) ], // "Копировать версию": [ // addon => self.copy(addon.version), // "Копировать имя", // addon => !addon.version // ], // "Копировать имя и версию": [ // addon => self.copy(addon.name + " " + addon.version), // "Копировать имя", // addon => !addon.version // ], "Коп. URL кнопки": [ (addon, win) => { var btn = Object.assign({ parameters: {}, get initcode() {return this.initCode;}, setText(doc, name, t, cds) { win.custombutton.buttonSetText(doc, name, this[name], cds); } }, win.custombuttons.cbService.getButtonParameters(addon.buttonLink)); self.copy(win.custombutton.buttonGetURI(btn)); }, "Копировать имя", addon => addon.type != "custombuttons" ], "Домашняя страница": [ (addon, win) => win.openURL(addon.homepageURL || addon.reviewURL.replace(/\/reviews\/.*$/, "/")), addon => !addon.homepageURL && !addon.reviewURL ], "Поиск на АМО": [ (addon, win) => win.openURL( ("https://addons.mozilla.org/search/?q=" + encodeURIComponent(addon.name)) ), ["custombuttons", "theme", "plugin"] ], "Папка установки": [ addon => self.getFile(addon).reveal(), ["custombuttons", "theme", "plugin"] ], "Файл установки": [ addon => self.getFile(addon).launch(), ["custombuttons", "theme", "plugin"] ], "Проверить обновления": [ Cr.NS_ERROR_NET_TIMEOUT_EXTERNAL // Fx 87+ ? (addon, win) => win.content.checkForUpdate(addon) : (addon, win) => win.content.frames[0].checkForUpdate(addon), addon => !addon.applyBackgroundUpdates || addon.isBuiltin ], }, listContainerId: "ucf-aa-extra-items-container", showing(e) { var card = e.target.closest("addon-card"); if (!card) return; this.labs = []; var imgs = new Map(); var set = (key, val) => imgs.set(key, imgs.has(key) ? imgs.get(key).concat(val) : [val]); var entries = Object.entries(this.items); entries.forEach(([lab, [func, img, hideOn]], ind) => { this.labs.push(lab); (this[lab] = func).hideOn = hideOn; img && set(this.items[img]?.[1] ? entries.findIndex(a => a[0] == img): ind, ind); }); self = this; this.sym = Symbol.for(this.listContainerId); (this.showing = e => { var card = e.target.closest("addon-card"); card && this.onListShowind(card.addon, e.target); })(e); this.onListShowind(card.addon, e.target); }, async onListShowind(addon, list) { var doc = list.ownerDocument, win = doc.ownerGlobal; var container = doc[this.sym]; if (!container) { container = doc[this.sym] = doc.createElement("div"); container.onclick = this.cclick; container.id = this.listContainerId; for(var lab of this.labs) container.appendChild(this.createPanelItem(doc)).append(lab); var mo = new win.MutationObserver(this.mut); (container.mo = mo).container = container; } for(var item of container.children) { var h = this[item.textContent].hideOn; item.hidden = h && (h.call ? h(addon) : h.includes(addon.type)); } var {mo} = container; mo.disconnect(); list.contains(container) || list.prepend(container); mo.count = 0; mo.ts = Date.now(); mo.observe(list, {childList: true}); }, mut(muts, mo) { if (++mo.count > 10 || Date.now() - mo.ts > 100) return mo.disconnect(); var list = muts[0].target, {container} = mo; if (list.firstElementChild != container) mo.disconnect(), list.prepend(container), mo.observe(list, {childList: true}); }, cclick(e) { e.stopImmediatePropagation(); this.parentNode.hide(); self[e.target.textContent]( e.target.closest("addon-card").addon, e.view.windowRoot.ownerGlobal ); }, copy: str => (self.copy = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString )(str), getFile(addon) { var file, uri = addon.getResourceURI(); if (uri instanceof Ci.nsIJARURI) uri = uri.JARFile; if (uri instanceof Ci.nsIFileURL) file = uri.file; return file; }, //================================================================================ init(topic, quit) { Services.obs.addObserver(this, topic); Services.obs.addObserver(quit = (s, t) => { Services.obs.removeObserver(quit, t); Services.obs.removeObserver(this, topic); }, "quit-application-granted"); }, isTargetDoc: doc => doc.ownerGlobal.docShell .currentDocumentChannel.name.endsWith("/aboutaddons.html"), observe(doc) { if (!this.isTargetDoc(doc)) return; var vers = this.vers = parseInt(Services.appinfo.platformVersion); this.ts = `${vers >= 111 ? "moz-toggle" : "input"}[action="toggle-disabled"]`; css = css.replace("%TS%", this.ts) .replace(/%CN%/g, this.cn) .replace(/;$/gm, " !important;") .replace("%FD%", this.vertical ? "column" : "row"); this.regSheet(css, "USER_SHEET"); var unload = e => { e.target.removeEventListener("update", this, true); e.target.removeEventListener("showing", this, true); } var load = doc => { doc.addEventListener("update", this, true); doc.addEventListener("showing", this, true); var win = doc.ownerGlobal; win.addEventListener("unload", unload, {once: true}); this.inactiveAddonsVersion(win); } this.handleEvent = e => this[e.type](e); this.observe = doc => this.isTargetDoc(doc) && load(doc); this.ccn = this.cn + "s-container"; this.tInd = this.btnActions.findIndex(s => s == "toggle-disabled"); this.btnActions = this.btnActions.map( action => `panel-list > panel-item[action="${action}"]` ); this.createPanelItem = vers == 110 ? doc => new (doc.ownerGlobal.customElements.get("panel-item")) : doc => doc.createElement("panel-item"); if (vers >= 89) this.clone = item => item.cloneNode(true); else { var cf = function(e) { var win = e.view; win.InspectorUtils.removeContentState(this, 4, true); Services.focus.clearFocus(win); } this.clone = item => { var clone = item.cloneNode(true); clone.onclick = cf; return clone; } } load(doc); }, inactiveAddonsVersion(win) { var desc = win.Object.getOwnPropertyDescriptor(win.HTMLElement.prototype, "title"); var {set} = desc, cfg = {attributes: true, attributeFilter: ["title"]}; var handleMuts = function(m, {trg, val}) { this.disconnect(); var txt = trg.firstChild; if (txt) txt.data = txt.data.replace(trg.closest("addon-card").addon.name, val); } desc.set = function(val) { set.call(this, val); if (this.getAttribute("data-l10n-id") != "addon-name-disabled") return; var mo = new win.MutationObserver(handleMuts); mo.val = val; mo.observe(mo.trg = this, cfg); } for(var Elm of [win.HTMLAnchorElement, win.HTMLHeadingElement]) win.Object.defineProperty(Elm.prototype, "title", desc); }, regSheet(...args) { var prfx = "data:text/css;charset=utf8,@-moz-document url(about:addons),%0A" + "url(chrome://mozapps/content/extensions/aboutaddons.html) {"; var sss = Cc["@mozilla.org/content/style-sheet-service;1"] .getService(Ci.nsIStyleSheetService); (this.regSheet = (code, origin) => sss.loadAndRegisterSheet( Services.io.newURI(prfx + encodeURIComponent(code)), sss[origin] ))(...args); } }).init("chrome-document-loaded"))(`\ span.%CN%s-container { display: flex; flex-direction: %FD%; row-gap: 1px; } addon-card[expanded] span.%CN%s-container { flex-direction: row; } }`);
@media (prefers-color-scheme: dark) { #details-deck .inline-options-stack { background-color: rgba(43,42,51,.8) !important; } } #categories button.category { border: none !important; } /********* Показывает версии дополнений ***************************************/ @-moz-document url("about:addons"), url("chrome://mozapps/content/extensions/aboutaddons.html") { *|*[current-view="list"] .addon-name-link[title] { font-size: 0 !important; display: flex !important; flex-direction: row !important; } *|*[current-view="list"] .addon-name-link[title]::after { display: block !important; content: attr(title) !important; font-size: 1rem !important; line-height: 1em !important; } /* hide version number on updates category */ div[current-view="updates"] .addon-name-link[title]::after { display: none !important; visibility: collapse !important; opacity: 0 !important; } } /* Добавляет кнопки вместо меню: включить, отключить, удалить, настройки... ***/ /* https://forum.mozilla-russia.org/viewtopic.php?pid=793823#p793823 * Чтобы вернуть текст кнопкам, то в #main: * --v-buttons-font-size: Xrem; * Чтобы убрать текст для кнопок определенного типа там есть пример * addon-card panel-item[action="report"] * Убрать иконки: --v-buttons-icon-size: 0px; */ @-moz-document url("about:addons"), url("chrome://mozapps/content/extensions/aboutaddons.html") { :root { --v-content-button-border-color: var(--in-content-box-border-color, rgba(12, 12, 13, 0.3)); --v-content-button-border-color-hover: var(--in-content-border-hover, rgba(12, 12, 13, 0.5)); --v-content-button-background: var(--in-content-button-background, rgba(12, 12, 13, 0.1)); --v-content-button-background-hover: var(--in-content-button-background-hover, rgba(12, 12, 13, 0.15)); --v-content-button-background-active: var(--in-content-button-background-active, rgba(12, 12, 13, 0.2)); --v-content-button-color: var(--in-content-button-text-color, #0c0c0d); --v-content-button-color-hover: var(--in-content-button-text-color-hover, #0c0c0d); --v-content-button-color-active: var(--in-content-button-text-color-hover, #0c0c0d); --v-buttons-tooltip-color: var(--in-content-page-color, #0c0c0d); --v-buttons-tooltip-background: var(--in-content-box-background, #ffffff); --v-buttons-tooltip-border-color: var(--in-content-box-border-color, rgba(12, 12, 13, 0.3)); --v-main-max-width: 1000px; --card-padding: 8px !important; --section-width: 664px !important; --addon-icon-size: 32px !important; } #main { --v-buttons-font-size: 0.8rem; // 0; --v-buttons-font-weight: bold; --v-buttons-border-radius: 4px; --v-buttons-border-width: 1px; --v-buttons-min-height: 26px; --v-buttons-tooltip-font-size: 0.8rem; --v-buttons-tooltip-border-radius: 2px; --v-buttons-tooltip-delay: .5s; --v-buttons-tooltip-translate-x: -132px; --v-buttons-tooltip-translate-y: 15px; --v-buttons-width: auto; --v-list-display-flex: flex; } @media (prefers-color-scheme: dark) { :root { --v-content-button-border-color: var(--in-content-box-border-color, rgba(200, 200, 210, 0.2)); --v-content-button-border-color-hover: var(--in-content-border-hover, rgba(249, 249, 250, 0.3)); --v-content-button-background: var(--in-content-button-background, rgba(249, 249, 250, 0.1)); --v-content-button-background-hover: var(--in-content-button-background-hover, rgba(249, 249, 250, 0.15)); --v-content-button-background-active: var(--in-content-button-background-active, rgba(249, 249, 250, 0.2)); --v-content-button-color: var(--in-content-button-text-color, #f9f9fa); --v-content-button-color-hover: var(--in-content-button-text-color-hover, #f9f9fa); --v-content-button-color-active: var(--in-content-button-text-color-hover, #f9f9fa); --v-buttons-tooltip-color: var(--in-content-page-color, rgba(200, 200, 210, 0.5)); --v-buttons-tooltip-background: rgba(40, 40, 50, 0.85); --v-buttons-tooltip-border-color: rgba(120, 120, 120, 0.3); } } #moz-toggle-button.toggle-button, addon-card .theme-enable-button { --v-buttons-font-size: 0; --v-buttons-toggle-button-content: "Включить"; --v-buttons-tooltip-content: "Включить дополнение"; --v-buttons-tooltip-display: block; --icon: url("chrome://global/skin/icons/check-partial.svg"); } #moz-toggle-button.toggle-button[aria-pressed="true"], addon-card .card[active="true"] .theme-enable-button { --v-buttons-toggle-button-content: "Отключить"; --v-buttons-tooltip-content: "Отключить дополнение"; --v-buttons-tooltip-display: block; --icon: url("chrome://global/skin/icons/check.svg"); --v-content-button-background: rgba(85,255,85, 0.2); } addon-card panel-item[action="remove"] { --v-buttons-font-size: 0; --v-buttons-tooltip-content: "Удалить дополнение"; --v-buttons-tooltip-display: block; --icon: url("chrome://global/skin/icons/delete.svg"); --v-content-button-background: rgba(255,85,85, 0.3); --v-content-button-background-hover: rgba(255,85,85, 0.8); } addon-card panel-item[action="install-update"] { --v-buttons-font-size: 0; --v-buttons-tooltip-content: "Обновить дополнение"; --v-buttons-tooltip-display: block; --icon: url("chrome://global/skin/icons/update-icon.svg"); --v-content-button-background: rgba(49,140,231, 0.3); --v-content-button-background-hover: rgba(49,140,231, 0.8); } addon-card panel-item[action="preferences"] { --v-buttons-font-size: 0; --v-buttons-tooltip-content: "Настройки дополнения"; --v-buttons-tooltip-display: block; --icon: url("chrome://global/skin/icons/settings.svg"); --v-content-button-background: rgba(85,85,255, 0.3); --v-content-button-background-hover: rgba(85,85,255, 0.8); } /* Скрыть "Пожаловаться на дополнение" */ addon-card panel-item[action="report"] { display: none !important; } addon-list[type="plugin"] addon-card panel-item:not([checked]) { --icon: url("chrome://global/skin/icons/check-partial.svg"); } addon-card button.more-options-button { --v-buttons-tooltip-content: "Дополнительные действия"; --v-buttons-tooltip-display: block; --v-buttons-tooltip-translate-x: 0px !important; width: 26px !important; height: 26px !important; margin: 0 0 0 2px !important; padding: 0 0 0 0 !important; border-radius: 4px !important; } body { margin: 0 !important; } #main { max-width: var(--v-main-max-width) !important; margin-inline-start: 16px !important; margin-inline-end: 16px !important; } addon-card message-bar { --card-padding: inherit !important; } addon-card .card-contents { width: auto !important; overflow-x: hidden !important; flex-grow: 1 !important; } addon-card .card { display: grid !important; grid-template-columns: 1fr auto !important; } addon-card .card > * { grid-column-start: 1 !important; grid-column-end: 3 !important; } addon-card .card > .addon-card-collapsed { grid-column-start: 1 !important; grid-column-end: 2 !important; grid-row-start: 1 !important; overflow-x: hidden !important; } addon-card .card > addon-options { grid-column-start: 2 !important; grid-column-end: 3 !important; grid-row-start: 1 !important; align-self: start !important; min-width: 0 !important; overflow-x: hidden !important; } img.card-heading-image { margin: calc(var(--card-padding) * -1) calc(var(--card-padding) * -1) var(--card-padding) !important; width: calc(var(--card-padding) * 2 + 100%) !important; height: auto !important; object-fit: cover !important; } addon-card .card > img.card-heading-image:not([hidden]) { display: inline !important; } addon-card .card > img.card-heading-image:not([hidden]) + .addon-card-collapsed, addon-card .card > img.card-heading-image:not([hidden]) + .addon-card-collapsed ~ addon-options { grid-row-start: 2 !important; } addon-card .addon-name-container { margin-top: 0 !important; } div.arrow.top ~ div.list { display: var(--v-list-display-flex, block) !important; justify-content: end !important; } #ucf-aa-extra-items-container panel-item { --v-buttons-font-size: 0.8rem; --v-buttons-font-weight: normal; --v-buttons-border-radius: 2px; --v-buttons-border-width: 1px; --v-buttons-min-height: 16px; --v-buttons-width: 100%; } addon-card panel-list { border: 1px solid var(--v-buttons-tooltip-border-color) !important; padding: 1px 0 !important; margin: 1px !important; opacity: 0.9 !important; /**/ } addon-card panel-list panel-item[data-l10n-id="remove-addon-button"], addon-card panel-list panel-item[data-l10n-id="install-update-button"], addon-card panel-list panel-item[data-l10n-id="preferences-addon-button"], addon-card panel-list panel-item[data-l10n-id="report-addon-button"], addon-card panel-list panel-item[data-l10n-id="manage-addon-button"] { display: none !important; } addon-card panel-list panel-item { margin: 1px !important; } addon-card panel-item:where(:not([hidden])) { padding: 0 !important; margin: 0 !important; display: flex !important; align-items: center !important; } style + div.container { padding-top: 0 !important; padding-bottom: 0 !important; } addon-card panel-item[action="expand"], div.arrow.top, div.arrow.bottom, addon-card panel-item-separator { display: none !important; } #moz-toggle-button.toggle-button, addon-card button.theme-enable-button, link[href$="panel-item.css"] ~ button { display: flex !important; align-items: center !important; width: var(--v-buttons-width, 100%) !important; min-height: var(--v-buttons-min-height, 26px) !important; height: auto !important; line-height: 1.25em !important; padding: 0px calc(4px + .25em) !important; margin: 0 2px !important; background-image: var(--icon, none) !important; background-repeat: no-repeat !important; background-size: var(--v-buttons-icon-size, 16px) !important; background-position-y: center !important; background-position-x: left 4px !important; padding-inline-start: calc(4px + .25em + var(--v-buttons-icon-size, 16px)) !important; background-color: var(--v-content-button-background) !important; border-color: var(--v-content-button-border-color) !important; border-style: solid !important; border-width: var(--v-buttons-border-width, 0px) !important; color: var(--v-content-button-color) !important; border-radius: var(--v-buttons-border-radius, 0) !important; font-weight: var(--v-buttons-font-weight, inherit) !important; font-size: var(--v-buttons-font-size, inherit) !important; appearance: none !important; box-shadow: none !important; outline: none !important; -moz-context-properties: fill; fill: currentColor; } #moz-toggle-button.toggle-button, addon-card button.theme-enable-button { padding-inline-start: 0 !important; } #moz-toggle-button.toggle-button { border-color: var(--v-content-button-border-color) !important; } #moz-toggle-button.toggle-button:enabled:hover, addon-card button.theme-enable-button:enabled:hover, addon-card button.more-options-button:enabled:hover, link[href$="panel-item.css"] ~ button:enabled:hover { background-color: var(--v-content-button-background-hover) !important; color: var(--v-content-button-color-hover) !important; border-color: var(--v-content-button-border-color-hover) !important; } #moz-toggle-button.toggle-button:hover:active, addon-card button.theme-enable-button:enabled:hover:active, link[href$="panel-item.css"] ~ button:enabled:hover:active { background-color: var(--v-content-button-background-active) !important; color: var(--v-content-button-color-active) !important; } #moz-toggle-button.toggle-button::-moz-focus-inner, addon-card button.theme-enable-button::-moz-focus-inner, link[href$="panel-item.css"] ~ button::-moz-focus-inner { border: none !important; } link[href$="panel-item.css"] ~ button::after { inset: 0px !important; bottom: auto !important; height: 3px !important; width: auto !important; border-radius: 0 !important; } #moz-toggle-button.toggle-button::before { all: unset !important; display: inline-block !important; content: var(--v-buttons-toggle-button-content, none) !important; white-space: nowrap !important; margin-inline-start: calc(4px + .25em + var(--v-buttons-icon-size, 16px)) !important; } #moz-toggle-button.toggle-button:dir(rtl), addon-card button.theme-enable-button:dir(rtl), addon-card button.more-options-button:dir(rtl), link[href$="panel-item.css"] ~ button:dir(rtl) { background-position-x: right 4px !important; } link[href$="panel-item.css"] ~ button > label { padding: 0 !important; margin: 0 !important; } addon-card .more-options-menu { flex-grow: 0 !important; position: static !important; margin: 0 !important; align-self: start !important; } addon-card .addon-name, addon-card .addon-description { white-space: nowrap !important; overflow-x: hidden !important; text-overflow: ellipsis !important; } #moz-toggle-button.toggle-button::after, addon-card button.theme-enable-button::after, addon-card button.more-options-button::after, addon-card panel-item::after { display: var(--v-buttons-tooltip-display, none) !important; content: ""; max-width: 0; pointer-events: none !important; } #moz-toggle-button.toggle-button:hover::after, addon-card button.theme-enable-button:hover::after, addon-card button.more-options-button:hover::after, addon-card panel-item:hover::after { animation-name: tooltip_delay !important; animation-timing-function: step-end !important; animation-duration: 0s !important; animation-iteration-count: 1 !important; animation-fill-mode: forwards !important; animation-delay: var(--v-buttons-tooltip-delay, .5s) !important; --v-buttons-tooltip-transform: translate(calc(1px + var(--v-buttons-tooltip-translate-x)), calc(100% + var(--v-buttons-tooltip-translate-y))); } @keyframes tooltip_delay { from { max-width: 0; } to { content: var(--v-buttons-tooltip-content, ""); align-self: flex-end; position: absolute; color: var(--v-buttons-tooltip-color); background: var(--v-buttons-tooltip-background); border: 1px solid var(--v-buttons-tooltip-border-color); border-radius: var(--v-buttons-tooltip-border-radius, 0); padding: 2px 0px 4px 0px; min-width: 15em; max-width: 50em; line-height: 1.25em; font-size: 0.7rem; font-weight: normal; text-align: center; z-index: var(--z-index-popup, 10); overflow: hidden; text-overflow: ellipsis; transform: var(--v-buttons-tooltip-transform, none); } } addon-card .toggle-button:hover::after, addon-card button.theme-enable-button:hover::after { --v-buttons-tooltip-transform: translate(calc(var(--v-buttons-tooltip-translate-x) - 1px), calc(100% + 1px + var(--v-buttons-tooltip-translate-y))); } addon-card button.theme-enable-button::before { content: ""; display: inline-block; width: calc(4px + .25em + var(--v-buttons-icon-size, 16px)); } } /* custom_css_for_fx - recentupdates_category_always_visible ******************/ /* Github: https://github.com/aris-t2/customcssforfx **************************/ @-moz-document url-prefix(about:addons), url-prefix(chrome://mozapps/content/extensions/aboutaddons.html) { #categories .category[name="recent-updates"][disabled], #category-recentUpdates[disabled] { overflow: visible !important; height: 48px !important; min-height: 48px !important; opacity: 1 !important; transition-property: unset !important; transition-duration: unset !important; -moz-user-input: unset !important; } #categories .category[name="recent-updates"][hidden], #category-recentUpdates[hidden] { opacity: 1 !important; min-height: 48px !important; height: 48px !important; display: inherit !important; transition: unset !important; } }
Отсутствует
при наличии обновлений тултип кнопки с меню обрезается по высоте
Увы, не получилось воспроизвести.
Может добавить в @keyframes, в to {…}, какой-нибудь min-height
Так, пальцем в небо.
Отсутствует
в 113 вертикальная панель отвалилась. Есть уже решение?
Заменить в vertical_top_bottom_bar.css:
display: -moz-box --> display: flex
-moz-box-flex --> flex-grow
-moz-box-orient: vertical --> flex-direction: column
-moz-box-align --> align-items
-moz-box-pack --> justify-content
Отредактировано unter_officer (09-05-2023 11:53:58)
«The Truth Is Out There»
Отсутствует
voqabuhe
Я вот так написал в vertical_top_bottom_bar.css
/* #ucf-additional-vertical-container { display: -moz-box !important; } */ @supports (display: -moz-box) { #ucf-additional-vertical-container { display: -moz-box !important; } } @supports not (display: -moz-box) { #ucf-additional-vertical-container { display: flex !important; } #ucf-additional-vertical-bar { flex-grow: 1 !important; } }
Отсутствует
Я вот так написал в vertical_top_bottom_bar.css
Во, спасибо, появилась.
Заменить в vertical_top_bottom_bar.css:
Спасибо. Но вариант от Dumby требует меньше движений.
Отсутствует
Спасибо. Но вариант от Dumby требует меньше движений.
Пожалуйста.
Только мой вариант не совсем мой. Он от автора UCF.
Отредактировано unter_officer (09-05-2023 12:27:18)
«The Truth Is Out There»
Отсутствует
Dumby, а посмотри ещё пожайлуста, чего-то Findbar вниз уехал.
@-moz-document url("chrome://browser/content/browser.xhtml") { :root { --v-findbar-flex-direction: row; /* row-reverse - findbar справа */ --v-findbar-container-start: 4px; /* 100%; */ /* 1px - findbar справа */ --v-findbar-container-end: 1px; /* 100% - findbar справа */ --v-findbar-margin-right: 17px; /* отступ для скроллбара */ --v-findbar-duration: 150ms; /* длительность анимации */ --v-findbar-border-radius: 6px; /* радиус скругления findbar */ --v-findbar-textbox-radius: 3px; /* радиус скругления поля ввода */ --v-findbar-textbox-width: 14em; /* длина поля ввода */ --v-findbar-toolbarbutton-border-radius: 3px; /* радиус скругления кнопок */ --v-findbar-toolbarbutton-inner-padding: 3px; /* влияет на размер кнопок и поля ввода */ --v-findbar-toolbarbutton-icon-display: -moz-box; /* none - скрыть иконки на кнопках */ --v-findbar-toolbarbutton-text-display: none; /* -moz-box - показать текст на кнопках */ } .browserContainer > findbar { -moz-box-ordinal-group: 0 !important; height: 0 !important; min-height: 0 !important; max-height: 0 !important; padding: 0 !important; margin: 0 !important; margin-right: var(--v-findbar-margin-right) !important; border: none !important; display: flex !important; flex-direction: var(--v-findbar-flex-direction) !important; transition: none !important; visibility: visible !important; opacity: 1 !important; color: var(--toolbar-color, -moz-DialogText) !important; box-shadow: none !important; overflow: visible !important; --toolbarbutton-inner-padding: var(--v-findbar-toolbarbutton-inner-padding); --toolbarbutton-border-radius: var(--v-findbar-toolbarbutton-border-radius); } .browserContainer > findbar > .findbar-container { position: fixed !important; display: flex !important; align-items: center !important; flex-direction: var(--v-findbar-flex-direction) !important; inset: auto !important; margin: -1px 0 0 0 !important; height: auto !important; min-width: 0 !important; padding: 1px !important; padding-inline-start: min(calc(2 * var(--toolbarbutton-inner-padding) + 19px), var(--v-findbar-container-start)) !important; padding-inline-end: min(calc(2 * var(--toolbarbutton-inner-padding) + 19px), var(--v-findbar-container-end)) !important; overflow: hidden !important; border: 1px solid var(--chrome-content-separator-color, rgba(0,0,0,.25)) !important; border-top-width: 0 !important; box-shadow: none !important; z-index: 2 !important; border-radius: 0 0 var(--v-findbar-border-radius) var(--v-findbar-border-radius) !important; background-color: var(--toolbar-bgcolor, -moz-Dialog) !important; background-image: var(--toolbar-bgimage, linear-gradient(rgba(255,255,255,.15), rgba(255,255,255,.15))) !important; opacity: 1; animation-name: findbar-animation, findbar-animation-opacity !important; animation-delay: 0s !important; animation-duration: var(--v-findbar-duration) !important; animation-timing-function: linear, ease-out !important; animation-iteration-count: 1 !important; animation-fill-mode: none !important; } .browserContainer > findbar > #findbar-close-container, .browserContainer > findbar > toolbarbutton.findbar-closebutton { margin: 1px 3px !important; padding: 0 !important; border: none !important; border-radius: var(--v-findbar-toolbarbutton-border-radius) !important; -moz-appearance: none !important; appearance: none !important; position: fixed !important; /* display: flex !important; */ display: none !important; z-index: 2 !important; height: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important; width: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important; opacity: 1; animation-name: findbar-animation, findbar-animation-opacity !important; animation-delay: 0s !important; animation-duration: var(--v-findbar-duration) !important; animation-timing-function: linear, ease-out !important; animation-iteration-count: 1 !important; animation-fill-mode: none !important; } .browserContainer > findbar > #findbar-close-container > toolbarbutton.findbar-closebutton { appearance: none !important; margin: 0 !important; padding: 0 !important; height: 100% !important; width: 100% !important; border: none !important; border-radius: var(--v-findbar-toolbarbutton-border-radius) !important; } .browserContainer > findbar toolbarbutton.findbar-closebutton > .toolbarbutton-icon { margin: 0 !important; padding: 0 !important; border: none !important; height: 16px !important; width: 16px !important; border-radius: var(--v-findbar-toolbarbutton-border-radius) !important; } .browserContainer > findbar[hidden="true"] > .findbar-container, .browserContainer > findbar[hidden="true"] > #findbar-close-container, .browserContainer > findbar[hidden="true"] > toolbarbutton.findbar-closebutton { transform: translateY(-100%); animation-name: findbar-animation-hide, findbar-animation-opacity-hide !important; animation-timing-function: linear, ease-in !important; pointer-events: none !important; opacity: 0; } @keyframes findbar-animation { from { transform: translateY(-100%); pointer-events: none; } to { transform: translateY(0%); pointer-events: none; } } @keyframes findbar-animation-opacity { from { opacity: 0; } to { opacity: 1; } } @keyframes findbar-animation-hide { from { transform: translateY(0%); } to { transform: translateY(-100%); } } @keyframes findbar-animation-opacity-hide { from { opacity: 1; } to { opacity: 0; } } .browserContainer > findbar:-moz-lwtheme { color: var(--toolbar-color, inherit) !important; } .browserContainer > findbar:-moz-lwtheme > .findbar-container { background-color: var(--lwt-accent-color, white) !important; background-image: linear-gradient(var(--toolbar-bgcolor, rgba(255,255,255,.4)), var(--toolbar-bgcolor, rgba(255,255,255,.4))) !important; } .browserContainer > findbar:-moz-lwtheme-brighttext > .findbar-container { background-color: var(--lwt-accent-color, black) !important; } :root[lwtheme-image] .browserContainer > findbar:-moz-lwtheme > .findbar-container { background-repeat: repeat-y !important; background-size: auto auto !important; background-attachment: fixed !important; background-position: right top !important; background-image: linear-gradient(var(--toolbar-bgcolor, rgba(255,255,255,.4)), var(--toolbar-bgcolor, rgba(255,255,255,.4))), var(--lwt-header-image, none) !important; } .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton) { align-self: normal !important; } .browserContainer > findbar > .findbar-container > * { margin: 1px !important; outline: none !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] { display: flex !important; flex-direction: row !important; align-items: normal !important; } .browserContainer > findbar > .findbar-container > description:empty { margin: 0 !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > toolbarbutton.tabbable, .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > .findbar-textbox { padding-block: 0 !important; margin-inline: 0 !important; min-height: 22px !important; box-sizing: border-box !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > toolbarbutton.findbar-find-previous { margin-inline: 2px !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > toolbarbutton.tabbable { min-width: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important; border: none !important; border-radius: var(--toolbarbutton-border-radius) !important; background-color: transparent !important; padding-inline: var(--toolbarbutton-inner-padding) !important; outline: none !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > .findbar-textbox { border-radius: var(--v-findbar-textbox-radius) !important; min-height: calc(2 * var(--toolbarbutton-inner-padding) + 16px) !important; width: var(--v-findbar-textbox-width) !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > .findbar-textbox, .browserContainer > findbar > .findbar-container > description, .browserContainer > findbar > .findbar-container > label { padding-bottom: 1px !important; } .browserContainer > findbar > .findbar-container > checkbox > .checkbox-label-box > .checkbox-icon, .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > toolbarbutton.tabbable > .toolbarbutton-text, .browserContainer > findbar > .findbar-container > .find-status-icon { display: none !important; } .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton) > :is(.checkbox-label-box,.toolbarbutton-text) { display: var(--v-findbar-toolbarbutton-text-display) !important; margin-inline: 2px !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > toolbarbutton.tabbable > .toolbarbutton-icon, .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton) > :is(.checkbox-check,.toolbarbutton-icon) { margin: 0 !important; padding: 0 !important; border: none !important; height: 16px !important; width: 16px !important; } .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton) > :is(.checkbox-check,.toolbarbutton-icon) { display: var(--v-findbar-toolbarbutton-icon-display) !important; appearance: none !important; background: none !important; color: inherit !important; filter: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='0'><filter id='fill'><feComposite in='FillPaint' in2='SourceGraphic' operator='in'/></filter></svg>#fill"); fill: currentColor; } .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton) { appearance: none !important; padding: var(--toolbarbutton-inner-padding) !important; border-radius: var(--toolbarbutton-border-radius) !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > toolbarbutton.tabbable:not([disabled="true"]):hover, .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton):not([disabled="true"]):hover { background-color: var(--toolbarbutton-hover-background, color-mix(in srgb, currentColor 17%, transparent)) !important; } .browserContainer > findbar > .findbar-container > hbox[anonid="findbar-textbox-wrapper"] > toolbarbutton.tabbable:not([disabled="true"]):is([checked="true"],:hover:active), .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton):not([disabled="true"]):is([checked="true"],:hover:active) { background-color: var(--toolbarbutton-active-background, color-mix(in srgb, currentColor 30%, transparent)) !important; } .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton).findbar-highlight { list-style-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16'><path style='fill:rgb(142, 142, 152);' d='M 2,3 V 4.2 H 6 V 12 h 1.2 l 0,-7.8 h 4 L 11.2,3 Z M 12.5,6 C 11.8,8.39 10,10.3 10,11.6 10,12.9 11.1,14 12.5,14 13.9,14 15,12.9 15,11.6 15,10.3 13.2,8.39 12.5,6 Z m 0,6.8 c -1,0 -1.3,-0.8 -1.3,-1.2 0,-1.1 0.8,-2.1 1.3,-3 0.5,0.9 1.3,1.9 1.3,3 0,0.4 -0.3,1.2 -1.3,1.2 z' /></svg>") !important; } .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton).findbar-case-sensitive { list-style-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16'><path style='fill:rgb(142, 142, 152);' d='m 6,3 -5,9 h 1.2 l 1.1,-2 h 2.5 v 2 H 7 V 3 Z M 5.8,5.5 5.8,9 H 3.9 Z M 13,6 V 6.77 C 12.5,6.28 11.7,6 11,6 9.34,6 8,7.34 8,9 c 0,1.7 1.34,3 3,3 0.7,0 1.5,-0.3 2,-0.8 V 12 h 1 V 6 Z m -2,1 c 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 C 9.9,11 9,10.1 9,9 9,7.9 9.9,7 11,7 Z' /></svg>") !important; } .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton).findbar-match-diacritics { list-style-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16'><path style='fill:rgb(142, 142, 152);' d='M 5,3 3,0 H 0 M 12,5 10,2 H 7 M 6,3 1,12 h 1.2 l 1.1,-2 h 2.5 v 2 H 7 V 3 M 5.8,5.5 V 9 H 3.9 Z M 13,6 V 6.77 C 12.5,6.28 11.7,6 11,6 9.34,6 8,7.34 8,9 c 0,1.7 1.34,3 3,3 0.7,0 1.5,-0.3 2,-0.8 V 12 h 1 V 6 Z m -2,1 c 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 C 9.9,11 9,10.1 9,9 9,7.9 9.9,7 11,7 Z'/></svg>") !important; } .browserContainer > findbar > .findbar-container > :is(checkbox,toolbarbutton).findbar-entire-word { list-style-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16'><path style='fill:rgb(142, 142, 152);' d='M 15,13.8 V 15 H 1 V 13.8 M 15,2.2 15,1 H 1 V 2.2 M 6,3 1,12 h 1.2 l 1.1,-2 h 2.5 v 2 H 7 V 3 M 5.8,5.5 V 9 H 3.9 Z M 13,6 V 6.77 C 12.5,6.28 11.7,6 11,6 9.34,6 8,7.34 8,9 c 0,1.7 1.34,3 3,3 0.7,0 1.5,-0.3 2,-0.8 V 12 h 1 V 6 Z m -2,1 c 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 C 9.9,11 9,10.1 9,9 9,7.9 9.9,7 11,7 Z' /></svg>") !important; } }
Добавлено 09-05-2023 12:30:33
Пожалуйста.
Только мой вариант не совсем мой. Он от автора UCF.
Да, где ты его нашёл?
Отредактировано voqabuhe (09-05-2023 12:30:33)
Отсутствует
Да, где ты его нашёл?
Здесь, через личку.
И хочу ещё раз, уже публично, поблагодарить Виталия за помощь!
«The Truth Is Out There»
Отсутствует
voqabuhe
Может где-то ошиблись, когда производили замену?
У меня с первого раза все завелось и прекрасно работает.
«The Truth Is Out There»
Отсутствует
unter_officer
А как там ошибёшься, скопировал - нашёл, скопировал - заменил. У вас были кнопки внизу панели? У меня четыре последние кнопки на скрине были в самом низу, а теперь поднялись вверх. С вариантом от Dumby всё нормально. Ну попробую ещё раз, позже перепроверить.
Отсутствует
Мой vertical_top_bottom_bar.css:
toolbarpaletteitem[place="palette"] > toolbaritem.ucf-additional-springs { background: white url("./svg/spring.svg") center no-repeat; border: none; outline: 1px solid currentColor; outline-offset: -1px; min-height: 37px; opacity: 0.3; } toolbarpaletteitem[place="toolbar"] > toolbaritem.ucf-additional-springs, toolbarpaletteitem[place="panel"] > toolbaritem.ucf-additional-springs, toolbarpaletteitem[place="menu-panel"] > toolbaritem.ucf-additional-springs { background: white url("./svg/spring.svg") center no-repeat; border: none; min-width: 34px; min-height: 14px; outline: 1px solid currentColor; outline-offset: -1px; margin-block: 2px !important; margin-inline: 1px !important; opacity: 0.3; } toolbarpaletteitem[place="palette"][id*="ucf-additional-top-spring"], toolbarpaletteitem[place="palette"][id*="ucf-additional-vertical-spring"], toolbarpaletteitem[place="palette"][id*="ucf-additional-bottom-spring"] { vertical-align: top; } toolbarpaletteitem[place] > toolbaritem.ucf-additional-springs { -moz-window-dragging: no-drag !important; } #ucf-restart-app { list-style-image: url("./svg/restart-app-16.svg") !important; fill: #f38725 !important; } #ucf-additional-vertical-toggle-button { list-style-image: url("./svg/vert-toolbar.svg") !important; } #ucf-additional-top-toggle-button { list-style-image: url("./svg/top-toolbar.svg") !important; } #ucf-additional-bottom-toggle-button { list-style-image: url("./svg/bottom-toolbar.svg") !important; } #ucf-view-history-sidebar-button { list-style-image: url("./svg/history-16.svg") !important; } #ucf-view-bookmarks-sidebar-button { list-style-image: url("./svg/bookmark-16.svg") !important; } #ucf-open-directories-button { list-style-image: url("./svg/user-home-16.svg") !important; } #browser-bottombox:not([lwthemefooter="true"]):-moz-lwtheme { background-color: transparent !important; } #ucf-additional-vertical-box { background: none !important; border: none !important; box-shadow: none !important; position: relative !important; z-index: 3 !important; margin: -1px 0 !important; } #ucf-additional-top-bar, #ucf-additional-vertical-bar, #ucf-additional-bottom-bar { -moz-appearance: none !important; appearance: none !important; padding: 0 !important; border-block: none !important; overflow: -moz-hidden-unscrollable; overflow: clip; } #ucf-additional-bottom-bar { border-top: 1px solid var(--chrome-content-separator-color, var(--toolbox-border-bottom-color, rgba(0,0,0,0.1))) !important; } #ucf-additional-bottom-bar #ucf-additional-bottom-closebutton { margin: 0 var(--toolbarbutton-outer-padding, 1px) !important; padding: var(--toolbarbutton-inner-padding, 4px) !important; } #ucf-additional-bottom-bar #ucf-additional-bottom-closebutton .toolbarbutton-icon { margin: 0 !important; padding: 0 !important; height: 16px !important; width: 16px !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar, #ucf-additional-bottom-bar { -moz-window-dragging: no-drag !important; background-clip: border-box !important; background-origin: border-box !important; background-color: var(--toolbar-bgcolor, -moz-Dialog) !important; background-image: var(--toolbar-bgimage, linear-gradient(rgba(255,255,255,.15), rgba(255,255,255,.15))) !important; color: var(--toolbar-color, -moz-DialogText) !important; border-inline: none !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar { padding: 1px 0 !important; margin: 0 !important; font-size: 1rem !important; min-width: 20px !important; width: auto !important; flex-grow: 1 !important; align-items: stretch !important; justify-content: start !important; flex-direction: column !important; } :root:-moz-lwtheme[style*="--lwt-additional-images"] #navigator-toolbox { background-attachment: fixed !important; } #ucf-additional-vertical-box:-moz-lwtheme > #ucf-additional-vertical-bar, #ucf-additional-bottom-bar:-moz-lwtheme { color: var(--toolbar-color, inherit) !important; background-repeat: no-repeat, var(--lwt-background-tiling, repeat-y) !important; background-size: auto auto !important; background-attachment: fixed !important; background-position: right top, var(--lwt-background-alignment, right top) !important; background-color: transparent !important; background-image: linear-gradient(var(--toolbar-bgcolor, rgba(255,255,255,.4)), var(--toolbar-bgcolor, rgba(255,255,255,.4))), var(--lwt-header-image, var(--lwt-additional-images, none)) !important; } :root[lwtheme-image="true"] #ucf-additional-vertical-box:-moz-lwtheme > #ucf-additional-vertical-bar, :root[lwtheme-image="true"] #ucf-additional-bottom-bar:-moz-lwtheme { background-repeat: no-repeat, repeat-y !important; } :root #browser-bottombox[lwthemefooter="true"] #ucf-additional-bottom-bar:-moz-lwtheme { background-repeat: initial !important; background-attachment: initial !important; background-position: initial !important; background-color: var(--toolbar-bgcolor, rgba(255,255,255,.4)) !important; background-image: none !important; } #ucf-additional-vertical-box[vertautohide="true"]:-moz-lwtheme > #ucf-additional-vertical-bar { background-color: var(--lwt-accent-color, white) !important; } #ucf-additional-vertical-box[vertautohide="true"]:-moz-lwtheme-brighttext > #ucf-additional-vertical-bar { background-color: var(--lwt-accent-color, black) !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar:not([collapsed="true"]) { border-inline-end: 1px solid var(--chrome-content-separator-color, var(--toolbox-border-bottom-color, rgba(0,0,0,0.1))) !important; } #ucf-additional-vertical-box[v_vertical_bar_start="false"] > #ucf-additional-vertical-bar:not([collapsed="true"]) { border-inline-end: none !important; border-inline-start: 1px solid var(--chrome-content-separator-color, var(--toolbox-border-bottom-color, rgba(0,0,0,0.1))) !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar[collapsed="true"] { padding: 0 !important; border: none !important; min-width: 0 !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar > toolbaritem.toolbaritem-combined-buttons { flex-direction: column !important; margin-inline: 0 !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar > toolbaritem.toolbaritem-combined-buttons > toolbarbutton.toolbarbutton-combined > .toolbarbutton-text { padding-inline: 1px !important; margin-inline: 0 !important; min-width: 0 !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar > toolbaritem.toolbaritem-combined-buttons separator { display: none !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar > toolbarspring { min-width: 0 !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar > toolbarseparator { -moz-appearance: none !important; appearance: none !important; padding: 0 !important; margin: 2px !important; margin-top: 4px !important; margin-bottom: 0 !important; border: none !important; border-top: 1px solid currentColor !important; width: auto !important; max-width: none !important; height: 5px !important; min-height: 5px !important; max-height: 5px !important; opacity: 0.3 !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar > toolbarspacer { height: 15px !important; } #ucf-additional-vertical-container { display: flex !important; } #ucf-additional-vertical-container[vertautohide="true"] { position: relative !important; min-width: 100px !important; width: 100px !important; max-width: 100px !important; overflow: visible !important; margin-inline-start: 0 !important; margin-inline-end: -100px !important; pointer-events: none !important; visibility: hidden !important; } #ucf-additional-vertical-container[vertautohide="true"][v_vertical_bar_start="false"] { margin-inline-start: -100px !important; margin-inline-end: 0 !important; } #ucf-additional-vertical-box[vertautohide="true"] { position: absolute !important; display: block !important; top: 0 !important; bottom: 0 !important; left: 0 !important; right: auto !important; font-size: 0px !important; } #ucf-additional-vertical-box[vertautohide="true"][v_vertical_bar_start="false"], #ucf-additional-vertical-box[vertautohide="true"]:-moz-locale-dir(rtl) { left: auto !important; right: 0 !important; } #ucf-additional-vertical-box[vertautohide="true"][v_vertical_bar_start="false"]:-moz-locale-dir(rtl) { left: 0 !important; right: auto !important; } #ucf-additional-vertical-box[vertautohide="true"] > #ucf-additional-vertical-bar:not([collapsed="true"]) { left: calc(-1 * (100% - 5px)); right: auto; opacity: 0; animation-name: toolbar-hide !important; animation-timing-function: linear !important; animation-duration: 0.2s !important; animation-iteration-count: 1 !important; animation-delay: 0s !important; transition-property: opacity !important; transition-timing-function: step-start !important; transition-duration: 0s !important; transition-delay: 0.2s !important; pointer-events: auto !important; height: 100% !important; visibility: visible !important; position: relative !important; } #ucf-additional-vertical-box[vertautohide="true"]:-moz-locale-dir(rtl) > #ucf-additional-vertical-bar:not([collapsed="true"]), #ucf-additional-vertical-box[vertautohide="true"][v_vertical_bar_start="false"] > #ucf-additional-vertical-bar:not([collapsed="true"]) { left: auto; right: calc(-1 * (100% - 5px)); animation-name: toolbar-hide-rtl !important; } #ucf-additional-vertical-box[vertautohide="true"][v_vertical_bar_start="false"]:-moz-locale-dir(rtl) > #ucf-additional-vertical-bar:not([collapsed="true"]) { left: calc(-1 * (100% - 5px)); right: auto; animation-name: toolbar-hide !important; } #ucf-additional-vertical-container > #ucf-additional-vertical-box[vertautohide="true"][v_vertical_bar_visible] > #ucf-additional-vertical-bar:not([collapsed="true"]) { left: 0px; right: auto; opacity: 1; animation-name: toolbar-visible !important; transition-delay: 0s !important; } #ucf-additional-vertical-container > #ucf-additional-vertical-box[vertautohide="true"]:-moz-locale-dir(rtl)[v_vertical_bar_visible] > #ucf-additional-vertical-bar:not([collapsed="true"]), #ucf-additional-vertical-container > #ucf-additional-vertical-box[vertautohide="true"][v_vertical_bar_start="false"][v_vertical_bar_visible] > #ucf-additional-vertical-bar:not([collapsed="true"]) { left: auto; right: 0px; animation-name: toolbar-visible-rtl !important; } #ucf-additional-vertical-container > #ucf-additional-vertical-box[vertautohide="true"][v_vertical_bar_start="false"]:-moz-locale-dir(rtl)[v_vertical_bar_visible] > #ucf-additional-vertical-bar:not([collapsed="true"]) { left: 0px; right: auto; animation-name: toolbar-visible !important; } @keyframes toolbar-hide { from { left: 0px; } to { left: calc(-1 * (100% - 5px)); } } @keyframes toolbar-hide-rtl { from { right: 0px; } to { right: calc(-1 * (100% - 5px)); } } @keyframes toolbar-visible { from { left: calc(-1 * (100% - 5px)); } to { left: 0px; } } @keyframes toolbar-visible-rtl { from { right: calc(-1 * (100% - 5px)); } to { right: 0px; } } :root[inDOMFullscreen] #ucf-additional-vertical-box > #ucf-additional-vertical-bar:not([collapsed="true"]), :root[inFullscreen]:not([OSXLionFullscreen]) #ucf-additional-vertical-box > #ucf-additional-vertical-bar:not([collapsed="true"]):not([fullscreentoolbar="true"]), #ucf-additional-bottom-bar[collapsed="true"][customizable="true"][customizing="true"] { visibility: collapse !important; padding: 0 !important; border: none !important; min-width: 0 !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar > #personal-bookmarks { width: 0 !important; flex-grow: 0 !important; margin: 0 !important; } #ucf-additional-vertical-box > #ucf-additional-vertical-bar > #search-container { width: 0 !important; max-height: 0 !important; overflow-y: visible !important; flex-grow: 0 !important; min-width: 80px !important; margin: 0 !important; } :root[chromehidden~="location"][chromehidden~="toolbar"] #ucf-additional-vertical-container { display: none !important; } @supports (fill: color-mix(in srgb, currentColor 20%, transparent)) { #ucf-restart-app { fill: color-mix(in srgb, currentColor 20%, #f38725) !important; } }
Отредактировано unter_officer (09-05-2023 13:14:10)
«The Truth Is Out There»
Отсутствует
Рядом с (или вместо) -moz-box-ordinal-group: 0 !important;
order: -1 !important;
Вот спасибо большое. Теперь всё на месте.
Добавлено 09-05-2023 13:29:38
Мой vertical_top_bottom_bar.css:
Спасибо, с вашим действительно всё нормально. Таки значит я где-то ошибся. Теперь два рабочих варианта.
Отредактировано voqabuhe (09-05-2023 13:29:38)
Отсутствует