/* Restore 'Space & Separator' items script for Firefox 102+ by Aris Default browser scripts always remove spaces and separators from default palette, so because of that they are added to an own toolbar now. - spaces and separators can be moved to any toolbar - to remove spaces or separators move them into palette - configuration toolbar behaves like a default toolbar, items and buttons can be placed on it - configuration toolbar is not visible outside customizing mode - default "Flexible Space" item is hidden from palette and added to configuration toolbar [!] BUG: do not move spaces, flexible spaces or separator to configuration toolbar or it will cause glitches [!] BUG: do not move main 'space'-item to palette or it will be hidden until customizing mode gets reopened [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts) */ Components.utils.import("resource:///modules/CustomizableUI.jsm"); ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs"); var appversion = parseInt(Services.appinfo.version); var AddSeparator = { init: function() { if (location != 'chrome://browser/content/browser.xhtml') return; /* blank tab workaround */ try { if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank'); } catch(e) {} var tb_config_label = "Configuration Toolbar"; var tb_spacer_label = "Space"; var tb_sep_label = "Separator"; var tb_spring_label = "Flexible Space"; try { if(document.getElementById('configuration_toolbar') == null) { var tb_config = document.createXULElement("toolbar"); tb_config.setAttribute("id","configuration_toolbar"); tb_config.setAttribute("customizable","true"); tb_config.setAttribute("class","toolbar-primary chromeclass-toolbar browser-toolbar customization-target"); tb_config.setAttribute("mode","icons"); tb_config.setAttribute("iconsize","small"); tb_config.setAttribute("toolboxid","navigator-toolbox"); tb_config.setAttribute("lockiconsize","true"); tb_config.setAttribute("ordinal","1005"); tb_config.setAttribute("defaultset","toolbarspacer,toolbarseparator"); document.querySelector('#navigator-toolbox').appendChild(tb_config); CustomizableUI.registerArea("configuration_toolbar", {legacy: true}); CustomizableUI.registerToolbarNode(tb_config); var tb_label = document.createXULElement("label"); tb_label.setAttribute("label", tb_config_label+": "); tb_label.setAttribute("value", tb_config_label+": "); tb_label.setAttribute("id","tb_config_tb_label"); tb_label.setAttribute("removable","false"); tb_config.appendChild(tb_label); var tb_spacer = document.createXULElement("toolbarspacer"); tb_spacer.setAttribute("id","spacer"); tb_spacer.setAttribute("class","chromeclass-toolbar-additional"); tb_spacer.setAttribute("customizableui-areatype","toolbar"); tb_spacer.setAttribute("removable","false"); tb_spacer.setAttribute("label", tb_spacer_label); tb_config.appendChild(tb_spacer); var tb_sep = document.createXULElement("toolbarseparator"); tb_sep.setAttribute("id","separator"); tb_sep.setAttribute("class","chromeclass-toolbar-additional"); tb_sep.setAttribute("customizableui-areatype","toolbar"); tb_sep.setAttribute("removable","false"); tb_sep.setAttribute("label", tb_sep_label); tb_config.appendChild(tb_sep); var tb_spring = document.createXULElement("toolbarspring"); tb_spring.setAttribute("id","spring"); tb_spring.setAttribute("class","chromeclass-toolbar-additional"); tb_spring.setAttribute("customizableui-areatype","toolbar"); tb_spring.setAttribute("removable","false"); tb_spring.setAttribute("flex","1"); tb_spring.setAttribute("label", tb_spring_label); tb_config.appendChild(tb_spring); // CSS var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService); var uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(` #configuration_toolbar { appearance: none !important; background-color: var(--toolbar-bgcolor); background-image: var(--toolbar-bgimage); background-clip: padding-box; color: var(--toolbar-color, inherit); } #main-window:not([customizing]) #configuration_toolbar { visibility: collapse; } #main-window[customizing] #configuration_toolbar #tb_config_tb_label { font-weight: bold !important; } #main-window[customizing] #configuration_toolbar :is(#spacer,#separator,#spring) { margin-inline-start: 20px; } #main-window[customizing] #configuration_toolbar :is(#wrapper-spacer,#wrapper-separator,#wrapper-spring) .toolbarpaletteitem-label { display: block !important; margin-inline-end: 20px; } #main-window[customizing] #wrapper-spacer #spacer { margin: 2px 0 !important; } #main-window[customizing] #configuration_toolbar #wrapper-spring #spring { margin: -1px 0 !important; min-width: 80px !important; } #main-window[customizing] #configuration_toolbar > * { padding: 2px !important; } #main-window[customizing] #configuration_toolbar > :is(#wrapper-spacer,#wrapper-separator,#wrapper-spring) { border: 1px dotted !important; margin-inline-start: 2px !important; margin-inline-end: 2px !important; } #main-window[customizing] toolbarspacer { border: 1px solid !important; } toolbar[orient="vertical"] toolbarseparator { appearance: none !important; border-top: 1px solid rgba(15,17,38, 0.5) !important; border-bottom: 1px solid rgba(255,255,255, 0.3) !important; margin: 2px 2px !important; height: 1px !important; } toolbar[orient="vertical"] toolbarspacer { appearance: none !important; height: 18px !important; width: 18px !important; } #customization-palette toolbarpaletteitem[id^="wrapper-customizableui-special-spring"], #customization-palette-container :is(#spring,#wrapper-spring) { display: none !important; } #main-window:not([customizing]) toolbar:not(#configuration_toolbar) toolbarspring { max-width: 100% !important; } /*#menubar-items + spacer { display: none !important; }*/ `), null, null); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); } } catch(e){} } } /* initialization delay workaround */ document.addEventListener("DOMContentLoaded", AddSeparator.init(), false); /* Use the below code instead of the one above this line, if initialization issues occur on startup */ /* setTimeout(function(){ AddSeparator.init(); },2000); */