Vitaliy V.
В связи с
privacy.clearHistory.cache
privacy.clearHistory.cookiesAndStorage
privacy.clearHistory.historyFormDataAndDownloads
обновите пожалуйста скрипт 24-04-2024 16:46:34
Vitaliy V.
А переключение автоскрытия Sidebar Tabs не хотите сделать как раньше было, например по Ctrl+ЛКМ или Ctrl+ПКМ на кнопке?
И спасибо за контексты, но .onImage ожидаемо не работает, даже на явных картинках, например здесь на смайликах над полем ответа.
а нет, вру, на аватарках заработал и на иконках Firefox тоже.
Отредактировано _zt (13-06-2024 16:58:22)
Отсутствует
обновите пожалуйста скрипт
А добавить в
var itemsToClear = [
"historyFormDataAndDownloads",
"cookiesAndStorage",
...
?
А переключение автоскрытия Sidebar Tabs не хотите сделать как раньше было, например по Ctrl+ЛКМ или Ctrl+ПКМ на кнопке?
А как раньше было ? В самом Sidebar Tabs не было автоскрытия, а то что у вас стиль и/или скрипт был то там было просто показать/скрыть, наверное этот скрипт можно подправить чтобы работал так же.
Обнаружил баг не баг, но если модуль CustomizableUI вызывается слишком рано при старте, то получаем проблемы при сбросе настроек панелей инструментов
CustomizeMode: TypeError: can't access property "enable", gDefaultTheme is undefined _resetUIState resource:///modules/CustomizableUI.sys.mjs:3289 reset resource:///modules/CustomizableUI.sys.mjs:3248 reset resource:///modules/CustomizableUI.sys.mjs:4444 reset resource:///modules/CustomizeMode.sys.mjs:1234 Console.sys.mjs:506
Отредактировано Vitaliy V. (13-06-2024 21:06:28)
Отсутствует
то там было просто показать/скрыть
Нет, не просто
try {(() => { var label = "Sidebar Tabs", tooltiptext = "ЛКМ Sidebar Tabs\nShift+ЛКМ Toggle AutoHide", img = "data:image/svg+xml;base64...", pref = "extensions.ucf.sidebar_tabs.auto_hide"; var sidebar_tabs_button = { get style() { delete this.style; return this.style = "data:text/css;charset=utf-8," + encodeURIComponent(` #st_toolbox { --v-sidebar-min-width: 2px; --v-sidebar-min-width-normal: 10px; --v-sidebar-max-width: 20em; --v-sidebar-transition-delay-show: .3s; --v-sidebar-transition-delay-hide: .6s; --v-sidebar-transition-duration: .3s; /* ********************************************** */ position: relative !important; z-index: 1 !important; min-width: var(--v-sidebar-max-width) !important; width: var(--v-sidebar-max-width) !important; max-width: var(--v-sidebar-max-width) !important; overflow: hidden !important; opacity: 0 !important; --v-sidebar-margin-max-width: calc(-1 * var(--v-sidebar-max-width)); --v-sidebar-margin-left-locale-dir: 0; --v-sidebar-margin-right-locale-dir: var(--v-sidebar-margin-max-width); --v-sidebar-transform-locale-dir: -1; --v-sidebar-transform-locale-dir-visible: 1; margin-left: var(--v-sidebar-margin-left-locale-dir) !important; margin-right: var(--v-sidebar-margin-right-locale-dir) !important; transform: translateX(calc(var(--v-sidebar-transform-locale-dir) * (var(--v-sidebar-max-width) - var(--v-sidebar-min-width)))) !important; transition-timing-function: linear, step-start !important; transition-delay: var(--v-sidebar-transition-delay-hide), calc(var(--v-sidebar-transition-delay-hide) + var(--v-sidebar-transition-duration)) !important; transition-duration: var(--v-sidebar-transition-duration), 0s !important; transition-property: transform, opacity !important; border-inline-end: 1px solid var(--chrome-content-separator-color, rgba(127,127,127,.5)) !important; } *|*:root[sidebar_tabs_right="true"] #st_toolbox { border-inline-start: 1px solid var(--chrome-content-separator-color, rgba(127,127,127,.5)) !important; border-inline-end: none !important; } *|*:root[sidebar_tabs_right="true"] #st_toolbox, #st_toolbox:-moz-locale-dir(rtl) { --v-sidebar-margin-left-locale-dir: var(--v-sidebar-margin-max-width); --v-sidebar-margin-right-locale-dir: 0; --v-sidebar-transform-locale-dir: 1; --v-sidebar-transform-locale-dir-visible: -1; } *|*:root[sidebar_tabs_right="true"] #st_toolbox:-moz-locale-dir(rtl) { --v-sidebar-margin-left-locale-dir: 0; --v-sidebar-margin-right-locale-dir: var(--v-sidebar-margin-max-width); --v-sidebar-transform-locale-dir: -1; --v-sidebar-transform-locale-dir-visible: 1; } *|*:root[sizemode="normal"] #st_toolbox { --v-sidebar-min-width: var(--v-sidebar-min-width-normal) !important; } #st_toolbox:hover, #st_toolbox[sidebardrag] { transform: translateX(0px) !important; opacity: 1 !important; transition-delay: var(--v-sidebar-transition-delay-show) !important; } *|*:root[v_vertical_bar_visible][v_vertical_bar_start="true"][sidebar_tabs_right="false"] #st_toolbox, *|*:root[v_vertical_bar_visible][v_vertical_bar_start="false"][sidebar_tabs_right="true"] #st_toolbox { transform: translateX(calc(var(--v-sidebar-transform-locale-dir-visible) * var(--v-vertical_bar_width, 0px))) !important; opacity: 1 !important; transition-delay: 0s !important; } #browser > #st_splitter { display: none !important; } `); }, loadstyle(win) { try { win.windowUtils.loadSheetUsingURIString(this.style, win.windowUtils.USER_SHEET); } catch (e) {} }, removestyle(win) { try { win.windowUtils.removeSheetUsingURIString(this.style, win.windowUtils.USER_SHEET); } catch (e) {} }, }; CustomizableUI.createWidget({ id: "sidebar_tabs_button", label: label, tooltiptext: tooltiptext, defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, onBeforeCreated(doc) { if (Services.prefs.getBoolPref(pref, true)) sidebar_tabs_button.loadstyle(doc.defaultView); }, onCreated: function(btn) { btn.style.setProperty("list-style-image", `url("${img}")`); }, onCommand: function(e) { if (!e.shiftKey) e.target.sidebar_tabs_toggle(); else { let prf = Services.prefs.getBoolPref(pref, true), loadremove = !prf ? "loadstyle" : "removestyle"; Services.prefs.setBoolPref(pref, !prf); for (let win of CustomizableUI.windows) sidebar_tabs_button[loadremove](win); } } }); })();} catch(e) {}
А добавить в
var itemsToClear = [
Да вроде работает, по крайней мере куки и историю удаляет.
Я почему то думал, что там к privacy.cpd. привязка.
Отредактировано _zt (13-06-2024 22:01:25)
Отсутствует
Нет, не просто
Не просто это то что сейчас, раньше был просто стиль но это было не полноценное решение, сейчас можно изменять размер сайдбара, при перетаскивании или открытии ссылок сайдбар автоматически открывается ну и т.д. Но изменить режим работы на лету без перезагрузки довольно сложно так что пожалуй я не стану этого делать чтобы не усложнять. Но можете продолжать использовать этот стиль для обычного режима сайдбара, немного подправить только надо, если надо?
кнопочки добавить в историю и закладки "Свернуть все папки". Типа этих
Ну тут видимо лучше отдельные скрипты использовать это другие документы chrome://browser/content/places/(bookmarksSidebar | historySidebar).xhtml
а Sidebar Tabs только загружает эти документы но работает в основном chrome://browser/content/browser.xhtml
Отредактировано Vitaliy V. (13-06-2024 22:54:21)
Отсутствует
Vitaliy V.
Как для обычного, т.е. если я включу через этот скрипт автоскрытие, то автооткрытия не будет?
В общем, не важно, возможность переключения режима полезнее. Подправьте пожалуйста. Тогда можно просто ЛКМ, ПКМ, без модификаторов. ЛКМ - просто открытие/закрытие без изменения вкладки, а ПКМ режим.
но работает в основном chrome://browser/content/browser.xhtml
Понятно.
Отредактировано _zt (13-06-2024 23:13:50)
Отсутствует
Как вызвать информацию о странице? win.BrowserPageInfo(); не работает.
Vitaliy V.
Когда-то в боковой панели можно было открывать сайты. С тех пор у меня сохранилась кнопка.
Можно ли сделать так, чтобы сайт открывался в Sidebar Tabs из кнопки (т.е., если закрыт - открылся Sidebar Tabs на вкладке "Сайты", если открыт - перешёл на таб "Сайты" и открыл сайт)? Я видел пример с Вашим сайтом, но "не вкурил", как это повесить на кнопку, если такое возможно.
try { CustomizableUI.createWidget({ id: "add-decoder-app", type: "custom", label: "Декодеры", tooltiptext: [ "ЛКМ: Декодер Арт. Лебедева", "ПКМ: Универсальный декодер" ].join("\n"), localized: false, onBuild: function(document) { var trbn = document.createXULElement("toolbarbutton"); trbn.id = this.id; trbn.tooltipText = this.tooltiptext; trbn.label = this.label; trbn.setAttribute("context", false); trbn.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAQAAAAAAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAD///8AraXnAKWl5wCEe94Ac3PeAHNr1gAhGMYAGBC9ABgIvQAICL0AEAC9AAgAvQAAALUAAAAAAAAAAAAAAAAAiYmJiYmJiYiYmJiYmJiYmYmJiYmJiYmIiZmZmZmZmZmZmZmJiYmJiYkBBjBQBQOGmQEHMFAFA5iJAQdAUAUDh5kBCDBQBQOYiQEIMFAFA4iZAQYwUAUDmImJiYmJiYmJmJiYmJiYmJiJiYmJiYmJiZiYmJiYmJiYiYmJiYmJiYkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); trbn.addEventListener("click", function(event) { var win = event.target.ownerDocument.defaultView; win.SidebarController.hide(); if (event.button == 0) { win.gBrowser.selectedTab = win.gBrowser.addWebTab("https://www.artlebedev.ru/decoder/"); } if (event.button == 2) { win.gBrowser.selectedTab = win.gBrowser.addWebTab("https://2cyr.com/decode/"); } }, false); trbn.classList.add("toolbarbutton-1"); trbn.classList.add("chromeclass-toolbar-additional"); return trbn; } }); } catch(e) {}
Отсутствует
Как вызвать информацию о странице? win.BrowserPageInfo(); не работает.
Попробуйте так: win.BrowserCommands.pageInfo();
«The Truth Is Out There»
Отсутствует
если я включу через этот скрипт автоскрытие, то автооткрытия не будет?
В скрипте Sidebar Tabs должно быть AUTO_HIDE = false, если true то не сможете включить обычный режим.
также не менять ID = "ucf_sidebar_tabs"
С данным скриптом будет только "урезанное" автоскрытие, скрипт удаляет оригинальную кнопку
(async ( id = "ucf_sidebar_tabs_button", label = "Sidebar Tabs", tooltiptext = "ЛКМ: Открыть / Закрыть\nControl + ЛКМ: Отключить / Включить\nСКМ: Отключить / Включить\nПКМ: Переключить AutoHide", img = "resource://ucf_sidebar_tabs", pref = "extensions.ucf.sidebar_tabs.auto_hide", sidebar_tabs = { get style() { delete this.style; return this.style = `data:text/css;charset=utf-8,${encodeURIComponent(` #browser > #st_toolbox { --v-sidebar-min-width: 10px; --v-sidebar-transition-delay-show: .3s; --v-sidebar-transition-delay-hide: 2s; --v-sidebar-transition-duration: .2s; /* ********************************************** */ position: relative !important; z-index: 2 !important; min-width: var(--v-sidebar-tabs-width) !important; width: var(--v-sidebar-tabs-width) !important; max-width: var(--v-sidebar-tabs-width) !important; overflow: hidden !important; opacity: 0 !important; --v-sidebar-margin-max-width: calc(-1 * var(--v-sidebar-tabs-width)); --v-sidebar-transform-locale-dir: -1; --v-sidebar-transform-locale-dir-visible: 1; margin-inline-start: 0 !important; margin-inline-end: var(--v-sidebar-margin-max-width) !important; transform: translateX(calc(var(--v-sidebar-transform-locale-dir) * (var(--v-sidebar-tabs-width) - var(--v-sidebar-min-width)))) !important; &[sidebar_tabs_auto_hide] { transition-timing-function: linear, step-start, linear !important; transition-delay: var(--v-sidebar-transition-delay-hide), calc(var(--v-sidebar-transition-delay-hide) + var(--v-sidebar-transition-duration)), 0s !important; transition-duration: var(--v-sidebar-transition-duration), 0s, .2s !important; transition-property: transform, opacity, margin-top !important; } &[sidebar_tabs_auto_hide][sidebar_tabs_visible="hidden"] { transition-delay: 0s, var(--v-sidebar-transition-duration), 0s !important; } :root[sidebar_tabs_start="false"] & { margin-inline-start: var(--v-sidebar-margin-max-width) !important; margin-inline-end: 0 !important; } :root[sidebar_tabs_start="false"]:-moz-locale-dir(ltr) &, :root[sidebar_tabs_start="true"]:-moz-locale-dir(rtl) & { --v-sidebar-transform-locale-dir: 1; --v-sidebar-transform-locale-dir-visible: -1; } &[sidebar_tabs_auto_hide]:hover { transform: translateX(0px) !important; opacity: 1 !important; transition-delay: var(--v-sidebar-transition-delay-show), var(--v-sidebar-transition-delay-show), 0s !important; } &[sidebar_tabs_auto_hide][sidebar_tabs_visible^="visible"] { transform: translateX(0px) !important; opacity: 1 !important; transition-delay: 0s !important; } :root[v_vertical_bar_start="true"][sidebar_tabs_start="true"]:is([v_vertical_bar_visible="visible"],[v_vertical_bar_sidebar="true"]) &[sidebar_tabs_auto_hide], :root[v_vertical_bar_start="false"][sidebar_tabs_start="false"]:is([v_vertical_bar_visible="visible"],[v_vertical_bar_sidebar="true"]) &[sidebar_tabs_auto_hide] { transform: translateX(calc(var(--v-sidebar-transform-locale-dir-visible) * var(--v-vertical-bar-width, 0px))) !important; opacity: 1 !important; transition-delay: 0s !important; } :root[v_vertical_bar_visible] & { padding-inline: 0 !important; } } #browser > #st_splitter { display: none !important; } `)}`; }, async loadstyle(win) { win.windowUtils.loadSheetUsingURIString(this.style, win.windowUtils.USER_SHEET); win.setTimeout(() => win.ucf_custom_script_win.ucf_sidebar_tabs.toolbox.setAttribute("sidebar_tabs_auto_hide", "true"), 0); }, async removestyle(win) { win.windowUtils.removeSheetUsingURIString(this.style, win.windowUtils.USER_SHEET); win.ucf_custom_script_win.ucf_sidebar_tabs.toolbox.removeAttribute("sidebar_tabs_auto_hide"); }, showHide(win) { var st = win.ucf_custom_script_win.ucf_sidebar_tabs; if (!st.toolbox.hasAttribute("sidebar_tabs_auto_hide")) { st.toggle(); return; } st.st_vbox_container ||= st.toolbox; if (!st._open && st._visible) { st.isPanel = false; st.hideToolbar(true); } st.showHide(); if (!st._visible) win.setTimeout(() => st.toolbox.removeAttribute("sidebar_tabs_visible"), 0); }, }, ) => CustomizableUI.createWidget({ id, label, tooltiptext, defaultArea: CustomizableUI.AREA_NAVBAR, localized: false, onBeforeCreated_(doc) { if (Services.prefs.getBoolPref(pref, true)) sidebar_tabs.loadstyle(doc.defaultView); }, onBeforeCreated(doc) { this.onBeforeCreated = this.onBeforeCreated_; this.onBeforeCreated_(doc); CustomizableUI.destroyWidget("ucf_sidebar_tabs"); }, onCreated(btn) { btn.style.setProperty("list-style-image", `url("${img}")`); btn.setAttribute("context", ""); var st = btn.ownerGlobal.ucf_custom_script_win.ucf_sidebar_tabs; btn.checked = st._open; st.button = btn; var func = st.mouseup.toString(); Services.scriptloader.loadSubScript(`data:charset=utf-8,${encodeURIComponent(`this.mouseup = ${func.replace(/^(async\s)?.*?\(/, '$1function mouseup(') .replace(/\}$/g, 'setTimeout(() => this.toolbox.removeAttribute("sidebar_tabs_visible"), 0);}')}`)}`, st); }, onClick(e) { switch (e.button) { case 0: if (!e.getModifierState("Control")) sidebar_tabs.showHide(e.view); else e.view.ucf_custom_script_win.ucf_sidebar_tabs.toggle(); break; case 1: e.view.ucf_custom_script_win.ucf_sidebar_tabs.toggle(); break; case 2: let prf = Services.prefs.getBoolPref(pref, true), loadremove = !prf ? "loadstyle" : "removestyle"; Services.prefs.setBoolPref(pref, !prf); for (let win of CustomizableUI.windows) sidebar_tabs[loadremove](win); break; } }, }))();
Отредактировано Vitaliy V. (08-08-2024 14:38:26)
Отсутствует
Vitaliy V.
Спасибо.
Извините за навязчивость. Попробовал, и мысль засвербила.
Можно сделать вместо ЛКМ/СКМ/ПКМ список? Буду добавлять туда сайты и при клике по кнопке выбирать.
Сейчас попробовал, туда удобно добавить переводчики:
https://translate.google.com/?sl=auto&tl=ru&op=translate
https://translate.yandex.ru/
https://www.translate.com/
да много ещё чего можно... какой-нибудь канал онлайн-тв, например.
UPD: И сепаратор, если можно, темы разделять.
Отредактировано xrun1 (15-06-2024 09:27:57)
Отсутствует
Вопрос: как открыть Историю за месяц в окне Библиотеки ?
win.PlacesCommandHook.showPlacesOrganizer("History"); //покажет только за текущий день
xrun1 пишет
Как вызвать информацию о странице? win.BrowserPageInfo(); не работает.
Попробуйте так: win.BrowserCommands.pageInfo();
Зачем повторы вопросов? на 64 странице задача уже решена, код совместим для старых/новых версий :
BrowserEx("pageInfo"); работают все варианты: BrowserEx("reloadSkipCache") …… BrowserEx("reload")
Ещё в скрипте ucf_hookClicks.js много примеров решений разных вопросов, обсуждавшихся в теме.
Отредактировано Dobrov (15-06-2024 04:43:38)
Отсутствует
работают все варианты:
1. Разница в том, что Вы - разработчик и должны учитывать варианты. А я пользователь последней версии, в которой команда должна работать. Меня не интересует настройка в моём варианте предыдущих версий. В облаке есть бэкапы моих профилей с 80-й версии, установлю и откачусь, если понадобится.
2. Задал поиск в теме "win.BrowserPageInfo();", ничего не нашлось. А если бы нашёл Ваш код, что я из него понял?
Отсутствует
А что вы на СКМ хотели повесить, какие мысли были?
На ваше усмотрение, можно добавить действие после case 1:
Отредактировано Vitaliy V. (08-08-2024 14:47:53)
Отсутствует
Vitaliy V.
Cпасибо за обе кнопки.
URL-bar History Dropmarker отвалился. Поправите?
Отсутствует
_zt
URL-bar History Dropmarker больше года назад исправлен здесь.
Замените только BrowserReload(); на BrowserCommands.reload();
Добавлено 15-06-2024 21:00:08
Vitaliy V.
Чудо чудесное. Теперь вкладка "Сайты" в Sidebar Tabs у меня активно используется!
Отредактировано xrun1 (15-06-2024 21:00:08)
Отсутствует
Не работает на 128 dev и , а на 127 dev и старый код работает, Browser.reload(); никак не мешает. Только уведомления пустые были, просто галочка.
Отредактировано _zt (15-06-2024 21:45:46)
Отсутствует
Решил Sidebar Tabs в виде юзер скрипта добавить в UCF
Vitaliy V. или Dumby – кнопка-меню для Sidebar Tabs неудобна – адреса не изменить !
Просьба: в меню любой закладки на PlacesToolbarItems добавить «Открыть закладку в Sidebar Tabs»
Отсутствует
добавить
А в чём именно затруднение? Создаёшь и добавляешь.
Пишем, для начала, что-нибудь такое, и смотрим,
что не так, чего не хватает, и в какие окна загружать.
(async sel => { var sep = document.querySelector(sel); if (!sep) return; var popup = sep.parentNode; var menuitem = document.createXULElement("menuitem"); for(var args of Object.entries({ "node-type": "link", "selection-type": "single", label: "Открыть в Sidebar Tabs", id: "placesContext_open:sidebartabs", })) menuitem.setAttribute(...args); menuitem.addEventListener("command", () => { var {uri} = popup.triggerNode._placesNode || popup._view.selectedNode; Services.wm.getMostRecentBrowserWindow() .ucf_custom_script_win.ucf_sidebar_tabs.setPanel(4, uri); }); sep.before(menuitem); })("menupopup#placesContext > #placesContext_openSeparator");
Отсутствует
URL-bar History Dropmarker отвалился. Поправите?
(async ( id = Symbol("urlbarhistorydropmarker"), hidewhenusertyping = true, // скрывать dropmarker при вводе copyvalueistyped = true, // при вводе копировать содержимое адресной строки вместо URL currentURIlabel = "Адрес текущей страницы в буфере обмена!", valueIsTypedlabel = "Содержимое адресной строки в буфере обмена!", Ltooltiptext = "ЛКМ: Показать историю", Mtooltiptext = "СКМ: Обновить текущую страницу", // или false Rtooltiptext = "ПКМ: Копировать URL в буфер обмена", // или false ) => (this[id] = { dropmarker: null, pref: "browser.urlbar.suggest.history", get style() { delete this.style; return this.style = `data:text/css;charset=utf-8,${encodeURIComponent(` #urlbar .urlbar-history-dropmarker { list-style-image: url("chrome://global/skin/icons/arrow-down.svg") !important; transition: opacity 0.15s ease; } #urlbar[switchingtabs] > :is(#urlbar-input-container,.urlbar-input-container) > .urlbar-history-dropmarker { transition: none; } ${hidewhenusertyping ? `#urlbar[usertyping] > :is(#urlbar-input-container,.urlbar-input-container) > .urlbar-history-dropmarker { display: none; }` : ""} #nav-bar:not([customizing="true"]) > #nav-bar-customization-target > #urlbar-container:not(:hover) > #urlbar:not([focused]) > :is(#urlbar-input-container,.urlbar-input-container) > .urlbar-history-dropmarker { opacity: 0; } `)}`; }, get helper() { delete this.helper; return this.helper = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper); }, init() { this.UrlbarProviderPlaces = ChromeUtils.importESModule("resource:///modules/UrlbarProviderPlaces.sys.mjs").UrlbarProviderPlaces; this.UrlbarProviderInputHistory = ChromeUtils.importESModule("resource:///modules/UrlbarProviderInputHistory.sys.mjs").UrlbarProviderInputHistory; Services.prefs.addObserver(this.pref, this); setUnloadMap(id, this.destructor, this); if (Services.prefs.getBoolPref(this.pref, false)) this.createDropmarker(); }, get tooltipText() { delete this.tooltipText; return this.tooltipText = `${Ltooltiptext}${Mtooltiptext ? `\n${Mtooltiptext}` : ""}${Rtooltiptext ? `\n${Rtooltiptext}` : ""}`; }, createDropmarker() { windowUtils.loadSheetUsingURIString(this.style, windowUtils.USER_SHEET); var dropmarker = this.dropmarker = document.createXULElement("image"); dropmarker.className = "urlbar-page-action urlbar-history-dropmarker urlbar-icon"; dropmarker.tooltipText = this.tooltipText; document.querySelector("#urlbar #page-action-buttons").before(dropmarker); dropmarker.addEventListener("mousedown", this); if (Rtooltiptext || Mtooltiptext) dropmarker.addEventListener("click", this); }, removeDropmarker() { this.removeListeners(); this.dropmarker.remove(); this.dropmarker = null; windowUtils.removeSheetUsingURIString(this.style, windowUtils.USER_SHEET); }, removeListeners() { this.dropmarker.removeEventListener("mousedown", this); if (Rtooltiptext || Mtooltiptext) this.dropmarker.removeEventListener("click", this); }, observe() { if (!this.dropmarker) { if (Services.prefs.getBoolPref(this.pref, false)) this.createDropmarker(); } else this.removeDropmarker(); }, handleEvent(e) { this[e.type](e); }, mousedown(e) { if (e.button) return; e.preventDefault(); e.stopPropagation(); if (gURLBar.view.isOpen) gURLBar.view.close(); else { if (!gURLBar.valueIsTyped) this.UrlbarProviderPlaces.getPriority = this.UrlbarProviderInputHistory.getPriority = function() { delete this.getPriority; return 3; }; gURLBar.focus(); gURLBar.startQuery(); } }, click(e) { if (e.button === 0) return; e.preventDefault(); e.stopPropagation(); if (e.button === 1 && Mtooltiptext) { BrowserCommands.reload(); return; } if (!Rtooltiptext) return; var url, val; if (!gURLBar.valueIsTyped || !copyvalueistyped) url = gURLBar.makeURIReadable(gBrowser.selectedBrowser.currentURI).displaySpec, val = currentURIlabel; else url = gURLBar.untrimmedValue, val = valueIsTypedlabel; this.helper.copyString(url); ConfirmationHint.show(this.dropmarker, "", { hideArrow: true }); ConfirmationHint._message.removeAttribute("data-l10n-id"); ConfirmationHint._message.textContent = val; }, destructor() { if (this.dropmarker) this.removeListeners(); Services.prefs.removeObserver(this.pref, this); }, }).init())();
Отсутствует
А в чём именно затруднение? Создаёшь и добавляешь.
С нуля делать не умею, изучал контекст-меню undoBookmarks, но это не совсем то…
Добавил в шапку версию Sidebar Tabs с поддержкой закладок (два скрипта в одном)
Отсутствует
(два скрипта в одном)
Напрасно, тебе же Dumby сделал чтобы не только в основном окне работало но также в библиотеке или в самом сайдбаре
подключить в scriptsallchrome.load
{ path: "places_context_open.js", urlregxp: /chrome:\/\/browser\/content\/(?:browser|places\/(?:bookmarksSidebar|historySidebar|places))\.xhtml/, },
Небольшое обновление Sidebar Tabs, устранил проблему в режиме автоскрытия, когда при открытии из меню не всегда срабатывало авто открытие
Отсутствует