Почему не работает, в чем ошибка?
Потому что openDialog, gBrowser находятся в объекте window
можно определить его для переменной
var win = e.view;
и добавлять перед
win.openDialog ...
win.gBrowser ...
и т.д.
onCommand(e) {
e.view.openDialog("chrome://userchromejs/content/passwordmgr/passwordManager.xhtml");
}
или для document
var doc = e.target.ownerDocument;
doc.getElementById('menu_showAllHistory').click();
Отсутствует
Vitaliy V.
Установил сегодня скрипт со стилем и иконками для добавления кнопки паузы в окна загрузок. В выпадающем списке загрузок кнопки Пауза и Отмена рядом, а если нажать Показать все загрузки и перейти в Библиотеку, то там между кнопками расстояние размером почти с еще одну кнопку. Это можно как-то исправить?
Еще вопрос. Удлинил в выпадающем списке линию прогресса закачки таким кодом
@-moz-document url-prefix("chrome:"), url("about:downloads") { .downloadProgress { margin-inline-end: -40px !important; }}
Отсутствует
можно как-то исправить?
Да видел я на ru-board.com ... поэтому обновил уже https://forum.mozilla-russia.org/viewto … 50#p776150
Еще вопрос. Удлинил в выпадающем списке линию прогресса закачки таким кодом
ненужно делать отрицательный маргин, зачем...
Вот для компактности, увеличения полосы прогресса и текста попробуйте
@-moz-document url-prefix("chrome:"), url("about:downloads") { #downloadsPanel-blockedSubview, #downloadsPanel-mainView { padding: 0 !important; } #downloadsRichListBox, #downloadsListBox { margin: 0 !important; } richlistitem.download-state { height: auto !important; padding: .5em !important; margin: 0 !important; } richlistitem.download-state .downloadContainer { margin-inline-end: .5em !important; } richlistitem.download-state .downloadProgress { margin-inline-end: 0 !important; } richlistitem.download-state:not([verdict]) .downloadBlockedBadgeNew { display: none !important; } richlistitem.download-state .downloadButton { padding: 0 !important; } richlistitem.download-state .downloadTypeIcon { margin-inline: 0 .5em !important; } }
Отредактировано Vitaliy V. (22-07-2021 19:46:56)
Отсутствует
Вот для компактности
Супер, спасибо. Этот код и первый мой вопрос решил. Я его писал уже после обновления. Наверное нужно добавить в исходный пост, чтобы не потерялся
Отсутствует
Этот код и первый мой вопрос решил
А, ну там раньше кнопки вообще были разные, добавленная кнопка не подходила по размеру, стилю.
Наверное нужно добавить в исходный пост, чтобы не потерялся
Думаю не нужно, по умолчанию кнопка отменить и т.д. в библиотеке больше, удобнее нажимать, если они так сделали зачем мне менять.
Отсутствует
Vitaliy V.
У меня без кода из поста выше выглядит так
а с кодом и кнопки друг к другу ближе и по высоте полоса компактней. А кнопки одинаковые
Отредактировано harryk (22-07-2021 21:26:37)
Отсутствует
У меня без кода из поста выше выглядит так
Да так и с дефолтной кнопкой, область клика больше чем в такой же кнопке, но на панельке.
Насчет компактней это не всем нужно
Кроме того этот код не подойдет к старым версиям
Отредактировано Vitaliy V. (22-07-2021 21:51:21)
Отсутствует
Vitaliy V.
В стиле для about:addons для всех разделов отображение в 1-3 столбца в зависимости от ширины окна, не помню точно с какой версии, вкладка "detail" растянулась на всю длину страницы, я подправил у себя, заменив #main div на #main, вроде правильно и сработало. Подправьте там пожалуйста. И адрес @-moz-document url("about:addons"), url("chrome://mozapps/content/extensions/aboutaddons.html")
Отредактировано Vitaliy V. (Сегодня 01:00:24)
Огромное Спасибо!
Отредактировано sandro79 (23-07-2021 12:39:54)
Отсутствует
Vitaliy V.
А есть ли возможность добавить в этот скрипт_https://forum.mozilla-russia.org/viewto … 50#p776150 кнопку "Очистить загрузки", желательно здесь:
Add, знаю что уже спрашивал, но может сейчас это возможно реализовать? И ещё вопрос, как изменить изображение с лева на своё?
Отредактировано kokoss (23-07-2021 17:06:55)
Win7
Отсутствует
кнопку "Очистить загрузки", желательно здесь
(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)
Отсутствует