Vitaliy V.
Сделал, чтобы обычная иконка #PanelUI-menu-button была в виде крестика с красным фоном, а при наведении возвращается родной значок.
Но когда меняю PNG на svg иконку, то ничего не работает, иконка не меняется!
(async (id, func) => { // дополнительные клики на downloads-button, PanelUI-menu для custom_script_win.js await window.delayedStartupPromise; var btn = document.getElementById("downloads-button"), pui = document.getElementById("PanelUI-menu-button"); if (!btn) return; btn.tooltipText = GetDynamicShortcutTooltipText(btn.id) +` ПКМ: Сохранить как единый html всё | выделенное на странице …Shift Обзор папки [Загрузки]\n Ролик: Сохранить как файл .txt …Shift Сайт: графика Вкл/Выкл\n СКМ или Тащить рисунок вправо: …cохранить в [Загрузки]/_Images\n Alt⇧S нажать кнопку SingleSave` // нет SingleSave - выполнить save() pui.tooltipText = `Браузер Firefox, версия ${Services.appinfo.platformVersion}\n Правый клик: ⇲ Свернуть окно …Alt Персонализация\n Ролик: Закрыть браузер` var addDestructor = nextDestructor => { var {destructor} = ucf[id]; ucf[id].destructor = () => { try {destructor();} catch(ex) {Cu.reportError(ex);} nextDestructor(); } }, showInStatusPanel = (info, time = 5000) => { var win = Services.wm.getMostRecentWindow("navigator:browser"); StatusPanel = win.StatusPanel; if (StatusPanel.update.tid) clearTimeout(StatusPanel.update.tid) else { var {update} = StatusPanel; StatusPanel.update = () => {}; StatusPanel.update.ret = () => { StatusPanel.update = update; StatusPanel.update(); } } StatusPanel.update.tid = setTimeout(StatusPanel.update.ret, time); StatusPanel._label = info; }, saveSelectionToTxt = async () => { // сохранить страницу или выделенный текст как файл .txt var splice = saveURL.length == 10; var msgName = id + ":Save:GetSelection"; var receiver = msg => { var title = document.title || gBrowser.selectedTab.label; var args = [ "data:text/plain," + encodeURIComponent(gBrowser.currentURI.spec + "\n\n" + msg.data), title.replace(/[:\\\/<>?*|"]+/g,'_').replace(/\s+/g,' ').slice(0, 100).trim() + '_' + new Date().toLocaleString('ru').replace(', ','-').replace(/:/g, '։') + '.txt', null, false, true, null, window.document ]; splice && args.splice(5, 0, null); saveURL(...args) && showInStatusPanel("√ текст сохранён: " + title.slice(0, 60)); } messageManager.addMessageListener(msgName, receiver); addDestructor(() => messageManager.removeMessageListener(msgName, receiver)); var func = fm => { var res, fed, win = {}, fe = fm.getFocusedElementForWindow(content, true, win); var sel = (win = win.value).getSelection(); if (sel.isCollapsed) { var ed = fe && fe.editor; if (ed && ed instanceof Ci.nsIEditor) sel = ed.selection, fed = fe; } if (sel.isCollapsed) fed && fed.blur(), docShell.doCommand("cmd_selectAll"), res = win.getSelection().toString(), docShell.doCommand("cmd_selectNone"), fed && fed.focus(); res = res || sel.toString(); /\S/.test(res) && sendAsyncMessage("saveSelectionToTxt", res); } var url = "data:;charset=utf-8," + encodeURIComponent(`(${func})`.replace("saveSelectionToTxt", msgName)) + '(Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager));'; (saveSelectionToTxt = () => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false))(); }, // end save = async () => { // автор: Лекс, правка: Dumby, Dobrov var msgName = id + "ucfDwnldsBtnSaveSnapshotToHTML"; if (typeof IOUtils != "object") { // Firefox 78 ESR var {OS} = ChromeUtils.import("resource://gre/modules/osfile.jsm"); var PathUtils = {join: (...args) => OS.Path.join(...args)}; var IOUtils = {writeUTF8: (path, txt) => OS.File.writeAtomic(path, new TextEncoder().encode(txt))}; } var write = IOUtils.writeUTF8 ? "writeUTF8" : "writeAtomicUTF8"; var Title = (type) => { // получить заголовок (без обрезки, если type не указан) или домен (type <0) var title = (document.title || gBrowser.selectedTab.label); if ( !type ) return title; // заголовок if ( type > 0 ) return title.slice(0, type).replace(/ \| Форум Mozilla Россия$| — Mozilla Firefox|[\\\/?*\"'`]+/g,'').replace(/\s+/g,' ').replace(/[|<>]+/g,'_').replace(/:/g,'։').trim(); // ограничить длину имени var host = (/^file:\/\//.test(gURLBar.value)) ? '' : gURLBar.value.replace(/^.*url=|https?:\/\/|www\.|\/.*/g,''); return host.replace(/^ru\.|^m\.|forum\./,'').replace(/^club\.dns/,'dns'); } var msgListener = async msg => { var [fileContent, fileName] = msg.data, dir; try {dir = prefs.getComplexValue("browser.download.dir", Ci.nsIFile);} catch {dir = dirsvc.get("DfltDwnld", Ci.nsIFile);} var arr = prefs.getStringPref("ucf_save.dirs", "_Web||_Images|0").split('|').slice(0, 2); // [Загрузки]/папки ucf_save/файл arr[1] = (arr[1] == "0") ? Title(100) : (arr[1] == "1") ? Title(-1) : ""; // имя вкладки или домен arr.forEach(dir.append); // ucf_save.dirs: путь для html|имя или домен|папка графики|имя вкладки dir.exists() && dir.isDirectory() || dir.create(dir.DIRECTORY_TYPE, 0o777); // создать папку, если не существует… var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(dir.path); dir.append(fileName); await IOUtils[write](dir.path, fileContent) && showInStatusPanel("√ страница записана: " + fileName.slice(0, 60)); var d = await Downloads.createDownload({ source: "about:blank", target: FileUtils.File(dir.path)}); // Fake download (await Downloads.getList(Downloads.ALL)).add(d); d.refresh(d.succeeded = true); // кнопка Загрузки мигает } messageManager.addMessageListener(msgName, msgListener); addDestructor(() => messageManager.removeMessageListener(msgName, msgListener)); var svc = 'globalThis.Services || ChromeUtils.import("resource://gre/modules/Services.jsm").Services'; var url = "data:;charset=utf8," + encodeURIComponent(`(${func})(${svc});`.replace("%MSG_NAME%", msgName)); (save = () => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false))(); }, // end save listener = e => { var trg = e.target; // Downloads Clicks if (e.button == 1) { if (e.shiftKey) { // СКМ + Shift if ( prefs.getIntPref("permissions.default.image", 1) == 1) prefs.setIntPref("permissions.default.image", 2), trg.style.filter = "hue-rotate(180deg) brightness(95%)" else prefs.setIntPref("permissions.default.image", 1), trg.style.filter = ""; BrowserReload(); } else // СКМ Click saveSelectionToTxt(); // сохранить .txt } else if (e.button == 2) { if (e.shiftKey) Downloads.getSystemDownloadsDirectory().then(path => FileUtils.File(path).launch(), Cu.reportError) // Обзор папки «Загрузки» else // ПКМ Click save(); // Single HTML } }, listener_pui = e => { // PanelUI-menu Clicks if (e.button == 1) e.shiftKey // middle ? null : close() else if (e.button == 2) if (e.altKey) return else event.stopPropagation(), window.minimize(); }, // end Clicks keydown_win = e => { // нажатие клавиш if (!(e.keyCode == 83 && e.shiftKey && e.altKey)) return; var singlesave = document.getElementById("_531906d3-e22f-4a6c-a102-8057b88a1a63_-browser-action"); // SingleSave singlesave ? singlesave.click() : save(); // имитировать клик по кнопке, используя её ID }, {prefs, dirsvc} = Services, tmax = btn.tooltipText.split("\n")[0].length, dw; btn.setAttribute("context", "event.stopPropagation()"); prefs.setBoolPref("browser.download.autohideButton", false); // не скрывать кнопку Загрузки btn.addEventListener("click", listener), pui.addEventListener("click", listener_pui); window.addEventListener("keydown", keydown_win); var ucf = window.ucf_custom_script_win || window.ucf_custom_script_all_win; ucf[id] = {destructor() { btn.removeEventListener("click", listener), pui.removeEventListener("click", listener_pui); window.removeEventListener("keydown", keydown_win); }}; ucf.unloadlisteners.push(id); })("downloads-button-click-listener", ({io, focus}) => { var resolveURL = function (url, base) { try { return io.newURI(url, null, io.newURI(base)).spec; } catch {} }, getSelWin = function (w) { if (w.getSelection().toString()) return w; for (var i = 0, f, r; f = w.frames[i]; i++) { try { if (r = getSelWin(f)) return r; } catch(e) {} } }, encodeImg = function (src, obj) { var canvas, img, ret = src; if (/^https?:\/\//.test(src)) { canvas = doc.createElement('canvas'); if (!obj || obj.nodeName.toLowerCase() != 'img') { img = doc.createElement('img'); img.src = src; } else img = obj; if (img.complete) try{ canvas.width = img.width; canvas.height = img.height; canvas.getContext('2d').drawImage(img, 0, 0); ret = canvas.toDataURL((/\.jpe?g/i.test(src) ? 'image/jpeg' : 'image/png')); } catch (e) {}; if (img != obj) img.src = 'about:blank'; }; return ret; }, toSrc = function (obj) { var strToSrc = function (str) { var chr, ret = '', i = 0, meta = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '\x22' : '\\\x22', '\\': '\\\\'}; while (chr = str.charAt(i++)) { ret += meta[chr] || chr; }; return '\x22' + ret + '\x22'; }, arrToSrc = function (arr) { var ret = []; for (var i = 0; i < arr.length; i++) { ret[i] = toSrc(arr[i]) || 'null'; }; return '[' + ret.join(',') + ']'; }, objToSrc = function (obj) { var val, ret = []; for (var prop in obj) { if (obj.hasOwnProperty(prop) && (val = toSrc(obj[prop]))) ret.push(strToSrc(prop) + ': ' + val); }; return '{' + ret.join(',') + '}'; }; switch (Object.prototype.toString.call(obj).slice(8, -1)) { case 'Array': return arrToSrc(obj); case 'Boolean': case 'Function': case 'RegExp': return obj.toString(); case 'Date': return 'new Date(' + obj.getTime() + ')'; case 'Math': return 'Math'; case 'Number': return isFinite(obj) ? String(obj) : 'null'; case 'Object': return objToSrc(obj); case 'String': return strToSrc(obj); default: return obj ? (obj.nodeType == 1 && obj.id ? 'document.getElementById(' + strToSrc(obj.id) + ')' : '{}') : 'null'; } }, mainWin = {}; focus.getFocusedElementForWindow(content, true, mainWin); mainWin = mainWin.value; var selWin = getSelWin(mainWin), win = selWin || mainWin, doc = win.document, loc = win.location; var ele, pEle, clone, reUrl = /(url\(\x22)(.+?)(\x22\))/g; if (selWin) { var rng = win.getSelection().getRangeAt(0); pEle = rng.commonAncestorContainer; ele = rng.cloneContents(); } else { pEle = doc.documentElement; ele = (doc.body || doc.getElementsByTagName('body')[0]).cloneNode(true); }; while (pEle) { if (pEle.nodeType == 1) { clone = pEle.cloneNode(false); clone.appendChild(ele); ele = clone; }; pEle = pEle.parentNode }; var sel = doc.createElement('div'); sel.appendChild(ele); for (var el, all = sel.getElementsByTagName('*'), i = all.length; i--;) { el = all[i]; if (el.style && el.style.backgroundImage) el.style.backgroundImage = el.style.backgroundImage.replace(reUrl, function (a, prev, url, next) { if (!/^[a-z]+:/.test(url)) url = resolveURL(url, loc.href); return prev + encodeImg(url) + next; }); switch (el.nodeName.toLowerCase()) { case 'link': case 'style': case 'script': el.parentNode.removeChild(el); break; case 'a': case 'area': if (el.hasAttribute('href') && el.getAttribute('href').charAt(0) != '#') el.href = el.href; break; case 'img': case 'input': if (el.hasAttribute('src')) el.src = encodeImg(el.src, el); break; case 'audio': case 'video': case 'embed': case 'frame': case 'iframe': if (el.hasAttribute('src')) el.src = el.src; break; case 'object': if (el.hasAttribute('data')) el.data = el.data; break; case 'form': if (el.hasAttribute('action')) el.action = el.action; break; } }; var head = ele.insertBefore(doc.createElement('head'), ele.firstChild), meta = doc.createElement('meta'), sheets = doc.styleSheets, title = doc.getElementsByTagName('title')[0]; meta.httpEquiv = 'content-type'; meta.content = 'text/html; charset=utf-8'; head.appendChild(meta); if (title) head.appendChild(title.cloneNode(true)); head.copyScript = function (unsafeWin) { if ('$' in unsafeWin) return; var f = doc.createElement('iframe'); f.src = 'about:blank'; f.setAttribute('style', 'position:fixed;left:0;top:0;visibility:hidden;width:0;height:0;'); doc.documentElement.appendChild(f); var str, script = doc.createElement('script'); script.type = 'text/javascript'; for (var name in unsafeWin) { if (name in f.contentWindow || !/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)) continue; try { str = toSrc(unsafeWin[name]); if (!/\{\s*\[native code\]\s*\}/.test(str)) { script.appendChild(doc.createTextNode('var ' + name + ' = ' + str.replace(/<\/(script>)/ig, '<\\/$1') + ';\n')); } } catch (e) {}; }; f.parentNode.removeChild(f); if (script.childNodes.length) this.nextSibling.appendChild(script); }; head.copyScript(win.wrappedJSObject || win); head.copyStyle = function (s) { if (!s) return; var style = doc.createElement('style'); style.type = 'text/css'; if (s.media && s.media.mediaText) style.media = s.media.mediaText; try { for (var i = 0, rule; rule = s.cssRules[i]; i++) { if (rule.type != 3) { if((!rule.selectorText || rule.selectorText.indexOf(':') != -1) || (!sel.querySelector || sel.querySelector(rule.selectorText))) { var css = !rule.cssText ? '' : rule.cssText.replace(reUrl, function (a, prev, url, next) { if (!/^[a-z]+:/.test(url)) url = resolveURL(url, s.href || loc.href); if(rule.type == 1 && rule.style && rule.style.backgroundImage) url = encodeImg(url); return prev + url + next; }); style.appendChild(doc.createTextNode(css + '\n')); } } else { this.copyStyle(rule.styleSheet); } } } catch(e) { if (s.ownerNode) style = s.ownerNode.cloneNode(false); }; this.appendChild(style); }; for (var j = 0; j < sheets.length; j++) head.copyStyle(sheets[j]); head.appendChild(doc.createTextNode('\n')); var doctype = '', dt = doc.doctype; if (dt && dt.name) { doctype += '<!DOCTYPE ' + dt.name; if (dt.publicId) doctype += ' PUBLIC \x22' + dt.publicId + '\x22'; if (dt.systemId) doctype += ' \x22' + dt.systemId + '\x22'; doctype += '>\n'; }; var fileName = selWin ? win.getSelection().toString() : (title && title.text ? title.text : loc.pathname.split('/').pop()); fileName = fileName.replace(/[:\\\/<>?*|"]+/g, '_').replace(/\s+/g, ' ').slice(0, 100).trim(); fileName += "_" + new Date().toLocaleDateString('ru', {day: 'numeric', month: 'numeric', year: '2-digit'}) +'-'+ new Date().toLocaleTimeString().replace(/:/g, "։"); if (!/\.html?$/.test(fileName)) fileName += '.html'; sendAsyncMessage("%MSG_NAME%", [doctype + sel.innerHTML +'\n<a href='+ (loc.protocol != 'data:' ? loc.href : 'data:uri') +'><small><blockquote>источник: '+ new Date().toLocaleString("ru") +'</blockquote></small></a>', fileName]); }); // END hookClicks
#PanelUI-menu-button:not(:hover) .toolbarbutton-icon { list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMA AA7EAAAOxAGVKw4bAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAKJQTFRF AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoBElOgAAADZ0 Uk5TAAEEBQYKCw0TFBYXISQuMDIzNEBBREZLWFlnaGl3eXx+f4uMjZCRnJ2foKipq6yztbm6u76/ C39FMwAAALlJREFUOI3VkkcSwjAMRRXTIfRO6L2XxO/+V2PBDGBD4i1opT9PY6t8kT8K1TV1V5na G9F7130mnlFQBd1+ybaGqvlEAFHjWR7CwOrBG8O1/Mj9C0w9q0DUHM4lEZHCEVapzzkyG9jnRLJb 2OU+uUj+AOu0WsKp+I0//p7N4OJ/5yKVG0BUi+MiLQ26Fc+lqUF34nklBIjqcdzVZP6YPKZrUWqR vGrnsYb2uQOTOw1jW65nW85p2t+OO5s+HGmx0zpjAAAAAElFTkSuQmCC") !important; -moz-image-region: auto!important; background-color: #f8cccd !important; } /* // Значок Крестик <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"><g fill="none" stroke="#000" stroke-width="3" opacity=".78"><path d="M1 1l46 46M1 47L47 1"/></g></svg> */
Отсутствует
Dobrov
#PanelUI-menu-button:not(:hover) { list-style-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16'><g><rect x='0' y='0' width='16' height='16' rx='3' ry='3' style='fill:rgb(248, 204, 205);'/><path d='M 3,3 13,13 M 3,13 13,3' style='fill:none;stroke:black;stroke-width:2;stroke-linecap:round;'/></g></svg>") !important; -moz-image-region: auto !important; }
Отредактировано Vitaliy V. (23-05-2021 10:14:29)
Отсутствует
нет полезного стиля: Вкладки снизу. Может стоит его добавить?
Он противоречит стилю для меню
Отредактировано Vitaliy V. (23-05-2021 11:02:33)
Отсутствует
Vitaliy V.
Спасибо. Еще нарисовалось:
В #webextpanels-window, #webext-panels-stack, #webext-panels-browser
при запуске браузера с открытой панелью TST и темной темой, мигает белым. Можно это как то предотвратить? Хоть скриптом, если стилем не получится.
Пробовал к тем id что выше применять разные стили, но эффекта нет.
Отсутствует
нет полезного стиля: Вкладки снизу. Может стоит его добавить?
Он противоречит стилю для меню
Только что проверил на IceWM всё нормально. На работе на kwin тоже не было визуальных проблем со стилем Вкладки снизу.
Вот только стиль меню я не подключал. Тема и фон окна системные.
Отредактировано Dobrov (23-05-2021 12:07:33)
Отсутствует
при запуске браузера с открытой панелью TST и темной темой, мигает белым
Похоже это проблема только самого TST
@-moz-document regexp("moz-extension:\/\/.+\/sidebar\/sidebar\.html.*") { :root, #background { background-color: var(--browser-background, var(--tabbar-bg, #1c1b22)) !important; } }
Вот только стиль меню я не подключал
Тогда о каком git-архиве ты толкуешь если user_chrome_files, то там не нужны лишние стили которые мало как относятся к добавленным панелям.
Я думал речь о full_theme
Отсутствует
Тогда о каком git-архиве ты толкуешь если user_chrome_files, то там не нужны лишние стили которые мало как относятся к добавленным панелям.
Я думал речь о full_theme
Лля меня вкладки вверху непривычны - все мои браузеры я настраивал по-другому.
Я просмотрел архив VitaliyVstyle.github.io-master и не нашёл там полезного стиля - вкладки снизу:
@-moz-document url("chrome://browser/content/browser.xhtml") { *|*:root { /* вкладки снизу: стиль плюс скрипты https://forum.mozilla-russia.org/viewtopic.php?pid=784310#p784310 */ --v-toolbar-menubar-height: 28px; /* =28px высота панели меню, только чётные числа не меньше 20px для macos = 0 */ --v-toolbar-menubar-height-content: url("data:image/svg+xml,<svg width='28' height='56' xmlns='http://www.w3.org/2000/svg'><rect x='0' y='0' width='100%' height='100%' style='fill:transparent;'/></svg>"); /* =56 height='2 * --v-toolbar-menubar-height' */ } #navigator-toolbox { border-block: none !important; box-shadow: none !important; padding-top: 0 !important; -moz-appearance: none !important; appearance: none !important; } *|*:root:not([inFullscreen])[tabsintitlebar] #navigator-toolbox { position: relative !important; } #navigator-toolbox > toolbar { -moz-box-ordinal-group: 10 !important; } #navigator-toolbox > #nav-bar { margin-block: 0 !important; box-shadow: none !important; -moz-box-ordinal-group: 0 !important; padding-inline: 0 !important; } *|*:root:not([inFullscreen]) #navigator-toolbox > #nav-bar { margin-top: var(--v-toolbar-menubar-height) !important; } #navigator-toolbox > #PersonalToolbar { -moz-box-ordinal-group: 1 !important; } *|*:root:not([inFullscreen])[tabsintitlebar] > *|body::before { content: var(--v-toolbar-menubar-height-content) !important; display: -moz-box !important; -moz-box-flex: 0 !important; -moz-box-orient: vertical !important; -moz-box-pack: start !important; -moz-box-align: stretch !important; -moz-box-ordinal-group: 0 !important; margin-bottom: calc(-2 * var(--v-toolbar-menubar-height)) !important; box-sizing: content-box !important; } *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] > *|body::before { -moz-appearance: -moz-window-titlebar !important; appearance: -moz-window-titlebar !important; } *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="maximized"] > *|body::before { -moz-appearance: -moz-window-titlebar-maximized !important; appearance: -moz-window-titlebar-maximized !important; } *|*:root:not([inFullscreen])[tabsintitlebar]:-moz-lwtheme > *|body::before { visibility: hidden !important; } #navigator-toolbox > #titlebar { -moz-appearance: none !important; appearance: none !important; -moz-box-ordinal-group: 100 !important; position: static !important; } #toolbar-menubar { padding-block: 0 !important; margin-block: 0 !important; border: none !important; background: none !important; --toolbarbutton-outer-padding: 0px !important; --toolbarbutton-inner-padding: calc((var(--v-toolbar-menubar-height) - 16px) / 2) !important; -moz-appearance: none !important; appearance: none !important; } *|*:root:not(:is([inFullscreen],[chromehidden~="menubar"])) #toolbar-menubar { position: absolute !important; top: 0 !important; left: 0 !important; right: 0 !important; display: flex !important; flex-wrap: nowrap !important; flex-direction: row !important; align-items: stretch !important; justify-content: flex-start !important; min-height: 0 !important; height: var(--v-toolbar-menubar-height) !important; overflow: hidden !important; } #toolbar-menubar *|*.toolbarbutton-badge { margin-inline-end: calc(-1 * (var(--toolbarbutton-outer-padding) + var(--toolbarbutton-inner-padding))) !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(toolbaritem,toolbarbutton) { align-self: center !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(#menubar-items,#wrapper-menubar-items,.titlebar-buttonbox-container) { align-self: flex-start !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > * { padding-block: 0 !important; margin-block: 0 !important; } *|*:root:not([inFullscreen]) #toolbar-menubar[autohide="true"][inactive="true"]:not([customizing="true"]) > *:not(.titlebar-buttonbox-container) { opacity: 0 !important; pointer-events: none !important; } *|*:root[inFullscreen] #toolbar-menubar { visibility: collapse !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(*[style*="-moz-box-ordinal-group: 1000;"],.titlebar-buttonbox-container) { order: 1000 !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(toolbarspring,spacer,[id^="wrapper-customizableui-special-spring"]) { flex-grow: 1 !important; } *|*:root:not([inFullscreen]) #toolbar-menubar > :is(#search-container,#wrapper-search-container) { flex-grow: 100 !important; } #toolbar-menubar #search-container { padding-block: 0 !important; } #toolbar-menubar #searchbar { min-height: calc(var(--v-toolbar-menubar-height) - 2px) !important; } #TabsToolbar { -moz-appearance: none !important; appearance: none !important; padding-block: 0 !important; margin-block: 0 !important; box-shadow: 0 -1px 0 var(--tabs-border-color, rgba(0,0,0,.3)) inset !important; position: static !important; background-color: var(--toolbar-bgcolor, -moz-dialog) !important; background-image: var(--toolbar-bgimage, none) !important; color: var(--toolbar-color, -moz-dialogtext) !important; --lwt-toolbarbutton-icon-fill: inherit !important; } #TabsToolbar #tabbrowser-tabs { padding-bottom: 0 !important; margin-bottom: 0 !important; } #TabsToolbar .tabbrowser-tab { background-color: transparent !important; border-top: none !important; } #TabsToolbar > .toolbar-items { padding-top: 0 !important; margin-top: 0 !important; } #TabsToolbar .tab-background { border-top-style: solid !important; } #TabsToolbar .titlebar-buttonbox-container, #navigator-toolbox::after, #TabsToolbar::after, #TabsToolbar .titlebar-spacer:is([type="pre-tabs"],[type="post-tabs"]) { display: none !important; } *|*:root[inFullscreen] #window-controls { position: absolute !important; display: flex !important; align-items: start !important; top: 0 !important; left: auto !important; right: 0 !important; margin: 0 !important; } *|*:root[inFullscreen] #window-controls:-moz-locale-dir(rtl) { left: 0 !important; right: auto !important; } *|*:root[inFullscreen] #navigator-toolbox > #nav-bar { padding-inline-end: var(--v-titlebar-buttonbox-container-width, 108px) !important; } *|*:root:not([inFullscreen])[v_menubar_autohide="true"] #navigator-toolbox > #nav-bar { margin-top: 0 !important; padding-inline-end: var(--v-titlebar-buttonbox-container-width, 108px) !important; } *|*:root:not([inFullscreen])[v_menubar_autohide="true"] #toolbar-menubar { pointer-events: none !important; } *|*:root:not([inFullscreen])[v_menubar_autohide="true"] #toolbar-menubar .titlebar-buttonbox-container { pointer-events: auto !important; } @media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) { *|*:root[sizemode="normal"] #TabsToolbar { border-inline: 1px solid hsla(240,5%,5%,0.3) !important; background-clip: padding-box !important; } @media (-moz-windows-classic: 0) { *|*:root:not([inFullscreen])[v_menubar_autohide="true"][tabsintitlebar][sizemode="normal"] #navigator-toolbox > #nav-bar { margin-top: 1px !important; } *|*:root:not([inFullscreen])[sizemode="normal"] #toolbar-menubar:not([autohide="true"]) > #menubar-items { margin-top: 1px !important; } } } @media (-moz-windows-classic) { *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] #navigator-toolbox::before { content: "" !important; display: -moz-box !important; height: 4px !important; -moz-box-ordinal-group: 0 !important; visibility: visible !important; } *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"]:-moz-lwtheme #navigator-toolbox::before { background-image: linear-gradient(to bottom, ThreeDLightShadow 0, ThreeDLightShadow 1px, ThreeDHighlight 1px, ThreeDHighlight 2px, ActiveBorder 2px, ActiveBorder 4px, transparent 4px) !important; } *|*:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] #toolbar-menubar { margin-top: 4px !important; } } *|*:root[data-l10n-id="browser-main-window-mac"] { --v-toolbar-menubar-height: 0px !important; --v-toolbar-menubar-height-content: none !important; } *|*:root:not([inFullscreen])[tabsintitlebar][data-l10n-id="browser-main-window-mac"] #nav-bar { margin-inline-start: calc(var(--toolbarbutton-outer-padding, 2px) + var(--v-titlebar-button-horizont-padding, 6px) * 6 + var(--v-titlebar-button-image-width, 12px) * 3) !important; } *|*:root:not([inFullscreen])[tabsintitlebar][data-l10n-id="browser-main-window-mac"] #TabsToolbar .titlebar-buttonbox-container { visibility: visible !important; display: -moz-box !important; position: absolute !important; display: flex !important; top: 0 !important; } }
Отсутствует
архив VitaliyVstyle.github.io-master
Ясно, интересная формулировка, добавить в архив которого изначально нет.
Да можно добавить в репозиторий стили скрипты, а смысл, всё равно если что отвалится все пишут на этот форум, а мне следить за тем чем не пользуюсь зачем?!
Отсутствует
Сделайте пожалуйста если это возможно что бы в этом скрипте menupopup был бы только на зведочке и нопке appMenu
menupopup? нет невозможно
(this.mouseoveropentoolbarbutton = { delay: 350, get buttonID() { delete this.buttonID; return this.buttonID = new Map([ ["PanelUI-menu-button", "appMenu-popup"], ["star-button", "editBookmarkPanel"], ]); }, get timer() { delete this.timer; return this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); }, init(that) { var arrayelem = this.arrayelem = document.querySelectorAll(` #star-button, #PanelUI-menu-button `); for (let elem of arrayelem) elem.addEventListener("mouseover", this); that.unloadlisteners.push("mouseoveropentoolbarbutton"); }, handleEvent(event, node = event.target) { this.openPopup(node, this.buttonID.get(node.id)); }, openPopup(node, popupID) { this.timer.cancel(); this.timer.initWithCallback(() => { if (node.open) return; if (this.curbut?.open) { this.curbut.menupopup ? this.curbut.menupopup.hidePopup() : document.querySelector(`panel[viewId='${this.curid}'], panel[id='${this.curid}'], menupopup[id='${this.curid}']`)?.hidePopup(); } else document.querySelector(":is(menupopup,panel)[panelopen='true'], toolbarbutton[open='true'] > menupopup")?.hidePopup(); this.curbut = node; this.curid = popupID; node.click(); }, this.delay, Ci.nsITimer.TYPE_ONE_SHOT); node.addEventListener("mouseleave", () => { this.timer.cancel(); }, { once: true }); }, destructor() { for (let elem of this.arrayelem) elem.removeEventListener("mouseover", this); }, }).init(this);
Отсутствует
Vitaliy V.
Спасибо.
А как скрыть пункты контекстного меню
#context-viewimage, /* Open Image in New Tab */
#context-copyimage, /* Copy Image Link */
#context-sep-setbackground, /************ Separator ************/
для контекста "страница"? Такое вообще возможно?
Также есть еще несоответствия контекста, например при выделенном тексте и ПКМ по ссылке:
Отредактировано _zt (24-05-2021 18:54:28)
Отсутствует
Отсутствует
Как вернуть этот серый фон под кнопками поисковых систем?
Так можно
#PopupSearchAutoComplete .search-panel-current-engine, #PopupSearchAutoComplete .search-one-offs { background-color: hsla(0,0%,80%,.35) !important; }
Отсутствует
Как вернуть этот серый фон под кнопками поисковых систем?
На Firefox 87 не работает. Добавлял и в custom_style_agent.css и в custom_style_user.css…
Отсутствует
Так можно
Восторг! В 78 ESR работает! Спасибо!
а вот такие вертикальные черточки-разделители (как в 68-м) между кнопками в рамках userChrome.css уже нереализуемо?
Отредактировано classic81 (25-05-2021 00:30:50)
Отсутствует
Dobrov
Я не спрашивал "Как вернуть этот серый фон под кнопками поисковых систем?"
Мне это не нужно, я использую прозрачный фон выпадающего списка адресной и поисковой строк авторства Vitaliy V. в связке с его стилем V2 для 71+
#urlbar > .urlbarView, #urlbar-results, panel[type="autocomplete-richlistbox"], #PopupSearchAutoComplete { --arrowpanel-dimmed: rgba(255,255,255,0.1) !important; --arrowpanel-dimmed-further: Highlight !important; --arrowpanel-dimmed-even-further: transparent !important; --panel-separator-color: rgba(250,250,255,0.3) !important; --chrome-content-separator-color: rgba(250,250,255,0.3) !important; --arrowpanel-border-color: rgba(250,250,255,0.3) !important; --arrowpanel-background: rgba(10,10,15,0.8) !important; --autocomplete-popup-background: rgba(10,10,15,0.8) !important; --autocomplete-popup-color: rgb(240,240,245) !important; --arrowpanel-color: rgb(240,240,245) !important; --panel-disabled-color: rgb(190,190,195) !important; --urlbar-popup-url-color: LightSkyBlue !important; --urlbar-popup-action-color: Aquamarine !important; /* border: 1px solid var(--chrome-content-separator-color) !important; */ } #urlbar.megabar { background-color: rgba(10,10,15,0.8) !important; color: rgb(240,240,245) !important; } panel[type="autocomplete-richlistbox"] { background: var(--autocomplete-popup-background) !important; color: var(--autocomplete-popup-color) !important; border-color: var(--arrowpanel-border-color) !important; } panel[type="autocomplete-richlistbox"] > richlistbox { background: transparent !important; color: inherit !important; margin: 0 !important; } panel#PopupAutoComplete > richlistbox > richlistitem[originaltype="loginsFooter"] { color: var(--autocomplete-popup-color) !important; border-top-color: var(--chrome-content-separator-color) !important; background-color: var(--arrowpanel-dimmed) !important; } panel#PopupAutoComplete > richlistbox > richlistitem[originaltype="loginsFooter"]:hover, panel#PopupAutoComplete > richlistbox > richlistitem[originaltype="loginsFooter"][selected] { background-color: Highlight !important; color: HighlightText !important; }
На Firefox 87 не работает
А в 90-ой проверял?
а вот такие вертикальные черточки-разделители (как в 68-м) между кнопками в рамках userChrome.css уже нереализуемо?
Скорее всего реализуемо, но не с моими навыками.
Отсутствует
А как скрыть пункты контекстного меню
https://forum.mozilla-russia.org/viewto … 08#p790608
Также есть еще несоответствия контекста, например при выделенном тексте и ПКМ по ссылке:
Как было так и должно быть, то что два сепаратора, у вас же многие пункты скрыты возможно из-за этого, или из-за добавленных пунктов я писал уже об этом
как в ContextMenuOpenWith скрыть пункты/подменю меню страницы в полях ввода?
//arr[0].hidden = link;
arr[0].hidden = link || gContextMenu.onTextInput;
//this.menupage.hidden = link;
this.menupage.hidden = link || gContextMenu.onTextInput;
а вот такие вертикальные черточки-разделители (как в 68-м) между кнопками
почти так можно
.searchbar-engine-one-off-item:not(#urlbar-anon-search-settings-compact) { background: linear-gradient(transparent 15%, var(--panel-separator-color) 15%, var(--panel-separator-color) 85%, transparent 85%); background-size: 1px auto; background-repeat: no-repeat; background-position: right center; background-clip: padding-box; color: var(--panel-disabled-color); } .searchbar-engine-one-off-item:not(#urlbar-anon-search-settings-compact), .search-panel-one-offs-header { border-bottom: 1px solid var(--panel-separator-color); } .search-panel-one-offs { height: auto !important; } .search-one-offs .searchbar-separator { display: none; } #PopupSearchAutoComplete { padding-bottom: 0 !important; } .search-setting-button { border-top: none !important; } #urlbar .searchbar-engine-one-off-item { margin-inline-end: 0 !important; } #urlbar .search-one-offs { padding-bottom: 0 !important; } #urlbar .search-panel-header { display: none !important; } #urlbar .search-one-offs { padding-block: 0 !important; }
Отредактировано Vitaliy V. (25-05-2021 01:00:32)
Отсутствует
https://forum.mozilla-russia.org/viewto … 08#p790608
Это я видел, но это не то. Я подумал, что через скрипт можно было бы переназначить контексты пунктам.
так и должно быть
Так не было бы, если бы контекст выделенного не накладывался на другие контексты. И мне не понятен смысл такого наложения.
|| gContextMenu.onTextInput;
Спасибо, -1 еще один лишний пункт.
Отсутствует
почти так можно
да отлично же! блок вновь стал eye-friendly. Огромное Вам спасибо!
но вот смотрю я на эту кучу кода ради такой мелочи и офигиваю от костыльности. вроде гибкая система и здесь хотя бы есть возможность подстроить под себя, но освоить это простому юзеру...
Отсутствует
Vitaliy V.
После вчерашней правки ContextMenuOpenWith:
Если var submenu = true; - подменю появляется.
Если var submenu = false; - пункты меню не отображаются. Помогает
if (!submenu) { // if (prelabpage) _prelabpage = "Открыть страницу в "; // if (prelablink) _prelablink = "Открыть ссылку в "; }
Спасибо.
Отсутствует
переназначить контексты пунктам.
Чего переназначить, чтобы как раньше был ещё один пункт "Открыть фоновое изображение"?
или совсем скрыть для контекста "страница", только понятия не имею что это.
Раньше пункты #context-viewimage, #context-copyimage отображались только для тега <img>
Короче считаю это делать не стоит.
кучу кода ради такой мелочи
Там много лишнего для 78, кроме того этот код ещё и для панели адреса.
После вчерашней правки...Если var submenu = false; - пункты меню не отображаются. Помогает
Что, какой правки моей? Я там только исправил, где затесались две одинаковые строки
Пункты отображаются, смотрите есть ли вначале эти, и другие параметры, небось со старого кода их заменили не глядя
var prelabpage = true; // Добавить вначале "Открыть страницу в ";
var prelablink = true; // Добавить вначале "Открыть ссылку в ";
Отредактировано Vitaliy V. (25-05-2021 11:41:06)
Отсутствует
Vitaliy V.
Пункты отображаются, смотрите есть ли вначале эти, и другие параметры, небось со старого кода их заменили не глядя
Да, моя невнимательность. Sorry!
Отсутствует
Чего переназначить, чтобы как раньше был ещё один пункт "Открыть фоновое изображение"?
От этого стандартный пункт никуда не денется.
или совсем скрыть для контекста "страница"
Да. Я об этом выше писал.
только понятия не имею что это
...
Раньше пункты #context-viewimage, #context-copyimage отображались только для тега <img>
Вот и сейчас надо что бы так было. Иначе, в начале контекстного меню страницы, вместо нужных пунктов, никем не используемый мусор.
xrun1
Причем тут он? Там зачем то #frame-sep был, который даже на фреймах не нужен, так как на фреймах зачем то #spell-separator есть.
Отсутствует
_zt
ну так перенесите вниз или скройте раз это мусор для вас
#context-navigation:not([hidden]) ~ :is(#context-viewimage,#context-sep-setbackground), #context-saveimage[hidden] ~ :is(#context-copyimage-contents,#context-copyimage,#context-sendimage) { display: none !important; }
Отсутствует