sibirnik
короткое появление белой вкладки на секунду при запуске любой вкладки(ссылки на сайт)
У меня первый код убирает белый фон при открытии из журнала, закладок, ссылок, топа сайтов, так же при запуске браузера.
вначале тёмный фон, затем на секунду светлый и только потом Speed Dial
Думал поможет, но после установки Speed Dial понял, что это совсем похоже из другой оперы. Разработчику лучше может написать.
Вообще, этих Speed Dial-ов аж четыре поиск на АМО выдает.
Отредактировано sandro79 (30-08-2020 22:29:33)
Отсутствует
Vitaliy V.
А можете ещё выделить названия системных расширений каким-нибудь другим цветом, чтоб их сразу было видно?
Отсутствует
sandro79
этих Speed Dial-ов аж четыре
Больше с добавкой слов. Мало того, я их ранее почти все попробовал и у всех такая проблема. Вообще у меня тема не чёрная(не выдерживают глаза и чёрный и белый -))). )
Разработчику лучше может написать.
Попробую. Вам спасибо.
Отсутствует
ограничить, например, 60 символов (без заголовка), далее перенос на вторую строку (по словам)?
В общем то, описание можно вернуть, если бы длину строк ограничить.
Похоже вам другую версию не для всех добавлю, собственно длина тултипа и так ограничена css
try {(() => { var id = "ucf-eom-button", label = "Настройки расширений", tooltiptext = "Настройки расширений", img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='16' width='16' viewBox='0 0 48 48'><g><rect x='0' y='0' width='48' height='48' rx='3' ry='3' style='fill:rgb(0, 120, 173);'/><path style='opacity:0.25;fill:black;' d='M 24,4.5 18,12 3,23.7 12,32.7 3.9,44.1 7.8,48 H 45 C 46.7,48 48,46.7 48,45 V 26.1 L 34.8,12.9 31.8,12.3 Z'/><path style='fill:white;' d='M 19.88,3 C 16.93,3 14.55,4.662 14.55,6.701 14.63,7.474 15.11,8.438 15.37,8.762 16.59,10.41 16.59,11.44 16.29,12.06 H 6.299 C 4.476,12.06 3,13.53 3,15.35 V 23.68 C 3.625,24 4.65,24 6.299,22.77 6.625,22.52 7.587,22.02 8.363,21.94 10.4,21.94 12.06,24.35 12.06,27.29 12.06,30.24 10.4,32.65 8.363,32.65 7.725,32.63 6.774,32.07 6.299,31.82 4.65,30.59 3.625,30.59 3,30.91 V 41.71 C 3,43.53 4.476,45 6.299,45 H 19.58 C 19.88,44.38 19.88,43.35 18.65,41.71 18.4,41.38 17.91,40.42 17.82,39.65 17.82,37.6 20.23,35.94 23.18,35.94 26.14,35.94 28.55,37.6 28.55,39.65 28.53,40.28 27.97,41.23 27.71,41.71 26.47,43.35 26.47,44.38 26.79,45 H 32.65 C 34.47,45 35.96,43.53 35.96,41.71 V 32.55 C 36.56,32.23 37.59,32.23 39.23,33.47 39.72,33.73 40.68,34.29 41.29,34.29 43.35,34.29 45,31.91 45,28.94 45,25.99 43.35,23.59 41.29,23.59 40.54,23.67 39.58,24.17 39.23,24.41 37.59,25.65 36.56,25.65 35.96,25.33 V 15.35 C 35.96,13.53 34.47,12.06 32.65,12.06 H 23.49 C 23.19,11.44 23.19,10.41 24.41,8.762 24.66,8.287 25.22,7.337 25.23,6.713 25.23,4.662 22.85,3 19.88,3' /></g></svg>", showVersion = true, userPermissions = true, showHidden = true, showDisabled = true, enabledFirst = true, maxChars = 42, blackListSet = new Set([ ]); if (!("AddonManager" in this)) ChromeUtils.defineModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm"); if (!("GlobalManager" in this)) XPCOMUtils.defineLazyGetter(this, "GlobalManager", () => { const { GlobalManager } = ChromeUtils.import("resource://gre/modules/Extension.jsm", null); return GlobalManager; }); var extensionOptionsMenu = { regExp: function(w, s = "") { return new RegExp(String.raw`(?![^\n]{1,${w}}$)([^\n]{1,${w}})${s}\s`, "g"); }, populateMenu: async function(e) { var prevState, popup = e.target, doc = e.view.document; while (popup.hasChildNodes()) popup.firstChild.remove(); var addons = await AddonManager.getAddonsByTypes(["extension"]); var regDesc = this.regExp(maxChars), regPerm = this.regExp(maxChars, ","); addons.filter(a => !(a.iconURL || "").startsWith("resource://search-extensions/")).sort((a, b) => { var ka = (enabledFirst ? a.isActive ? "0" : "1" : "") + a.name.toLowerCase(); var kb = (enabledFirst ? b.isActive ? "0" : "1" : "") + b.name.toLowerCase(); return (ka < kb) ? -1 : 1; }).forEach(addon => { if (!blackListSet.has(addon.id) && (!addon.hidden || showHidden) && (!addon.userDisabled || showDisabled)) { if (showDisabled && enabledFirst && prevState && addon.isActive != prevState) popup.append(doc.createXULElement("menuseparator")); prevState = addon.isActive; let extension = GlobalManager.extensionMap.get(addon.id); let mi = doc.createXULElement("menuitem"), permissions, uuid, props = { label: `${addon.name}${showVersion ? ` ${addon.version}` : ""}`, class: "menuitem-iconic", tooltiptext: `${addon.description ? `${addon.description.replace(regDesc, "$1\n")}\n` : ""}ID: ${addon.id}${addon.isActive && (uuid = extension?.uuid) ? `\nUUID: ${uuid}` : ""}${(userPermissions && (permissions = addon.userPermissions?.permissions)?.length) ? `\n\n${permissions.join(", ").replace(regPerm, "$1,\n")}` : ""}\n${addon.optionsURL ? `\nЛКМ: Настройки` : ""}\nCtrl+ЛКМ: Копировать ID${uuid ? `\nShift+ЛКМ: Копировать UUID` : ""}${addon.creator?.url ? `\nCtrl+Shift+ЛКМ: Автор` : ""}${addon.homepageURL ? `\nСКМ: Домашняя страница` : ""}\nCtrl+СКМ: Просмотр источника\nShift+СКМ: Просмотр источника во вкладке\nПКМ: Включить/Отключить${(!addon.isSystem && !addon.isBuiltin) ? `\nCtrl+ПКМ: Удалить` : ""}`, image: addon.iconURL || img, }; for (let p in props) mi.setAttribute(p, props[p]); mi.addEventListener("click", (e) => { extensionOptionsMenu.handleClick(e); }); mi._Addon = addon; mi._Extension = extension; this.setDisable(mi, addon, 0); popup.append(mi); } }); }, handleClick: function(e) { var win = e.view, mi = e.target; if (!("_Addon" in mi) || !("_Extension" in mi)) return; var addon = mi._Addon, extension = mi._Extension; var hasMdf = e.ctrlKey || e.shiftKey || e.altKey || e.metaKey; switch (e.button) { case 0: if (!hasMdf && addon.optionsURL) this.openAddonOptions(addon, win); else if (e.ctrlKey && e.shiftKey && addon.creator?.url) win.gBrowser.selectedTab = this.addTab(win, addon.creator.url); else if (e.ctrlKey) Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(addon.id); else if (e.shiftKey && extension?.uuid) Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper).copyString(extension.uuid); win.closeMenus(mi); break; case 1: if (!hasMdf && addon.homepageURL) win.gBrowser.selectedTab = this.addTab(win, addon.homepageURL); else if (e.ctrlKey && !e.shiftKey) this.browseDir(addon); else if (e.shiftKey && !e.ctrlKey) this.browseDir(addon, win); win.closeMenus(mi); break; case 2: if (!hasMdf) { let endis = addon.userDisabled ? "enable" : "disable"; if (addon.id == "screenshots@mozilla.org") Services.prefs.setBoolPref("extensions.screenshots.disabled", !addon.userDisabled); addon[endis]({ allowSystemAddons: true }).then(() => { this.setDisable(mi, addon, 1); }, err => { console.error(err); }); } else if (e.ctrlKey && !addon.isSystem && !addon.isBuiltin && Services.prompt.confirm(null, null, `Удалить ${addon.name}?`)) { if (addon.pendingOperations & AddonManager.PENDING_UNINSTALL) addon.cancelUninstall(); else { addon.uninstall(); return; } let cls = mi.classList; cls.remove("ucf-enabling"); cls.remove("ucf-disabling"); cls.add("ucf-uninstalling"); cls.add("ucf-disabled"); } break; } }, setDisable: function(mi, addon, toggling) { var cls = mi.classList; if (toggling) { if (addon.isActive) { if (addon.optionsURL) cls.remove("ucf-notoptions"); cls.remove("ucf-disabled"); cls.remove("ucf-disabling"); cls.add("ucf-enabling"); } else { cls.remove("ucf-enabling"); cls.add("ucf-disabling"); } } if (!addon.isActive) cls.add("ucf-disabled"); if (!addon.optionsURL) cls.add("ucf-notoptions"); if (addon.isSystem) cls.add("ucf-system"); }, openAddonOptions: function(addon, win) { if (!addon.isActive || !addon.optionsURL) return; switch (Number(addon.optionsType)) { case 5: win.BrowserOpenAddonsMgr("addons://detail/" + encodeURIComponent(addon.id) + "/preferences"); break; case 3: win.switchToTabHavingURI(addon.optionsURL, true); break; } }, browseDir: function(addon, win) { try { if (!win) { let file = Services.io.getProtocolHandler("file") .QueryInterface(Ci.nsIFileProtocolHandler) .getFileFromURLSpec(addon.getResourceURI().QueryInterface(Ci.nsIJARURI).JARFile.spec); if (file.exists()) file.launch(); } else win.gBrowser.selectedTab = this.addTab(win, addon.getResourceURI().spec); } catch (e) {} }, addTab: function(win, url, params = {}) { params.triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal(); params.relatedToCurrent = true; return win.gBrowser.addTab(url, params); }, }; CustomizableUI.createWidget({ id: id, type: "custom", label: label, tooltiptext: tooltiptext, localized: false, defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(doc) { var btn = doc.createXULElement("toolbarbutton"), win = doc.defaultView, props = { id: id, label: label, tooltiptext: tooltiptext, type: "menu", class: "toolbarbutton-1 chromeclass-toolbar-additional", }; for (let p in props) btn.setAttribute(p, props[p]); btn.addEventListener("click", (e) => { if (e.button == 1) win.BrowserOpenAddonsMgr("addons://list/extension"); }); var mp = doc.createXULElement("menupopup"); mp.id = `${id}-popup`; mp.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); }); mp.addEventListener("contextmenu", (e) => { e.preventDefault(); e.stopPropagation(); }); mp.addEventListener("popupshowing", (e) => { extensionOptionsMenu.populateMenu(e); }); btn.append(mp); var btnstyle = "data:text/css;charset=utf-8," + encodeURIComponent(` #${id} { list-style-image: url("${img}") !important; } #${id}-popup menuitem::after { display: -moz-box !important; -moz-box-align: center !important; -moz-box-pack: center !important; font-style: normal !important; height: 20px !important; width: 20px !important; line-height: 20px !important; font-size: 20px !important; overflow: hidden !important; } #${id}-popup menuitem:not(.ucf-disabled)::after, #${id}-popup menuitem.ucf-enabling::after { content: "\\2611" !important; color: #0074e8 !important; } #${id}-popup menuitem.ucf-disabled::after, #${id}-popup menuitem.ucf-disabling::after { content: "\\2610" !important; color: #cccccc !important; } #${id}-popup menuitem.ucf-enabling::after { color: #cccccc !important; } #${id}-popup menuitem.ucf-uninstalling::after { content: "\\0021" !important; } #${id}-popup menuitem.ucf-notoptions, #${id}-popup menuitem.ucf-notoptions > * { color: gray !important; } #${id}-popup menuitem.ucf-disabled, #${id}-popup menuitem.ucf-disabled > * { color: gray !important; font-style: italic !important; } #${id}-popup menuitem.ucf-system > * { text-decoration: underline !important; text-decoration-style: dotted !important; } `); try { win.windowUtils.loadSheetUsingURIString(btnstyle, win.windowUtils.USER_SHEET); } catch (e) {} return btn; }, }); })();} catch (e) {}
И как blackListSet заполнять правильно?
Как и раньше массив строк, но они преобразуются в коллекцию Set
blackListSet = new Set([
"строка1", "строка2"
]);
можно ваш скрипт поместить в отдельный файл, а не в общий custom_script.js? На мой взгляд так удобнее их искать, отключать, подключать...
ну да
(() => { var loadscript = name => { try { Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, globalThis, "UTF-8"); } catch(e) {} }; loadscript("my_script.js"); // и т. д. })();
А можете ещё выделить названия системных расширений каким-нибудь другим цветом, чтоб их сразу было видно?
может подчеркивание, впрочем измените как будет угодно, добавил класс .ucf-system
Отредактировано Vitaliy V. (31-08-2020 09:48:58)
Отсутствует
Xvost пишетТеперь: нужно заменить текст у определённой папки на иконку. Я использую код:
Замените display на list-style-image
Если не поможет, то не знаю где ещё может быть ошибка, и вообще возможно ли такое. Может лучше иконку взять в .ico вместо .bmp
Благодарствую, но не работает. Или в корне не то, или же заменить текст в названии папки на панели закладок на картинку нельзя в принципе.
Или можно? Народ, кто в курсе?
Отсутствует
Vitaliy V.
Спасибо. Все ОК.
Xvost
К чему такие сложности, может просто поменять иконки?
Тогда вдумчиво разбираем ( оригинал от Vitaliy V. ищите выше) и берем только нужное.
Отсутствует
ну да
Спасибо!
может подчеркивание, впрочем измените как будет угодно, добавил класс .ucf-system
Про подчёркивание не подумал, согласен, на мой взгляд так тоже лучше. Спасибо.
Отсутствует
После последнего обновления Firefox в контекстном меню табов пункты "Закрыть вкладки справа" и т.п. объединились в группу "Закрыть несколько вкладок". Может быть кто подскажет как избавиться от этой вложенности и вернуть как было раньше. Или хотя бы как перенести один пункт "Закрыть вкладки справа" на уровень выше (как скрыть всю группу я разобрался).
Тоже интересуюсь этим вопросом.
Можно ли для этих двух пунктов избавиться от вложенности (перенести их в "корень" рядом с остальными пунктами)?
Отсутствует
Vitaliy V.
Еще раз благодарю за стиль "порядок панелей: закладки-вкладки-навигация".
Из неожиданного: панель меню появилось в окнах расширений, где её раньше не было. Полагаю, это незапланировано, но лично для меня плюс: позволило запустить браузерный инспектор там, где штатно не получалось.
меня всё устраивает, сообщаю на случай, если вдруг для кого стиль будет нужен, а панель меню повсюду - нет.
Но есть вопрос:
Как, не меняя ориентации тулбара, поместить на эту панель кнопку, чтобы она липла к правой стороне?
++
А еще чуть покосился стиль панели поиска на странице. Но это точно не после нового стиля, а последствия перехода на 78.
/* FindBar */ findbar { -moz-box-ordinal-group: 0 !important; } findbar .findbar-container { direction: rtl !important; } findbar .found-matches { direction: ltr !important; } findbar .findbar-textbox { direction: rtl !important; min-width: 400px !important; } :-moz-any(.browserContainer,#viewSource) :-moz-any(findbar,#FindToolbar) { margin-top: -1px !important; box-shadow: unset !important; border: 1px solid #e1e1e2 !important; border-top: 0px solid transparent !important; border-radius: 0 0 3px 3px; transition-property: margin-top, opacity, visibility !important; background-image: unset !important; background-color: rgb(249,249,250) !important; background-image: none !important; }
Отредактировано razoo (01-09-2020 08:22:47)
Отсутствует
Полагаю, это незапланировано, но лично для меня плюс: позволило запустить браузерный инспектор там, где штатно не получалось.
Да это не проверял, исправил, а насчет инспектора в нём есть кнопка выбрать iframe в качестве текущего целевого документа...
Как, не меняя ориентации тулбара, поместить на эту панель кнопку, чтобы она липла к правой стороне?
Ну собственно и без стиля её просто так не сделать.
попробуйте как-то так, добавить в конце стиля перед последней скобкой }
*|*:root:not([inFullscreen]) #toolbar-menubar > :is(spacer[style*="-moz-box-ordinal-group: 1000;"],.toolbarbutton-1) { order: 100 !important; }
стиль панели поиска на странице.
может такой попробуйте https://forum.mozilla-russia.org/viewto … 86#p782586
Отсутствует
Vitaliy V.
Обнаружил проблемы на youtube в скрипте для тултипов, сейчас обновил его, частично решилось, но не полностью.
До обновления: при первом наведении на заголовок миниатюры - ничего не показывал, второе наведение - ссылка, третье наведение - ссылка и заголовок.
После обновления: при первом наведении на заголовок миниатюры показывает только ссылку, при втором - ссылку и заголовок.
Отсутствует
_zt
Это на главной youtube? У меня сразу отображается ссылка + текст. Может у вас Imagus опять мешает, не?
Отсутствует
Vitaliy V.
Да, опять Imagus, рубордовский фильтр O_youtube-link-thumb.
Я как то не обратил внимание на рамку. Вопрос снимается.
На toolbarbutton#undoclosedtabs_button-browser-action (это кнопка расширения) можно действие по пкм повесить - "Восстановить последнюю закрытую вкладку"?
Что б от последнего uc скрипта избавится и от лишней кнопки заодно.
// Undo Close Tab button script for Firefox 60+ by Aris // (function() { try { Components.utils.import("resource:///modules/CustomizableUI.jsm"); var {Services} = Components.utils.import("resource://gre/modules/Services.jsm", {}); var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService); var appversion = parseInt(Services.appinfo.version); var button_label = "Восстановить вкладку"; CustomizableUI.createWidget({ id: "uc_undo_closetab_button", // button id defaultArea: CustomizableUI.AREA_NAVBAR, removable: true, label: button_label, // button title tooltiptext: button_label, // tooltip title onClick: function(event) { if(event.button=='0') { undoCloseTab(); } }, onCreated: function(button) { return button; } }); var undoicon = ""; if(appversion <= 62) { undoicon = '\ #uc_undo_closetab_button .toolbarbutton-icon {\ list-style-image: url("chrome://browser/skin/reload.svg"); /* icon / path to icon */ \ transform: scaleX(-1); /* icon mirroring */\ }\ '; } // style button icon var uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent('\ \ #uc_undo_closetab_button .toolbarbutton-icon {\ list-style-image: url("chrome://browser/skin/undo.svg"); /* icon / path to icon */ \ fill: gray; /* icon color name/code */\ }\ :-moz-any(#customization-palette,#widget-overflow-fixed-list) #uc_undo_closetab_button .toolbarbutton-icon {\ width: 16px !important; \ height: 16px !important; \ }\ '+undoicon+' \ \ '), null, null); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); } catch (e) { Components.utils.reportError(e); }; })();
Отредактировано _zt (01-09-2020 18:48:23)
Отсутствует
_zt
зачем мне скрипт, на расширение ссылку давайте, мне наобум что-ли делать ну да селектор есть но мало ли ещё чего
Отсутствует
Vitaliy V.
Undo_closed_tabs_button-0.1.6.zip
Отсутствует
Vitaliy V.
Спасибо за Find Bar.
А с кнопкой в меню баре следующее: ваш сниппет работает даже без подставления id. В главном окне всё отлично. Но оказалось (я сразу не проверил), что "незапланированное" меню в self-contained окнах теряет кинутые к нему кнопки.
Я активно пользуюсь расширением Popout Tab. Вернуть отделённый таб только через контекстное.
Возможно ли закрепить кнопку(ки) в меню-баре из первой версии вашего стиля так, чтобы она оставалась на отделённых табах?
_zt
"Undo Closed Tabs" в верхнем уровне меню имеет неосторожный пункт "Очистить историю". Не пытались его отключить?
Сегодня обнаружил, что из-за этого расширения Firefox теряет историю закрытых вкладок при возобновлении сессии. Хотя аддон из "рекомендованных" - снёс, ищу замену.
Учитывая, что теперь FF запоминает больше 25 закрытых, было бы разумней собственные средства браузера реализовать в кнопку. Пробовал кто-нибудь?
Отредактировано razoo (02-09-2020 07:30:02)
Отсутствует
razoo
Я не пользуюсь "Undo Closed Tabs". В том что я пользуюсь можно удалить такой пункт, мне он не мешает.
В \data\popup\index.html удалите строку
Отредактировано _zt (02-09-2020 08:26:44)
Отсутствует
Мы же про одно расширение говорим?
Undo_closed_tabs_button-0.1.6.zip
То, которое у меня косячило (рекомендованное мозиллой) называется очень похоже "Undo Close Tab".
А это "Undo Closed Tabs Button". И да, я у него хотел удалить этот пункт меню через usercontent - не получается.
Отсутствует
razoo
Я вам написал как. Какой смысл использовать стили для расширения которое никогда больше не обновится?
Vitaliy V.
Или вот Undo_closed_tabs_button_REV-0.1.7-RU.zip, привел к нормальному виду.
Отсутствует
_zt
Подсказку "tooltiptext" на кнопке проще в расширении изменить, т.к. она постоянно обновляется
как-то так в manifest.json
"browser_action": {
"default_title": "ЛКМ: Undo Closed Tabs Button\nПКМ: Восстановить вкладку",
custom_script.js
try { CustomizableUI.addListener({ onWidgetBeforeDOMChange(node) { if (node.id == "undoclosedtabsrev_button-browser-action" && !node._ucf_change) { node._ucf_change = true; node.setAttribute("context", "false"); node.addEventListener("click", function(e) { if (e.button == 2) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); e.view.undoCloseTab(); } }); } }, }); } catch(e) {}
Но оказалось (я сразу не проверил), что "незапланированное" меню в self-contained окнах теряет кинутые к нему кнопки.
Они просто скрыты
*|*:root[chromehidden~="menubar"] #toolbar-menubar toolbarbutton#_f437e17f-2ed1-44c5-b020-b2996c896a39_-browser-action { display: -moz-box !important; }
Отсутствует
Vitaliy V.
Потестил кнопку-скрипт "Тултипы с URL". Мне кажется, есть проблема с отображением "Title". Я здесь публиковал старый и больной javascript, 2-й спойлер. Больной потому, что иногда не удаляет своё окно с тултипом (на ютубе, например, при ЛКМ на видео), не всегда правильный цвет для домена или вообще не работает; надо править, а знаний маловато... Короче, под спойлером гифка с youtube и 3 картинки с комментариями.
Отредактировано xrun1 (03-09-2020 03:04:27)
Отсутствует