кнопку "Очистить загрузки", желательно здесь
(this.cleardownloadsbutton = { init(that) { var panel = this.panel = DownloadsPanel.panel; if (!panel) return; panel.addEventListener("popupshowing", this); that.unloadlisteners.push("cleardownloadsbutton"); }, handleEvent(e) { var dh = DownloadsView.downloadsHistory; if (!dh) { this.destructor(); return; } var style = "data:text/css;charset=utf-8," + encodeURIComponent(` vbox#downloadsFooterButtons { display: grid !important; grid-template-columns: repeat(2, 1fr) !important; grid-auto-rows: auto 1fr !important; align-items: stretch !important; grid-template-areas: "a a" "b c" !important; } vbox#downloadsFooterButtons > toolbarseparator:first-of-type { grid-area: a !important; align-self: start !important; } vbox#downloadsFooterButtons > #downloadsHistory { grid-area: b !important; } vbox#downloadsFooterButtons > #ucf-cleardownloads-btn { grid-area: c !important; } #downloadsFooterButtons > button { margin: 0 !important; -moz-box-flex: 1 !important; -moz-box-pack: center !important; -moz-box-align: center !important; } #downloadsFooterButtons.panel-footer.panel-footer-menulike > button { margin-top: 4px !important; } #downloadsFooterButtons > #ucf-cleardownloads-btn[disabled="true"] { pointer-events: none !important; } `); windowUtils.loadSheetUsingURIString(style, windowUtils.USER_SHEET); var btn = this.btn = document.createXULElement("button"); btn.id = "ucf-cleardownloads-btn"; btn.className = "downloadsPanelFooterButton subviewbutton panel-subview-footer-button toolbarbutton-1"; btn.setAttribute("label", "Очистить загрузки"); btn.setAttribute("disabled", "true"); dh.after(btn); btn.addEventListener("command", this); (this.handleEvent = e => { this[e.type](e); })(e); }, command(e) { DownloadsCommon.getData(window, true) .removeFinished(); PlacesUtils.history.removeVisitsByFilter({ transition: PlacesUtils.history.TRANSITIONS.DOWNLOAD, }).catch(Cu.reportError); this.btn.disabled = true; }, async setbutton() { var {_downloads} = await DownloadsCommon.getData(window, true)._promiseList; for (let download of _downloads) { if (download.stopped && !(download.canceled && download.hasPartialData)) { this.btn.disabled = false; return; } } this.btn.disabled = true; }, popupshowing(e) { if (e.target != this.panel) return; this.setbutton(); var list = DownloadsCommon.getData(window, true); list.addView(this); this.panel.addEventListener("popuphiding", e => { if (e.target != this.panel) return; list.removeView(this); }, { once: true }); }, onDownloadChanged(download) { this.setbutton(); }, onDownloadRemoved(download) { if (!this.btn.disabled) this.setbutton(); }, destructor() { this.panel?.removeEventListener("popupshowing", this); this.btn?.removeEventListener("command", this); } }).init(this);
UPD: Обновил стиль для кнопки
Отредактировано Vitaliy V. (24-07-2021 14:14:04)
Отсутствует
Vitaliy V., поясните, пожалуйста, по скрипту скрытия свободного места в заголовке окна при отключенной панели меню - https://forum.mozilla-russia.org/viewtopic.php?pid=784310#p784310
Не совсем понятно, что делать с этими двумя участками кода:
ucf_custom_script_win
скрытый текстВыделить кодКод:
menubarvisibilitychance: { buttons: null, buttonsfullscreen: null, constructor() { var menubar = this.menubar = document.querySelector("#toolbar-menubar"); if (!menubar) return; this.observer = new MutationObserver(() => { this.settoolbarvisibility(); }); this.observer.observe(menubar, { attributeFilter: ["autohide", "inactive"], attributes: true, }); this.sizemodechange = new MutationObserver(() => { this.setbuttonboxwidth(); }); this.sizemodechange.observe(document.documentElement, { attributeFilter: ["sizemode"], attributes: true, }); ucf_custom_script_win.unloadlisteners.push("menubarvisibilitychance"); this.settoolbarvisibility(); }, settoolbarvisibility() { var docElm = document.documentElement; if (this.menubar.getAttribute("autohide") == "true" && this.menubar.getAttribute("inactive") == "true") { docElm.setAttribute("v_menubar_autohide", true); this.setbuttonboxwidth(); } else docElm.setAttribute("v_menubar_autohide", false); }, width(outerRect, innerRect) { if (!window.RTL_UI) this.width = (outerRect, innerRect) => outerRect.right - innerRect.left; else this.width = (outerRect, innerRect) => innerRect.right - outerRect.left; return this.width(outerRect, innerRect); }, setbuttonboxwidth() { var buttons, docElm = document.documentElement; if (docElm.getAttribute("sizemode") != "fullscreen") buttons = (this.buttons || (this.buttons = this.menubar.querySelector(".titlebar-buttonbox-container"))); else buttons = (this.buttonsfullscreen || (this.buttonsfullscreen = document.querySelector("#window-controls"))); var innerRect = buttons.getBoundingClientRect(); if (innerRect.width < 1) { docElm.style.setProperty("--v-titlebar-buttonbox-container-width", "0px"); return; } var outerRect = docElm.getBoundingClientRect(); docElm.style.setProperty("--v-titlebar-buttonbox-container-width", `${this.width(outerRect, innerRect)}px`); }, destructor() { this.observer.disconnect(); this.sizemodechange.disconnect(); this.observer = null; this.sizemodechange = null; } },
ucf_custom_script_win.loadскрытый текст
Спасибо за помошь
Отредактировано Viatcheslav (24-07-2021 04:46:39)
Отсутствует
Потому что openDialog, gBrowser находятся в объекте window
Спасибо, в этом разобрался!!!
А тут где ошибка?
try { CustomizableUI.createWidget({ id: "123", label: "123", tooltiptext: "123", image: "chrome://browser/content/robot.ico", defaultArea: CustomizableUI.AREA_NAVBAR, onCreated(btn) { btn.setAttribute("image", this.image); }, onCommand(e) { if (e.button == 0) { e.target.ownerDocument.getElementById('menu_showAllHistory').click() } if (e.button == 1) { e.target.ownerDocument.getElementById('menu_openDownloads').click() } } }); } catch(e) {}
Отредактировано momo2000 (26-07-2021 20:26:21)
Отсутствует
Куда этот скрипт вставлять?
custom_script_win.js или загрузчик для него https://forum.mozilla-russia.org/viewto … 02#p792702
Не совсем понятно, что делать с этими двумя участками кода:
Этот код добавляется только в custom_script_win.js (без загрузчиков) тот что в первом спойлере например перед строкой
specialwidgets: {
из второго в // Здесь может быть ваш код который сработает по событию "load" не раньше
из третьего в конец файла после этих строк
} else
ucf_custom_script_win.load();
А тут где ошибка?
onCommand - для обычных кнопок где используется только левая кнопка мыши для выполнения кода
в вашем примере можно заменить на
onClick(e) {...},
или же если нужна сложная кнопка
type: "custom",
onBuild(doc) { ... },
и вам нужно добавить в onBuild код для создания кнопки
var btn = doc.createXULElement("toolbarbutton");
btn.id = "123";
btn.className = "toolbarbutton-1 chromeclass-toolbar-additional";
и т.д. а в конце
return btn;
и кстати можно заменить ваши ....click() на
e.view.PlacesCommandHook.showPlacesOrganizer("History");
e.view.PlacesCommandHook.showPlacesOrganizer("Downloads");
Отредактировано Vitaliy V. (24-07-2021 11:43:58)
Отсутствует
Продолжаю допиливать интерфейс Гугла. Код
@-moz-document domain(google.com) { .RNNXgb, .o6juZc, #sfdiv { border: 1px solid #cccccc !important; border-radius: 2px !important; box-shadow: none !important; } .aajZCb, .Bhmw4 { border-left: 1px solid #cccccc !important; border-right: 1px solid #cccccc !important; border-bottom: 1px solid #cccccc !important; border-bottom-left-radius: 2px !important; border-bottom-right-radius: 2px !important; box-shadow: none !important; } .sbdd_b { border-left: 1px solid #cccccc !important; border-right: 1px solid #cccccc !important; border-bottom: 1px solid #cccccc !important; border-bottom-left-radius: 2px !important; border-bottom-right-radius: 2px !important; box-shadow: none !important; } .dRYYxd { margin-right: -10px !important; } .ACRAdd, .Umvnrc, #gs_st0 { display: none !important; } .Tg7LZd { background-color: #4584ef !important; width: 60px !important; height: auto !important; margin-top: -1px !important; } #BIqFsb { background-color: #4584ef !important; border-top-right-radius: 2px !important; border-bottom-right-radius: 2px !important; width: 60px !important; height: auto !important; margin-top: -1px !important; padding: 0 !important; } #mKlEF { background-color: #4584ef !important; width: 60px !important; height: 46px !important; margin-top: -1px !important; } .FAuhyb { fill: #ffffff !important; color: #ffffff !important; margin-right: 1px !important; } .XZ5MVe { fill: #ffffff !important; color: #ffffff !important; } .sbico { fill: #ffffff !important; color: #ffffff !important; margin-right: -12px !important; } }
Отсутствует
Отсутствует
Просто решил что если можно скрыть, то и заменить можно
Ну да можно, но не для всех же типов файлов одну иконку
Вот например для файлов .exe
richlistitem.download-state .downloadTypeIcon[src] { background-size: contain !important; background-repeat: no-repeat !important; background-position: center !important; } /* ***************************************************************** */ richlistitem.download-state .downloadTypeIcon:is([src$=".exe?size=32"],[src$=".exe?size=32&state=normal"]) { object-position: 32px 0 !important; background-image: url("chrome://branding/content/icon32.png") !important; }
От как скриптом уделать эти две иконки(добавить в очередь, смотреть позже)
Зачем скрипт, стиля хватает вроде
@-moz-document domain("youtube.com") { #hover-overlays { display: none !important; } }
Да вставить в Enhancer for YouTube
Это где? мне лень искать
Отредактировано Vitaliy V. (24-07-2021 15:58:07)
Отсутствует
или загрузчик для него
Вставил строку
loadscript("ScriptsWin/ClearDownloadsButton.js", this);
после строки
//>>>>>>>>>>| Загрузка скриптов для browser.xhtml |>>>>>>>>>>
Заработало, спасибо. Но не понятен момент. Этот "this" там нужен или можно без него? Вообще как понять когда нужен "this", когда "win", а когда ничего не нужно
Отсутствует
Этот "this" там нужен или можно без него? Вообще как понять когда нужен "this", когда "win", а когда ничего не нужно
Да нужен, он нужен пока в том случае если скрипт мой и
если в начале есть типа, то уже можно сказать нужен this
(this.xxxxxxxxxxxxxxxx = {
В других скриптах - win, хотя можно и некоторые не мои скрипты загрузить с this...
если ничего то по умолчанию используется глобальный объект вызывающего
т.е. если вызвать из этого блока, можно и без win
//>>>>>>>>>>| Загрузка скриптов для browser.xhtml |>>>>>>>>>>
а здесь win обязателен
//>>>>>>>>>>| Загрузка скриптов для др. документов |>>>>>>>>>>
Отредактировано Vitaliy V. (24-07-2021 16:36:04)
Отсутствует
Ну да можно, но не для всех же типов файлов одну иконку
Вот например для файлов .exe
скрытый тексти т.д.
Да и обновил ещё раз стиль для кнопки "Очистить загрузки", сразу не так просто для разных версий сделать
Вот теперь красота
Win7
Отсутствует
Vitaliy V.
Немного прояснилось, спасибо.
Еще момент. У меня следом вызывается скрипт ContextSearch.js у которого вначале тоже (this.xxxxxxxxxxxxxxxx = {. Но вызывается он у меня строкой
loadscript("ScriptsWin/ContextSearch.js", win);
и работает. Это нормально или исправить "win" на "this"?
Отсутствует
или исправить "win" на "this"?
Да
Отсутствует
onCommand - для обычных кнопок...
Понял! Слепил простые кнопки для себя)
Вот теперь красота
Очень классно, я отказался от этой панельки с какой то версии, как раз из-за отсутствия кнопки очистки, но с той же версии завершенные загрузки удаляются после рестарта!
Есть ли настройка about:config, чтобы после рестарта FF завершенные загрузки не удалялись автоматом с этой плашки?
Отредактировано momo2000 (26-07-2021 20:28:33)
Отсутствует
Есть ли настройка about:config, чтобы после рестарта FF завершенные загрузки не удалялись автоматом с этой плашки?
Не в курсе, меня устраивает что они сохраняются в chrome://browser/content/places/places.xhtml
Win7
Отсутствует
Товарищи, добрый день!
Перехожу с SeaMonkey на FF esr т.к. в старом, добром при обновлении на новую версию не поддерживаются многие плагины, в частности "Менеджер сессий" и "User Agent Switcher".
В общем скачал новый и начал разбираться с ним. Как на мой взгляд он очень похерел (Не пользовался им 5 лет) ну ладно, не в этом суть.
Нашел для себя как можно панель вкладок перенести вниз
/* панель вкладок внизу окна */ @-moz-document url("chrome://browser/content/browser.xhtml") { :root:not([inFullscreen]) #browser { margin-bottom: 40px; } :root:not([inFullscreen]) #TabsToolbar { position: fixed; display: flex; bottom: 2px; width: 100%; } #tabbrowser-tabs { flex-grow: 1; } #tabbrowser-tabs > .tabbrowser-arrowscrollbox { width: -moz-available } #TabsToolbar-customization-target { width: 100%; } .toolbar-items { width: 100%; } }
Отсутствует
Vitaliy V.
Здравствуйте, вы бы не могли пожалуйста подправить если не сложно, ваш стиль скрытия панели закладок?
Сам стиль: (скрывает панель закладок а при наведении курсора на панель навигации показывает ее)
#PersonalToolbar:not(:is([customizing="true"],[collapsed="true"])) { display: flex !important; align-items: stretch !important; position: fixed !important; left: 0 !important; right: 0 !important; transition-property: transform, visibility !important; transition-duration: .1s !important; transition-delay: .1s !important; transition-timing-function: ease-out, linear !important; z-index: 3 !important; border-bottom: 1px solid var(--chrome-content-separator-color, ThreeDShadow) !important; } #PersonalToolbar:not(:is([customizing="true"],[collapsed="true"])) > :is(toolbarspring,#personal-bookmarks,#search-container) { flex-grow: 1 !important; } #nav-bar:not(:hover) ~ #PersonalToolbar:not(:is(:hover,[customizing="true"],[collapsed="true"])) { transform: translateY(-100%) !important; visibility: collapse !important; transition-delay: 1s !important; transition-timing-function: ease-in, linear !important; }
Когда появляется панельзя закладок я открываю папку:
Но если я ничего не выбираю и убираю мышку с панели, панель исчезает, а открытая папка нет(продолжает висеть пока не кликнешь по странице)
Отредактировано Stkvsky (31-07-2021 20:35:38)
Отсутствует
ВВП
#bookmarkpropertiesdialog #editBookmarkPanelRows > vbox > input, #bookmarkpropertiesdialog #editBookmarkPanelRows > vbox > hbox > input, #bookmarkpropertiesdialog #editBMPanel_folderMenuList { padding-inline: 12px !important; }
#PersonalToolbar:not([customizing="true"],[collapsed="true"]) { display: flex !important; align-items: stretch !important; position: fixed !important; inset-inline: 0 !important; transition-property: transform, min-height, max-height !important; transition-duration: .1s !important; transition-delay: .1s !important; transition-timing-function: ease-out, step-start, step-start !important; z-index: 3 !important; border-bottom: 1px solid var(--chrome-content-separator-color, ThreeDShadow) !important; } #PersonalToolbar:not([customizing="true"],[collapsed="true"]) > :is(toolbarspring,#personal-bookmarks,#search-container) { flex-grow: 1 !important; } #nav-bar:not(:hover) ~ #PersonalToolbar:not(:hover,[customizing="true"],[collapsed="true"]) { transform: translateY(-100%) !important; min-height: 0 !important; max-height: 0 !important; transition-delay: 1s !important; transition-timing-function: ease-in, step-end, step-end !important; animation-name: PersonalToolbarHide !important; animation-duration: .1s !important; animation-iteration-count: 1 !important; animation-timing-function: step-end !important; animation-delay: 1s !important; } @keyframes PersonalToolbarHide { from { overflow-y: hidden; } to { overflow-y: clip; } }
Отредактировано Vitaliy V. (01-08-2021 02:11:51)
Отсутствует
Подскажите, пожалуйста, что нужно поменять в коде,
@-moz-document domain(google.com) { .RNNXgb, .o6juZc, #sfdiv { border: 1px solid #cccccc !important; border-radius: 2px !important; box-shadow: none !important; } .aajZCb, .Bhmw4 { border-left: 1px solid #cccccc !important; border-right: 1px solid #cccccc !important; border-bottom: 1px solid #cccccc !important; border-bottom-left-radius: 2px !important; border-bottom-right-radius: 2px !important; box-shadow: none !important; } .sbdd_b { border-left: 1px solid #cccccc !important; border-right: 1px solid #cccccc !important; border-bottom: 1px solid #cccccc !important; border-bottom-left-radius: 2px !important; border-bottom-right-radius: 2px !important; box-shadow: none !important; } .dRYYxd { margin-right: -10px !important; } .ACRAdd, .Umvnrc, #gs_st0 { display: none !important; } .Tg7LZd { background-color: #4584ef !important; width: 60px !important; height: auto !important; margin-top: -1px !important; } #BIqFsb { background-color: #4584ef !important; border-top-right-radius: 2px !important; border-bottom-right-radius: 2px !important; width: 60px !important; height: auto !important; margin-top: -1px !important; padding: 0 !important; } #mKlEF { background-color: #4584ef !important; width: 60px !important; height: 46px !important; margin-top: -1px !important; } .FAuhyb { fill: #ffffff !important; color: #ffffff !important; margin-right: 1px !important; } .XZ5MVe { fill: #ffffff !important; color: #ffffff !important; } .sbico { fill: #ffffff !important; color: #ffffff !important; margin-right: -12px !important; } }
Отсутствует
Vitaliy V.
Есть вот такой стиль чтобы иконки с названиями в поиске были. И там фон с голубым ингредиентом. Так в Firefox 91 этот фон полностью не заполняется. Как это бы подправить?
#PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item:not([tooltiptext]) {
display: none !important;
}
#PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item .button-box {
position: absolute !important;
-moz-padding-start: 4px !important;
margin-top: 3px !important;
}
#PopupSearchAutoComplete .search-panel-one-offs .searchbar-engine-one-off-item::after {
-moz-appearance: none !important;
display: inline !important;
content: attr(tooltiptext) !important;
position: relative !important;
top: -9px !important;
-moz-padding-start: 25px !important;
min-width: 0 !important;
width: 100% !important;
white-space: nowrap !important;
}
#PopupSearchAutoComplete .search-panel-tree:not([collapsed="true"]) {
width: 100% !important;
display: block !important;
}
#PopupSearchAutoComplete .search-panel-tree:not([collapsed="true"]) > * {
width: 100%;
}
#PopupSearchAutoComplete .search-panel-tree[height="21"] {
min-height: 21px !important;
height: 21px !important;
max-height: 21px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="42"] {
min-height: 42px !important;
height: 42px !important;
max-height: 42px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="63"] {
min-height: 63px !important;
height: 63px !important;
max-height: 63px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="84"] {
min-height: 84px !important;
height: 84px !important;
max-height: 84px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="105"] {
min-height: 105px !important;
height: 105px !important;
max-height: 105px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="126"] {
min-height: 126px !important;
height: 126px !important;
max-height: 126px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="147"] {
min-height: 147px !important;
height: 147px !important;
max-height: 147px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="168"] {
min-height: 168px !important;
height: 168px !important;
max-height: 168px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="189"] {
min-height: 189px !important;
height: 189px !important;
max-height: 189px !important;
}
#PopupSearchAutoComplete .search-panel-tree[height="210"] {
min-height: 210px !important;
height: 210px !important;
max-height: 210px !important;
}
#PopupSearchAutoComplete .search-panel-tree scrollbar {
display: none !important;
visibility: collapse !important;
opacity: 0 !important;
}
Отсутствует