Dumby
Нарисовалась хотелка для этого скрипта, тот что под спойлером.
Пишу для истории - скрипт при поиске создает пункт "Показать в папке" в контекстном меню закладок, и в библиотеке, и в закладках сайдбара.
Но проблема в том, что после срабатывания и последующего переоткрытия сайдбара (закрыть и снова открыть) положение поиска сбрасывается. Тоже самое и с нативным пунктом, вот здесь об этом.
А вот у этого скрипта такой проблемы нет. Но к сожалению он не работает в библиотеке и не прячет свой пункт когда нет поиска, т.е. пункт торчит всегда.
Не могли бы вы свой скрипт изменить так, что бы он вел себя в сайдбаре аналогично скрипту alice0775, т.е. не сбрасывал положение поиска после переоткрытия сайдбара?
Отредактировано _zt (25-09-2022 04:05:52)
Отсутствует
Сделайте пожалуйста скрипт для авто... открытия панели загрузок при старте закачки.
Хорошо, попробую. Это в custom_script.js
Services.obs.addObserver(function brw(win, topic) { Services.obs.removeObserver(brw, topic); var {Downloads: d, BrowserWindowTracker: bwt} = win; var show = function(download) { download.newDownloadNotified || bwt.getTopWindow(this)?.DownloadsPanel.showPanel(); }; ["PUBLIC", "PRIVATE"].forEach(async (type, ind) => { var view = Object.create(null); view.private = Boolean(ind); view.onDownloadChanged = show; (await d.getList(d[type])).addView(view); }); }, "browser-delayed-startup-finished");
проблема в том, что после срабатывания и последующего переоткрытия сайдбара (закрыть и снова открыть) положение поиска сбрасывается
«положение поиска» это какие папки развёрнуты?
Если так, то можно попробовать запоминать принудительно.
/* tree.scrollByLines(Math.round(newFirst - first)); } */ tree.scrollByLines(Math.round(newFirst - first)); this.persist(tree.view); }, persist(view) { var du = document.documentURI, xs = Services.xulStore; var obf = PlacesUIUtils.obfuscateUrlForXulStore, set = obf ? u => xs.setValue(du, obf(u), "open", "true") : u => xs.setValue(du, u, "open", "true"); (this.persist = view => { for(var node of view._rows) node.containerOpen && set(node.uri) })(view); }
Отсутствует
_zt, voqabuhe
По совету умных товарищей "переполз" со "старого" UCF на "новый". Вроде, все стили и кнопки подключились, но, как оказалось, рано радовался - скрипт SidebarBookmarkSearchOpenFolder.uc.js в этом "новом" у меня не работает. Судя по постам, скрипт лучше штатной возможности "Показать в папке" (#placesContext_showInFolder).
Скрипт у меня в "старом" варианте подключался по какой-то хитрой схеме. Куда его втыкать теперь? В CustomStylesScripts.jsm этот вариант не работает.
load: [ // По событию "load" { path: "special_widgets.js", ucfobj: true, }, // <-- Special Widgets // { path: "auto_hide_sidebar.js", ucfobj: true, }, // <-- Auto Hide Sidebar { path: "cs_win/SidebarBookmarkSearchOpenFolder.uc.js", ucfobj: false, },
Отсутствует
В config.js
lockPref("browser.download.panel.shown", false);
Уже нет, при чём эта настройка уже не помню с какой версии перестала работать, как и настройка > browser.download.improvements_to_download_panel = false, отвалилась после обновления на 105.
add, этот способ тоже не работает > lockPref("browser.download.panel.shown", false); + browser.download.alwaysOpenPanel = true
Это в custom_script.js
скрытый текст
Благодарю!!!
Отредактировано kokoss (25-09-2022 14:26:39)
Win7
Отсутствует
Special Widgets
Special Widgets грузится в объект ucf_custom_script_win
окна документа браузера (browser.xhtml).
А закладки в сайдбаре — это другое окно (bookmarksSidebar.xhtml).
Надо прописывать в UcfStylesScripts.scriptsallchrome
Опусти глаза чуть пониже. Пример для Библиотеки видишь?
// { path: "example_places.js", urlregxp: /chrome:\/\/browser\/content\/places\/places\.xhtml/, ucfobj: false, },
Вот туда. Типа
{ path: "cs_win/SidebarBookmarkSearchOpenFolder.uc.js", urlregxp: /chrome:\/\/browser\/content\/places\/bookmarksSidebar\.xhtml/ },
Отсутствует
Dumby
Спасибо, все ок.
xrun1
В load: [ // По событию "load"
{ path: "cs_win/SidebarBookmarkSearchOpenFolder.uc.js", urlregxp: /chrome:\/\/browser\/content\/places\/bookmarksSidebar\.xhtml/, ucfobj: false, },
на перезагрузку с очисткой кэша особо не надейтесь. Делайте ее, закрывайте браузер и проверяйте отсутствие / удаляйте startupCache.
Только вот зачем вам этот обрубок? Только что же обсуждали.
// Пункт контекстного меню закладок "Показать в папке", от Dumby, // работает во всех документах - окно, вкладка, сайдбар. // Появляется при не пустой строке поиска. // https://forum.mozilla-russia.org/viewtopic.php?pid=799551#p799551 // + https://forum.mozilla-russia.org/viewtopic.php?pid=801732#p801732 try {({ run(func) { var topics = ["quit-application-granted", "chrome-document-loaded"]; var obs = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); for(var t of topics) obs.addObserver(this, t, false); this.observe = (subj, topic) => this[topic[0]](subj); this.q = () => topics.forEach(t => obs.removeObserver(this, t)); this.run = async doc => { var code = `(${func})(document.getElementById("placesContext_editSeparator"));`; var ps = await doc.ownerGlobal.ChromeUtils .compileScript("data:charset=utf-8," + encodeURIComponent(code)); (this.run = ps.executeInGlobal.bind(ps))(doc); } var re = /\/(?:places|bookmarksSidebar)\.xhtml$/; this.c = doc => re.test(doc.documentURI) && this.run(doc); } }).run(sep => { var label = "Показать в папке"; var popup = sep.parentNode, listener = { handleEvent() { if (this.shouldHide) return; var menuitem = document.createXULElement("menuitem"); menuitem.setAttribute("label", label); menuitem.setAttribute("oncommand", "creator.goParentFolder();"); menuitem.creator = this; sep.before(menuitem); this.handleEvent = e => { if (e.target != popup) return; var sh = this.shouldHide; if (Boolean(menuitem.clientHeight) ^ sh) return; if ((menuitem.hidden = sh)) return; menuitem.disabled = false; } }, get shouldHide() { var node = popup._view.selectedNodes.length == 1 && popup._view.selectedNode; return !(node && PlacesUtils.nodeIsBookmark(node) && node.parent.type == node.RESULT_TYPE_QUERY); }, get goParentFolder() { var tree = popup._view; if (tree.id.startsWith("b")) { delete this.library; var func = () => this.sidebar(tree); } else { delete this.sidebar; var list = document.getElementById("placesList"); var func = () => this.library(popup._view, list); } delete this.goParentFolder; return this.goParentFolder = func; }, sidebar(tree) { var {bookmarkGuid} = tree.selectedNode; if (tree.result.root.uri.startsWith("place:terms=")) tree.place = tree.place; tree.selectItems([bookmarkGuid]); this.scroll(tree); }, async library(tree, list) { var {bookmarkGuid} = tree.selectedNode; var {parentGuid} = await PlacesUtils.bookmarks.fetch(bookmarkGuid); if (PlacesUtils.getConcreteItemGuid(list.selectedNode) == parentGuid) list.selectItems([PlacesUtils.virtualAllBookmarksGuid]); else { var rows = list.view._rows, lastRow = rows[rows.length - 1]; if (lastRow.bookmarkGuid == PlacesUtils.virtualAllBookmarksGuid) lastRow.containerOpen = true; } list.selectItems([parentGuid]); this.scroll(list); tree.selectItems([bookmarkGuid]); await new Promise(requestAnimationFrame); this.scroll(tree); }, scroll(tree) { var pos = .4, visibleRows = tree.getPageLength(); var ind = tree.view.selection.currentIndex; var first = tree.getFirstVisibleRow(); var newFirst = ind - pos*visibleRows + 1; // tree.scrollByLines(Math.round(newFirst - first)); // } tree.scrollByLines(Math.round(newFirst - first)); this.persist(tree.view); }, persist(view) { var du = document.documentURI, xs = Services.xulStore; var obf = PlacesUIUtils.obfuscateUrlForXulStore, set = obf ? u => xs.setValue(du, obf(u), "open", "true") : u => xs.setValue(du, u, "open", "true"); (this.persist = view => { for(var node of view._rows) node.containerOpen && set(node.uri) })(view); } // <<< }; popup.addEventListener("popupshowing", listener); addEventListener("unload", () => popup.removeEventListener("popupshowing", listener) , {once: true}); });} catch(ex) {Cu.reportError(ex);}
Отредактировано _zt (25-09-2022 16:54:44)
Отсутствует
Подскажите по такому вопросу:
при запуске FF открывается домашняя страница, а курсор (фокус) устанавливается в адресную строку и она выделяется голубенькой рамкой
лично по мне логично было бы установить его в строку поиска, которая посередине экрана и именно она бы подсвечивалась
Отредактировано Inko7 (25-09-2022 17:17:20)
Отсутствует
Если бы загрузки тоже отображались в Sidebar'е, окно библиотек мне вообще не нужно.
Может ещё работает в актуальной версии > https://forum.mozilla-russia.org/viewto … 24#p784824
Win7
Отсутствует
А можете еще переместить пункт в самый верх меню и добавить после него сепаратор?
Не исключено. Замена начала кода
try {({ run(func) { var topics = ["quit-application-granted", "chrome-document-loaded"]; var obs = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); for(var t of topics) obs.addObserver(this, t, false); this.observe = (subj, topic) => this[topic[0]](subj); this.q = () => topics.forEach(t => obs.removeObserver(this, t)); this.run = async doc => { var code = `(${func})(document.getElementById("placesContext"));`; var ps = await doc.ownerGlobal.ChromeUtils .compileScript("data:charset=utf-8," + encodeURIComponent(code)); (this.run = ps.executeInGlobal.bind(ps))(doc); } var re = /\/(?:places|bookmarksSidebar)\.xhtml$/; this.c = doc => re.test(doc.documentURI) && this.run(doc); } }).run(popup => { var label = "Показать в папке", listener = { handleEvent() { if (this.shouldHide) return; var menuitem = document.createXULElement("menuitem"); menuitem.setAttribute("label", label); menuitem.setAttribute("oncommand", "creator.goParentFolder();"); menuitem.creator = this; var sep = document.createXULElement("menuseparator"); popup.prepend(menuitem, sep); this.handleEvent = e => { if (e.target != popup) return; var sh = this.shouldHide; if (!( Boolean(menuitem.clientHeight) ^ sh || (menuitem.hidden = sep.hidden = sh) )) menuitem.disabled = false; } },
Как подсказывают, стилем нельзя.
Как это сделать с помощью скрипта?
Ясен пень нельзя. Стили не занимаются отслеживанием запуска и перемещением фокуса.
Вот, весьма криво, но, возможно, сойдёт (это код для custom_script.js).
Services.obs.addObserver(function wr(win, topic) { Services.obs.removeObserver(wr, topic); var re = /^about:(?:newtab|home)$/; var fs = 'data:,content.document.getElementById("newtab-search-text").focus();'; Array.from(CustomizableUI.windows).forEach(async win => { await win.gBrowserInit.firstContentWindowPaintPromise; var br = win.gBrowser.selectedBrowser; if (re.test(br.currentURI.spec)) br.focus(), br.messageManager.loadFrameScript(fs, false); }); }, "sessionstore-windows-restored");
Отсутствует
Dumby
Спасибо. Теперь вообще замечательно.
этот способ тоже не работает > lockPref("browser.download.panel.shown", false); + browser.download.alwaysOpenPanel = true
Работает, только что проверил на 105.
Может ещё работает в актуальной версии > https://forum.mozilla-russia.org/viewtopic.php?pid=784824#p784824
Работает.
Отсутствует
Работает, только что проверил на 105.
А у меня не работает! Работает, если в настройках включена опция"Сохранять файлы", что для меня не вариант, о чём я сообщил здесь > https://forum.mozilla-russia.org/viewtopic.php?pid=801691#p801691
Отредактировано kokoss (26-09-2022 00:02:10)
Win7
Отсутствует
Интересно, что Sidebar Tabs у меня не установлен, о чём сказал выше. А вот кнопка для него стоит, как раз для загрузок (спойлер в п.2). Запасливый, однако!
Отсутствует
kokoss
Вы правы.
lockPref("browser.download.panel.shown", false); + browser.download.alwaysOpenPanel = true
это "Показывать панель загрузок при окончании загрузки", а вам надо "при старте".
Отредактировано _zt (26-09-2022 07:08:08)
Отсутствует
Dumby
Вот, весьма криво, но, возможно, сойдёт (это код для custom_script.js).
Срабатывает как надо, но только один раз при старте браузера.
При открытии новой вкладки (плюсиком) или домашней страницы (домиком) курсор остается в адресной строке.
Отсутствует
но
Это что ещё за «но»?
data:image/png;base64,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
Отсутствует
возможно ли расширить функционал кода для вариантов открытия новой вкладки (плюсиком) или домашней страницы (домиком) ?
Даже не знаю, может подойдёт вариант "вообще всегда"?
(async fsu => { var beg = "resource:///actors/AboutNewTabParent."; try {var exp = ChromeUtils.importESModule(beg + "sys.mjs");} catch {exp = ChromeUtils.import(beg + "jsm");} var proto = exp.AboutNewTabParent.prototype; var rm = proto.receiveMessage; Object.assign(proto, {async receiveMessage(message) { if (message.name == "AboutNewTabVisible") { var br = this.browsingContext.top.embedderElement; br.focus(); br.messageManager.loadFrameScript(fsu, false); } return rm.call(this, message); }}); })("data:,content.document.getElementById('newtab-search-text').focus();");
Отсутствует
Dumby, посоветовали ваш скрипт для удаления "Панели закладок", "Меню закладок" и "Другие закладки" в боковой панели. Срабатывает отлично на версиях с 68 по 105 с небольшим побочным эффектом: на разделителях между папками появляется разрыв:
Можно это как-то исправить, кроме как удаления разделителей..? И можно ли придумать что-то подобное вашему скрипту для удаления вышеуказанного в "Библиотеке"..?
Отсутствует
скажите, пожалуйста, это осуществимо или нет..?
Да особо сказать нечего.
Заголовок это не часть документа, элемент туда не поместить.
Можно разве что текст подменить.
Например, переопределить метод gBrowser.updateTitlebar()
чтобы он устанавливал document.title со своим вставленным добром.
Ещё можно какой-нибудь <panel> поверх заголовка отобразить,
но я не знаю как по-простому сделать, чтобы за панельку можно было таскать окно,
плюс, заголовского контекстного меню у неё не будет.
Ну и настраивать код, конечно, придётся. То есть что-то типа
(async (n, id) => { var css = ` #${id} { margin-bottom: 2px; margin-right: 102px; border: 0; height: 18px; padding: 0 2px; -moz-appearance: none; background-color: transparent; } :root[sizemode=normal] #${id} { margin-bottom: 3px; } :root[sizemode=fullscreen] #${id} { visibility: collapse; } #${id} > hbox { color: white; height: 18px; font-weight: bold; background-color: red; } #${id} > hbox > box { padding: 0 4px; } `; var ucs = { esr: "ESR", beta: "Beta", release: "Release", nightly: "Nightly", aurora: "DevEdition", default: "Unbraindead", // ? }; var format = {weekday: "long", day: "numeric", month: "long", year: "numeric"}; var attrs = { id, noautohide: true, noautofocus: true, position: "before_end", consumeoutsideclicks: "never" }; css = css.replace(/;/g, " !important;"); var url = "data:text/css;charset=utf-8," + encodeURIComponent(css); windowUtils.loadSheetUsingURIString(url, windowUtils.USER_SHEET); var panel = n("panel"); var hbox = panel.appendChild(n("hbox")); for(var args of Object.entries(attrs)) panel.setAttribute(...args); document.getElementById("mainPopupSet").append(panel); var num = 3; while(num--) hbox.appendChild(n("box")).append(""); var [vers, time, date] = Array.from(hbox.children, b => b.firstChild); var arr = [ Services.appinfo.name, "v" + AppConstants.MOZ_APP_VERSION_DISPLAY, `(${Services.appinfo.is64Bit ? 64 : 32}-bit)` ]; var c = AppConstants.MOZ_UPDATE_CHANNEL, uc = ucs[c]; if (uc) { if (c == "esr") arr[1] = arr[1].slice(0, -3); arr.splice(1, 0, uc); } vers.data = arr.join(" "); var cd; var tick = () => { var dt = new Date(), d = dt.getDate(); if (d != cd) cd = d, upd(dt); time.data = dt.toLocaleTimeString("mn"); } var upd = d => date.data = d.toLocaleDateString("ru", format); tick(); window.setInterval(tick, 1e3); panel.ondblclick = e => { if (e.button) return; panel.collapsed = true; windowState == STATE_MAXIMIZED ? restore() : maximize(); panel.collapsed = false; } panel.openPopup(document.documentElement); var sr = panel.shadowRoot; if (sr) sr.firstChild.removeAttribute("part"); })(nn => document.createXULElement(nn), "vtd-info-panel");
скрипт для удаления
Скрипт ничего не удаляет.
Он меняет корневую ноду places-дерева с «Все закладки» на «Меню закладок».
Можно это как-то исправить, кроме как удаления разделителей..?
Не знаю. Ничего хорошего не придумал.
Так-то, вот этой "чёрточки слева" просто не должно быть.
Если пишу
#bookmarks-view > treechildren::-moz-tree-twisty(separator) {
padding: 0 !important;
}
то разрыв пропадает, но это сдвигает чуть влево и серараторы в субпапках.
А если пишу
#bookmarks-view > treechildren::-moz-tree-separator {
margin-right: 16px !important;
}
то слева сепараторы выглядят как надо, но теряют в продолжительности справа.
И можно ли придумать что-то подобное вашему скрипту для удаления вышеуказанного в "Библиотеке"..?
Да я пробовал раньше. И не раз. И ничего не получилось.
Отсутствует
Dumby
Ну и настраивать код, конечно, придётся.
На Win10 почти идеально выглядит без правок:
и текст не подменяется. Реально круто, спасибо!
если пишу
#bookmarks-view > treechildren::-moz-tree-separator {
margin-right: 16px !important;
}
Этот вариант мне больше понравился... сдвинутый влево почему-то глаз режет, а немного укороченный справа не напрягает совсем.
ничего не получилось
Разве такое может быть..?
Отсутствует