MSFX/chrome/space_and_separator_restore...

208 lines
7.9 KiB
JavaScript

// Restore 'Space & Separator' items script for Firefox 60+ 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)
(function () {
Components.utils.import("resource:///modules/CustomizableUI.jsm");
var appversion = parseInt(Services.appinfo.version);
var AddSeparator = {
init: function () {
if (
appversion >= 76 &&
location != "chrome://browser/content/browser.xhtml"
)
return;
try {
document
.getElementById("back-button")
.setAttribute("removable", "true");
document
.getElementById("forward-button")
.setAttribute("removable", "true");
} catch (e) {}
/* 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) {
if (appversion <= 62)
var tb_config = document.createElement("toolbar");
else 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,
});
if (appversion >= 65) CustomizableUI.registerToolbarNode(tb_config);
if (appversion <= 62) var tb_label = document.createElement("label");
else 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);
if (appversion <= 62)
var tb_spacer = document.createElement("toolbarspacer");
else 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);
if (appversion <= 62)
var tb_sep = document.createElement("toolbarseparator");
else 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);
if (appversion <= 62)
var tb_spring = document.createElement("toolbarspring");
else 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 { \
-moz-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 :-moz-any(#spacer,#separator,#spring) { \
-moz-margin-start: 20px; \
}\
#main-window[customizing] #configuration_toolbar :-moz-any(#wrapper-spacer,#wrapper-separator,#wrapper-spring) .toolbarpaletteitem-label { \
display: block !important; \
-moz-margin-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: 10px !important; \
}\
#main-window[customizing] #configuration_toolbar > :-moz-any(#wrapper-spacer,#wrapper-separator,#wrapper-spring) { \
border: 1px dotted !important; \
-moz-margin-start: 2px !important; \
-moz-margin-end: 2px !important; \
}\
#main-window[customizing] toolbarspacer { \
border: 1px solid !important; \
}\
toolbar[orient="vertical"] toolbarseparator { \
-moz-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; \
width: 18px !important; \
}\
toolbar[orient="vertical"] toolbarspacer { \
-moz-appearance: none !important; \
height: 18px !important; \
width: 18px !important; \
}\
#customization-palette toolbarpaletteitem[id^="wrapper-customizableui-special-spring"], \
#customization-palette-container :-moz-any(#spring,#wrapper-spring) { \
display: none !important; \
}\
#main-window:not([customizing]) toolbar:not(#configuration_toolbar) toolbarspring {\
max-width: 100% !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 issues occur */
/*
setTimeout(function(){
AddSeparator.init();
},2000);
*/
})();