diff options
author | New Tobin Paradigm <email@mattatobin.com> | 2018-04-16 13:40:11 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-16 13:40:11 -0400 |
commit | 89f23776a88af1a9ce5b56282f6a45103b74c80a (patch) | |
tree | 562657b1c16acb53f967450143fe5e82d61a43a8 | |
parent | 0b4dae0b3fcc068b8fbed57301cc340fd5e48f92 (diff) | |
parent | 4e2383201dfd2b48081e11d2a62384269535caca (diff) | |
download | uxp-89f23776a88af1a9ce5b56282f6a45103b74c80a.tar.gz |
Merge pull request #195 from janekptacijarabaci/pm_toolbars_custom_persist_1
palemoon#903 a #975: Customizable toolbars - persist the attribute "collapsed" (backward compatible)
-rw-r--r-- | toolkit/content/customizeToolbar.js | 24 | ||||
-rw-r--r-- | toolkit/content/widgets/toolbar.xml | 53 | ||||
-rw-r--r-- | toolkit/locales/en-US/chrome/global/customizeToolbar.properties | 1 |
3 files changed, 69 insertions, 9 deletions
diff --git a/toolkit/content/customizeToolbar.js b/toolkit/content/customizeToolbar.js index b96b60b987..7400aaadc6 100644 --- a/toolkit/content/customizeToolbar.js +++ b/toolkit/content/customizeToolbar.js @@ -2,6 +2,8 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +const gToolbarInfoSeparators = ["|", "-"]; + var gToolboxDocument = null; var gToolbox = null; var gCurrentDragOverItem = null; @@ -173,9 +175,20 @@ function persistCurrentSets() // Remove custom toolbars whose contents have been removed. gToolbox.removeChild(toolbar); } else if (gToolbox.toolbarset) { + var hidingAttribute = toolbar.getAttribute("type") == "menubar" ? + "autohide" : "collapsed"; // Persist custom toolbar info on the <toolbarset/> - gToolbox.toolbarset.setAttribute("toolbar"+(++customCount), - toolbar.toolbarName + ":" + currentSet); + // Attributes: + // Names: "toolbarX" (X - the number of the toolbar) + // Values: "Name|HidingAttributeName-HidingAttributeValue|CurrentSet" + gToolbox.toolbarset.setAttribute("toolbar" + (++customCount), + toolbar.toolbarName + + gToolbarInfoSeparators[0] + + hidingAttribute + + gToolbarInfoSeparators[1] + + toolbar.getAttribute(hidingAttribute) + + gToolbarInfoSeparators[0] + + currentSet); gToolboxDocument.persist(gToolbox.toolbarset.id, "toolbar"+customCount); } } @@ -485,6 +498,11 @@ function addNewToolbar() continue; } + if (name.value.includes(gToolbarInfoSeparators[0])) { + message = stringBundle.getFormattedString("enterToolbarIllegalChars", [name.value]); + continue; + } + var dupeFound = false; // Check for an existing toolbar with the same display name @@ -506,7 +524,7 @@ function addNewToolbar() message = stringBundle.getFormattedString("enterToolbarDup", [name.value]); } - gToolbox.appendCustomToolbar(name.value, ""); + gToolbox.appendCustomToolbar(name.value, "", [null, null]); toolboxChanged(); diff --git a/toolkit/content/widgets/toolbar.xml b/toolkit/content/widgets/toolbar.xml index 548504e24a..e1f58f7aae 100644 --- a/toolkit/content/widgets/toolbar.xml +++ b/toolkit/content/widgets/toolbar.xml @@ -30,7 +30,7 @@ </field> <field name="externalToolbars"> - [] + [] </field> <!-- Set by customizeToolbar.js --> @@ -49,18 +49,54 @@ <constructor> <![CDATA[ + this.toolbarInfoSeparators = ["|", "-"]; + this.toolbarInfoLegacySeparator = ":"; // Look to see if there is a toolbarset. this.toolbarset = this.firstChild; - while (this.toolbarset && this.toolbarset.localName != "toolbarset") + while (this.toolbarset && this.toolbarset.localName != "toolbarset") { this.toolbarset = toolbarset.nextSibling; + } if (this.toolbarset) { // Create each toolbar described by the toolbarset. var index = 0; - while (toolbarset.hasAttribute("toolbar"+(++index))) { - var toolbarInfo = toolbarset.getAttribute("toolbar"+index); - var infoSplit = toolbarInfo.split(":"); - this.appendCustomToolbar(infoSplit[0], infoSplit[1]); + while (this.toolbarset.hasAttribute("toolbar" + (++index))) { + let hiddingAttribute = + this.toolbarset.getAttribute("type") == "menubar" + ? "autohide" : "collapsed"; + let toolbarInfo = this.toolbarset.getAttribute("toolbar" + index); + let infoSplit = toolbarInfo.split(this.toolbarInfoSeparators[0]); + if (infoSplit.length == 1) { + infoSplit = toolbarInfo.split(this.toolbarInfoLegacySeparator); + } + let infoName = infoSplit[0]; + let infoHidingAttribute = [null, null]; + let infoCurrentSet = ""; + let infoSplitLen = infoSplit.length; + switch (infoSplitLen) { + case 3: + // Pale Moon 27.2+ + // Basilisk (UXP) + infoHidingAttribute = infoSplit[1] + .split(this.toolbarInfoSeparators[1]); + infoCurrentSet = infoSplit[2]; + break; + case 2: + // Legacy: + // - toolbars from Pale Moon 27.0 - 27.1.x + // - Basilisk (moebius) + // The previous value (hiddingAttribute) isn't stored. + infoHidingAttribute = [hiddingAttribute, "false"]; + infoCurrentSet = infoSplit[1]; + break; + default: + Components.utils.reportError( + "Customizable toolbars - an invalid value:" + "\n" + + '"toolbar' + index + '" = "' + toolbarInfo + '"'); + break; + } + this.appendCustomToolbar( + infoName, infoCurrentSet, infoHidingAttribute); } } ]]> @@ -69,6 +105,7 @@ <method name="appendCustomToolbar"> <parameter name="aName"/> <parameter name="aCurrentSet"/> + <parameter name="aHidingAttribute"/> <body> <![CDATA[ if (!this.toolbarset) @@ -84,6 +121,10 @@ toolbar.setAttribute("iconsize", this.getAttribute("iconsize")); toolbar.setAttribute("context", this.toolbarset.getAttribute("context")); toolbar.setAttribute("class", "chromeclass-toolbar"); + // Restore persist the hiding attribute. + if (aHidingAttribute[0]) { + toolbar.setAttribute(aHidingAttribute[0], aHidingAttribute[1]); + } this.insertBefore(toolbar, this.toolbarset); return toolbar; diff --git a/toolkit/locales/en-US/chrome/global/customizeToolbar.properties b/toolkit/locales/en-US/chrome/global/customizeToolbar.properties index 0ec6d2c1db..b19152fab7 100644 --- a/toolkit/locales/en-US/chrome/global/customizeToolbar.properties +++ b/toolkit/locales/en-US/chrome/global/customizeToolbar.properties @@ -5,6 +5,7 @@ enterToolbarTitle=New Toolbar enterToolbarName=Enter a name for this toolbar: enterToolbarDup=There is already a toolbar with the name ā%Sā. Please enter a different name. +enterToolbarIllegalChars=The name contains illegal character "|". Please enter a different name. enterToolbarBlank=You must enter a name to create a new toolbar. separatorTitle=Separator springTitle=Flexible Space |