shadow_user пишет: По параметру для about:config тоже непонятно, такого, даже без .ХХХ, в нем нет.
Ну этот параметр скорее всего создаёт сам скрипт. Залил на диск Яндекса три комплекта с авто-стартом русифицированного окна загрузок с использованием скрипта для 68 версии.
Комплект на базе user_chrome_files с окном загрузок и кнопкой паузы. Огромное Спасибо Виталию за комплект, а также за раннее оказанную помощь в подключении скрипта и кнопки паузы к комплекту. Комплект сегодня обновил и пересобрал. Файл user_style теперь custom_style_user и перекочевал в папку custom_styles, поближе к импортируемым стилям, что наверное положительный момент. Присутствует снимки самого окна загрузок и окна нужных для его работы - включенных стиля и скриптов.
Комплект для запуска скрипта окна загрузок и само окно на базе скриптов Alice0775 для 68 версии. Для 71-ой версии уже требуется другие userChrome.js и userChrome.xml и конечно ucjsDownloadsManager.uc.js. Этот вариант мне не по душе, дюже уж громоздкий userChrome.js.
Комплект на базе второго метода от Aris-a с окном загрузок для 68 версии. Кнопку паузы к последним двум комплектам прикрутить естественно мне не удалось. Перед использованием комплектов скриптов, при их смене, добавлении новых скриптов, редактировании скриптов - обязательна очистка папки startupCache.
Отредактировано sandro79 (17-12-2019 00:26:24)
Отсутствует
kokoss
возможно у вас какой то стиль переопределяет этот код
:root[sizemode="maximized"] .titlebar-buttonbox { margin-inline-end: 3px !important; }
Отсутствует
возможно у вас какой то стиль переопределяет этот код
скрытый тексттам должен быть отступ 3px или попробуйте 4px но может вначале вылезти
Проверял и без стилей, то же самое. Полностью не скрывает, как вы и указали, если убрать с левой стороны, вылазит с правой. Спасибо за помощь!
Win7
Отсутствует
Залил на диск Яндекса три комплекта с авто-стартом русифицированного окна загрузок
Спасибо огромное, пробую. До этого по инструкциям с обеих сайтов делал, но бесполезно, не получилось.
Добавлено 17-12-2019 00:34:58
Успел проверить второй комплект, как самый простой в реализации, заработал совершенно без вопросов. Заметил, если окно загрузок после предыдущей загрузки не закрыто, а в фоне, то при старте следующей загрузки оно не берет фокус. У вас тоже так?
Премного благодарен!
Отредактировано shadow_user (17-12-2019 00:36:15)
Отсутствует
shadow_user пишет: Заметил, если окно загрузок после предыдущей загрузки не закрыто, а в фоне, то при старте следующей загрузки оно не берет фокус. У вас тоже так?
Аналогично, но хоть такой костыль. Предпочтительнее всё же первый или третий вариант реализации. Первый вообще может работать при перезапуске браузера в безопасный режим. И это очень круто, ИМХО. И перед использованием комплектов скриптов, при их смене, добавлении новых скриптов, редактировании скриптов - обязательна очистка папки startupCache.
shadow_user пишет: До этого по инструкциям с обеих сайтов делал, но бесполезно, не получилось.
Ну правильно, вы же наверно использовали код ucjsDownloadsManager.uc.js для 69-72 по ссылке из этого сообщения.
if (location.href == "chrome://browser/content/browser.xhtml") { Cu.import("resource://gre/modules/Services.jsm"); window.ucjs_downloadManager = { _summary: null, _list: null, createElement: function(localName, arryAttribute) { let elm = document.createXULElement(localName); for(let i = 0; i < arryAttribute.length; i++) { elm.setAttribute(arryAttribute[i].attr, arryAttribute[i].value); } return elm; }, init: function() { window.addEventListener("unload", this, false); let ref = document.getElementById("menu_openDownloads"); let menu = ref.parentNode.insertBefore( this.createElement("menuitem", [{attr: "label", value:"Менеджер загрузок"}, {attr : "oncommand", value: "ucjs_downloadManager.openDownloadManager(true);"} ]), ref); XPCOMUtils.defineLazyModuleGetter(this, "Downloads", "resource://gre/modules/Downloads.jsm"); // Ensure that the DownloadSummary object will be created asynchronously. if (!this._summary) { this.Downloads.getSummary(this.Downloads.ALL).then(summary => { this._summary = summary; return this._summary.addView(this); }).then(null, Cu.reportError); } if (!this._list) { this.Downloads.getList(this.Downloads.ALL).then(list => { this._list = list; return this._list.addView(this); }).then(null, Cu.reportError); } }, uninit: function() { window.removeEventListener("unload", this, false); if (this._summary) { this._summary.removeView(this); } if (this._list) { this._list.removeView(this); } }, handleEvent: function(event) { switch (event.type) { case "unload": this.uninit(); break; } }, openDownloadManager: function ucjs_openDownloadManager(aForceFocus) { var enumerator = Services.wm.getEnumerator(null); while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); if (win.location == "chrome://browser/content/downloads/contentAreaDownloadsView.xul" && PrivateBrowsingUtils.isWindowPrivate(window) == PrivateBrowsingUtils.isWindowPrivate(win)) { if (aForceFocus) win.focus(); return; } } try { var height = Math.max(100,Services.prefs.getIntPref("browser.download.manager.size.height")); var width = Math.max(300,Services.prefs.getIntPref("browser.download.manager.size.width")); var screenX = Math.min(Math.max(0,Services.prefs.getIntPref("browser.download.manager.size.screenX")), screen.availWidth - width); var screenY = Math.min(Math.max(0,Services.prefs.getIntPref("browser.download.manager.size.screenY")), screen.availHeight - height); } catch(r){ height = 300; width = 600; screenX = 0; screenY = 0; } var win = window.open("chrome://browser/content/downloads/contentAreaDownloadsView.xul", "Download" + (PrivateBrowsingUtils.isWindowPrivate(window) ? " - Private Window" : ""), "outerWidth=" + width + ",outerHeight=" + height + ",left=" + screenX + ",top=" + screenY + ",chrome,toolbar=yes,dialog=no,resizable"); }, closeDownloadManager: function ucjs_closeDownloadManager() { var enumerator = Services.wm.getEnumerator(null); while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); if (win.location == "chrome://browser/content/downloads/contentAreaDownloadsView.xul") { win.close(); return; } } }, onDownloadAdded: function (aDownload) { var showWhenStarting = true; try { showWhenStarting = Services.prefs.getBoolPref("browser.download.manager.showWhenStarting"); } catch(e) {} var numDls = 0; if (showWhenStarting) { if (this._list) { this._list.getAll().then(downloads => { for (let download of downloads) { if (!download.stopped) numDls++; } if (numDls > 0) this.openDownloadManager(false); }).then(null, Cu.reportError); } } }, onDownloadChanged: function (aDownload) { if (!this._list) return; this._list.getAll().then(downloads => { var num = 0; for (let download of downloads) { if (!download.succeeded) num++; } if (num == 0) { var closeWhenDone = false; try { closeWhenDone = Services.prefs.getBoolPref("browser.download.manager.closeWhenDone"); } catch(e) {} if (closeWhenDone) { this.closeDownloadManager(); } } }).then(null, Cu.reportError); } }; ucjs_downloadManager.init(); } if (window.opener && location.href == "chrome://browser/content/downloads/contentAreaDownloadsView.xul") { Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/DownloadIntegration.jsm"); window.ucjs_downloadManagerMain = { originalTitle:"", _summary: null, _list: null, _wait:false, createElement: function(localName, arryAttribute) { let elm = document.createXULElement(localName); for(let i = 0; i < arryAttribute.length; i++) { elm.setAttribute(arryAttribute[i].attr, arryAttribute[i].value); } return elm; }, createElementNS: function(NS, localName, arryAttribute) { let elm = document.createElementNS(NS, localName); for(let i = 0; i < arryAttribute.length; i++) { elm.setAttribute(arryAttribute[i].attr, arryAttribute[i].value); } return elm; }, init: function() { window.addEventListener("unload", this, false); // xxx remove in-content css var elements = document.childNodes; for (var i = 0; i <= elements.length; i++) { var element = elements[i]; if (element.nodeValue.indexOf("chrome://browser/skin/downloads/contentAreaDownloadsView.css") > -1) { document.removeChild(element); break; } } /* var style = ' \ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); \ #contentAreaDownloadsView { \ padding: 0 ; \ } \ #downloadsRichListBox:empty + #downloadsListEmptyDescription { \ pointer-events: none; \ } \ '.replace(/\s+/g, " "); var sspi = document.createProcessingInstruction( 'xml-stylesheet', 'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"' ); document.insertBefore(sspi, document.documentElement); sspi.getAttribute = function(name) { return document.documentElement.getAttribute(name); }; */ let ref = document.documentElement; ref = ref.appendChild(this.createElement("hbox", [])); ref.appendChild(this.createElement("button", [{attr: "id", value: "ucjs_clearListButton"}, {attr: "label", value: "Очистить загрузки"}, ])); ref.appendChild(this.createElement("spacer", [{attr: "flex", value: "1"}])); ref.appendChild(this.createElementNS("http://www.w3.org/1999/xhtml", "input", [{attr: "id", value: "ucjs_downloadManagerMain_input"}, {attr: "clickSelectsAll", value: "true"}, {attr: "type", value: "search"}, {attr: "placeholder", value: "Поиск..."}, {attr: "aria-autocomplete", value: "list"} ])); document.getElementById("ucjs_clearListButton").addEventListener("command", function(event) { ucjs_downloadManagerMain.clearDownloads(); }); document.getElementById("ucjs_downloadManagerMain_input") .addEventListener("input", function(event) { ucjs_downloadManagerMain.doSearch(event.target.value); }); this.originalTitle = document.title + (PrivateBrowsingUtils.isWindowPrivate(window) ? " - Private Window" : ""); /* // xxx Bug 1279329 "Copy Download Link" of context menu in Library is grayed out var listBox = document.getElementById("downloadsRichListBox"); var placesView = listBox._placesView; var place = placesView.place; placesView.place= null; placesView.place = place; */ setTimeout(function(){this._wait = true}.bind(this), 0); // Ensure that the DownloadSummary object will be created asynchronously. if (!this._summary) { Downloads.getSummary(Downloads.ALL).then(summary => { this._summary = summary; return this._summary.addView(this); }).then(null, Cu.reportError); } if (!this._list) { Downloads.getList(Downloads.ALL).then(list => { this._list = list; return this._list.addView(this); }).then(null, Cu.reportError); } try { var showProgressInTaskButton = Services.prefs.getBoolPref("browser.download.manager.showProgressInTaskButton") } catch(ex) { showProgressInTaskButton = true; //default } if (showProgressInTaskButton) setTimeout(function() { try { let docShell = window.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIWebNavigation) .QueryInterface(Ci.nsIDocShellTreeItem).treeOwner .QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIXULWindow).docShell; let gWinTaskbar = Components.classes["@mozilla.org/windows-taskbar;1"] .getService(Components.interfaces.nsIWinTaskbar); this._taskbarProgress = gWinTaskbar.getTaskbarProgress(docShell); } catch(ex) { this._taskbarProgress = null; } }.bind(this), 10); }, uninit: function() { window.removeEventListener("unload", this, false); this._taskbarProgress = null; if (this._wait) this.saveSizePosition(); if (this._summary) { this._summary.removeView(this); } if (this._list) { this._list.removeView(this); } }, handleEvent: function(event) { switch (event.type) { case "unload": this.uninit(); break; } }, saveSizePosition: function() { if (window.windowState == 3) { Services.prefs.setIntPref("browser.download.manager.size.height", window.outerHeight); Services.prefs.setIntPref("browser.download.manager.size.width", window.outerWidth); Services.prefs.setIntPref("browser.download.manager.size.screenX", window.screenX); Services.prefs.setIntPref("browser.download.manager.size.screenY", window.screenY); } }, onSummaryChanged: function () { if (!this._summary) return; if (this._summary.allHaveStopped || this._summary.progressTotalBytes == 0) { document.title = this.originalTitle; if (this._taskbarProgress) { this._taskbarProgress.setProgressState( Ci.nsITaskbarProgress.STATE_NO_PROGRESS, 0, 0); } Cu.import("resource://gre/modules/Services.jsm"); var enumerator = Services.wm.getEnumerator("navigator:browser"); while(enumerator.hasMoreElements()) { return; } var closeWhenDone = false; try { closeWhenDone = Services.prefs.getBoolPref("browser.download.manager.closeWhenDone"); } catch(e) {} if (closeWhenDone) { DownloadIntegration._store.save(); window.close(); } } else { // If the last browser window has been closed, we have no indicator any more. if (this._taskbarProgress) { if (this._summary.allHaveStopped || this._summary.progressTotalBytes == 0) { this._taskbarProgress.setProgressState( Ci.nsITaskbarProgress.STATE_NO_PROGRESS, 0, 0); } else { // For a brief moment before completion, some download components may // report more transferred bytes than the total number of bytes. Thus, // ensure that we never break the expectations of the progress indicator. let progressCurrentBytes = Math.min(this._summary.progressTotalBytes, this._summary.progressCurrentBytes); this._taskbarProgress.setProgressState( Ci.nsITaskbarProgress.STATE_NORMAL, progressCurrentBytes, this._summary.progressTotalBytes); } } // Update window title var numDls = 0; if (!this._list) return; this._list.getAll().then(downloads => { for (let download of downloads) { if (download.hasProgress && !download.succeeded) numDls++; } let progressCurrentBytes = Math.min(this._summary.progressTotalBytes, this._summary.progressCurrentBytes); let percent = Math.floor(progressCurrentBytes / this._summary.progressTotalBytes * 100); let text = percent + "% из " + numDls + (numDls < 2 ? " файла - " : " файлов - ") ; document.title = text + this.originalTitle; }).then(null, Cu.reportError); } }, clearDownloads: function ucjs_clearDownloads() { var DO_NOT_DELETE_HISTORY = true; /* custmizable true or false */ var richListBox = document.getElementById("downloadsRichListBox"); var places = []; function addPlace(aURI, aTitle, aVisitDate) { places.push({ uri: aURI, title: aTitle, visits: [{ visitDate: (aVisitDate || Date.now()) * 1000, transitionType: Ci.nsINavHistoryService.TRANSITION_LINK }] }); } function moveDownloads2History(d) { if (DO_NOT_DELETE_HISTORY && !PrivateBrowsingUtils.isWindowPrivate(window)) { for (let element of richListBox.childNodes) { let download = element._shell.download; let aURI = makeURI(download.source.url); // let aTitle = document.getAnonymousElementByAttribute(element, "class", "downloadTarget").value let aTitle = download.target.path; aTitle = aTitle.match( /[^\\]+$/i )[0]; aTitle = aTitle.match( /[^/]+$/i )[0]; let aVisitDate = download.endTime || download.startTime; addPlace(aURI, aTitle, aVisitDate) } } // Clear List richListBox._placesView.doCommand('downloadsCmd_clearDownloads'); if (DO_NOT_DELETE_HISTORY && !PrivateBrowsingUtils.isWindowPrivate(window)) { if (places.length > 0) { var asyncHistory = Components.classes["@mozilla.org/browser/history;1"] .getService(Components.interfaces.mozIAsyncHistory); asyncHistory.updatePlaces(places); } } } var btn = document.getElementById("ucjs_clearListButton"); moveDownloads2History(0); }, doSearch: function ucjs_doSearch(filterString) { var richListBox = document.getElementById("downloadsRichListBox"); richListBox._placesView.searchTerm = filterString; } }; ucjs_downloadManagerMain.init(); }
Отредактировано sandro79 (17-12-2019 09:19:37)
Отсутствует
И перед использованием комплектов скриптов, при их смене, добавлении новых скриптов, редактировании скриптов - обязательна очистка папки startupCache.
Когда тренировался, чистил. А ваш второй комплект заработал без чистки. Надеюсь сегодня посмотреть первый и третий.
Отсутствует
Отсутствует
shadow_user пишет: А ваш второй комплект заработал без чистки.
Действительно, с этими скриптами чистка не требуется, видимо потому что скрипты запускаются не из директории установки Firefox, а из папки chrome профиля.
Этот метод имеет ещё особенность, - можно запустить нужный скрипт, просто поместив его в папку chrome, при этом не требуется прописывать никаких путей в скрипте userChrome.js. В 72+ уже этот метод работать не будет и требуется запуск из директории установки Firefox.
Ovod пишет: все кажись
Работает!? Значит всё!!!
Отредактировано sandro79 (17-12-2019 16:07:23)
Отсутствует
В 72+ уже этот метод работать не будет и требуется запуск из директории установки Firefox.
Думаю, я надолго на 68, слишком хлопотный процесс перехода. В 1 комплекте, видимо, нужно пути прописывать, поэтому я его не смог запустить. 3 комплект заработал без проблем, на нем и остановился.
Побочный эффект от экспериментов - имевшимися у меня файлами и вашими (2 + 2) смог оживить переставший работать родной прогресс загрузки, теперь тоже всплывает при каждой загрузке. Будет запасной вариант. Спасибо еще раз!
все кажись
Можно и так. В окне по звездочке можно отключить экран с превью и увеличить размер окна. Для первого https://forum.mozilla-russia.org/viewto … 19#p770819
для второго часть кода отсюда https://forum.mozilla-russia.org/viewto … 79#p728779
Отсутствует
shadow_user пишет: В 1 комплекте, видимо, нужно пути прописывать, поэтому я его не смог запустить. 3 комплект заработал без проблем, на нем и остановился.
Да нет, всё уже прописано и готово к использованию, только птички расставить в настройках комплекта user_chrome_files(скрин есть в архиве) и перезапустить браузер через окно настроек. Если содержимое архива размещено как указано в инструкции, то проблем быть не должно. Может с профилем чего.
Да, третий вариант наверное самое то, если не требуются доп. панели и запуск специфических скриптов и стилей. Рад был помочь.
ucjsDownloadsManager.uc для 71 версии https://yadi.sk/d/hEdZ7lMUwFLrqg, упаковал файл в архив, а то скачивался как txt.
Отредактировано sandro79 (18-12-2019 00:22:34)
Отсутствует
del
Отредактировано Vitaliy V. (14-04-2022 01:30:30)
Отсутствует
Vitaliy V. Благодарю! Проверил, вроде и придраться не к чему. Всё отлично, как по мне. Я понял, что в 72+ стало ещё сложнее привести about:addons к привычному виду, т.к. уже появились в коде - content: "Включить" !important; и content: "Отключить" !important;, ну т.е. приходится назначать уже вручную текст на кнопках. Немного рихтанул код - на всю ширину окна растянул --v-main-max-width: none !important;. Отлично, спасибо!
Отсутствует
Да нет, всё уже прописано и готово к использованию, только птички расставить в настройках комплекта user_chrome_files(скрин есть в архиве)
Не смог я получить то, что на скрине.
Отсутствует
sandro79
нужно в custom_script_all_win.js добавить этот код
if (window.opener && location.href.startsWith("chrome://browser/content/downloads/contentAreaDownloadsView.x")) { try { Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/custom_scripts/places_win.js", window, "UTF-8"); } catch(e) {} }
Отредактировано Vitaliy V. (17-12-2019 21:35:34)
Отсутствует
нужно в custom_script_all_win.js добавить этот код...
Да, да. У меня там несколько другой код, где // Здесь может быть ваш код который сработает по событию "load" не раньше
try { Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/custom_scripts/ucjsDownloadsManager.uc.js", window, "UTF-8"); } catch(e) {}
var observer = { observe: function(aSubject, aTopic, aData) { if (aTopic == "domwindowopened" && aSubject instanceof Ci.nsIDOMWindow) { aSubject.addEventListener("load", function domLoad() { aSubject.removeEventListener("load", domLoad, false); var loc = aSubject.location; if (loc && loc.href.startsWith("chrome://browser/content/downloads/contentAreaDownloadsView.x")) { try { Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/custom_scripts/places_win.js", aSubject, "UTF-8"); } catch(e) {} } }, false); } } }; Services.obs.addObserver(observer, "domwindowopened", false);
Отсутствует
А без custom_script.js кнопка паузы доступна только в окне библиотеки, а в авто-стартующем окне её нет.
В 68 всё работает без custom_script.js
а в 71 могут не загрузится иконки (в окне загрузок вызываемом ucjsDownloadsManager.uc.js не важно с custom_script.js или без)
Content Security Policy: Параметры страницы заблокировали загрузку ресурса data:image/....
можно сделать отдельные иконки .svg или .png
Да, да. У меня там несколько другой код
Вот именно, добавьте мой код и заработает
Отредактировано Vitaliy V. (18-12-2019 00:33:24)
Отсутствует
Vitaliy V. пишет: В 68 всё работает без custom_script.js
Да, действительно, добавил код в конец скрипта и заработало без custom_script.js. Что-то я сразу не понял и начал его совать вместо того, что запускает ucjsDownloadsManager.uc.js с мыслью, - а разве так будет работать? Непонятно, вот переклинило меня именно заменить, а не добавить, хотя ясно было сказано - добавить. Спасибо. Виталий, ещё один момент хотел уточнить, по второму комплекту из этого сообщения, для расширения кругозора. Если удалить из скрипта ucjsDownloadsManager полностью шапку со всякими пояснениями и историей версий, то в окне загрузок пропадают кнопка очистки загрузок и фиктивная строка поиска, а также пункт в панели меню Инструменты? Но опытным путём было выяснено, что обязательно наличие четырёх строк с содержанием ниже. В чём причина, почему наличие именно этих строк обязательно для нормальной работы этого скрипта, может из-за того что не требуется прописывать пути к запускаемым скриптам в этом методе или другая причина? Скрипт, перезалитый уже третий раз, для 71 в сообщении чуть выше.
Да, в 71 иконка конечно отвалилась в окне ucjsDownloadsManager.uc.js, но хоть пауза при нажатии работает. Виталий, может сделаете стиль для иконок, если не сильно хлопотно, а иконки я сам попытаюсь сделать или может из omni.ja достану. Спасибо.
Отсутствует
Vitaliy V.
А можно в вашем стиле about:addons для 72+ вернуть кнопку с троеточием. У меня на нее кнопка с доп. параметрами завязана.
Отредактировано Garalf (18-12-2019 13:55:10)
Отсутствует
Vitaliy V.
Подскажите пожалуйста, как в 71: изменить форму (сделать квадратной или круглой) значка "Приватное окно"? Сделать так что бы значок менял цвет при нахождении в "Приватном окне"? И сдвинуть немного влево значок "Приватного окна"?
Отредактировано kokoss (18-12-2019 13:18:13)
Win7
Отсутствует
В чём причина, почему наличие именно этих строк обязательно для нормальной работы этого скрипта, может из-за того что не требуется прописывать пути к запускаемым скриптам в этом методе или другая причина?
Там сделано метаданные типа как в менеджерах скриптов Greasemonkey и т. д., короче лишний не нужный код который парсит эти данные в скриптах
стиль для иконок, если не сильно хлопотно
Можно сделать не только стиль но и изменить код чтобы работало во всех этих окнах places и contentAreaDownloadsView
user_chrome_files/custom_scripts/custom_script_all_win.js
/* ************************************************ */ // Здесь может быть ваш код который сработает по событию "load" не раньше setTimeout(() => { var loadScripts = ((name) => { try { Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, window, "UTF-8"); } catch(e) {} }); var url = location.href; if (url.startsWith("chrome://browser/content/browser.x")) { loadScripts("ucjsDownloadsManager.uc.js"); } else if (url.startsWith("chrome://browser/content/places/places.x")) { loadScripts("places_win.js"); } else if (url.startsWith("chrome://browser/content/downloads/contentAreaDownloadsView.x")) { loadScripts("ucjsDownloadsManager.uc.js"); loadScripts("places_win.js"); } }, 0); /* ************************************************ */
@-moz-document url-prefix("chrome://browser/content/places/places.x"), url-prefix("chrome://browser/content/downloads/contentAreaDownloadsView.x") { richlistbox#downloadsRichListBox > richlistitem.download-state:not([buttonhidden]):-moz-any([state="0"],[state="4"])::after { display: -moz-box !important; content: "" !important; width: 56px !important; -moz-box-align: center !important; -moz-context-properties: fill !important; fill: currentColor !important; background-position: center !important; background-repeat: no-repeat !important; background-size: 16px !important; } richlistbox#downloadsRichListBox > richlistitem.download-state:not([buttonhidden])[state="0"]::after { background-image: url("./svg/download-pause.svg") !important; } richlistbox#downloadsRichListBox > richlistitem.download-state:not([buttonhidden])[state="4"]::after { background-image: url("./svg/download-resume.svg") !important; } richlistbox#downloadsRichListBox > richlistitem.download-state { -moz-box-direction: normal !important; } richlistbox#downloadsRichListBox > richlistitem.download-state:not([buttonhidden]) > button:last-of-type { -moz-box-ordinal-group: 100 !important; display: -moz-box !important; margin-inline-start: 0 !important; } }
<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"> <path fill="context-fill" d="M 4.5,1 C 3.67,1 3,1.67 3,2.49 V 13.5 C 3,14.4 3.67,15 4.5,15 5.33,15 6,14.4 6,13.5 V 2.49 C 6,1.67 5.33,1 4.5,1 Z M 10.5,1 C 9.7,1 9,1.66 9,2.49 V 13.5 C 9,14.4 9.7,15 10.5,15 11.3,15 12,14.4 12,13.5 V 2.49 C 12,1.66 11.3,1 10.5,1 Z"/> </svg>
<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"> <path fill="context-fill" d="M 2,14.1 C 2,14.9 2.62,15.2 3.37,14.8 L 13.5,8.82 C 14.2,8.38 14.2,7.64 13.5,7.19 L 3.37,1.2 C 2.61,0.753 2,1.08 2,1.9 Z"/> </svg>
Добавлено 18-12-2019 20:10:10
А можно в вашем стиле about:addons для 72+ вернуть кнопку с троеточием. У меня на нее кнопка с доп. параметрами завязана.
А для чего тогда вам этот стиль? он в основном это и делает
изменить форму (сделать квадратной или круглой) значка "Приватное окно"?
не совсем понял вопрос что именно там делать круглым?
Сделать так что бы значок менял цвет при нахождении в "Приватном окне"? И сдвинуть немного влево значок "Приватного окна"?
#privatebrowsing-button image { fill: currentColor !important; } *|*:root[privatebrowsingmode="temporary"] #privatebrowsing-button image { fill: magenta !important; } #toolbar-menubar[autohide="true"] + #TabsToolbar .titlebar-spacer[type="post-tabs"] { display: -moz-box !important; width: 10px !important; }
Отредактировано Vitaliy V. (18-12-2019 20:10:10)
Отсутствует
не совсем понял вопрос что именно там делать круглым?
Имелось в виду, вот такой формы:
#privatebrowsing-button { list-style-image: url("chrome://browser/skin/privatebrowsing/favicon.svg") !important; }
Отредактировано kokoss (18-12-2019 23:21:56)
Win7
Отсутствует
Vitaliy V. пишет: Там сделано метаданные типа как в менеджерах скриптов Greasemonkey и т. д., короче лишний не нужный код который парсит эти данные в скриптах
Спасибо за разъяснение, не зря мне этот вариант не очень понравился.
Vitaliy V. пишет: Можно сделать не только стиль но и изменить код чтобы работало во всех этих окнах places и contentAreaDownloadsView
Виталий, ну это верх моих ожиданий, кнопки паузы в обоих окнах и работают исправно. Гениально! Верх совершенства.
Огромнейшее Вам Спасибо!
Отредактировано sandro79 (19-12-2019 17:30:43)
Отсутствует