11diff --git a/browser/base/content/browser-sidebar.js b/browser/base/content/browser-sidebar.js
2- index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc820f8cc8 100644
2+ index 78afa499b4a93fc75e8706a9afb077e2b5ca7428..4da170628abea6eb8b9d3a81385d0d68c4e46449 100644
33--- a/browser/base/content/browser-sidebar.js
44+++ b/browser/base/content/browser-sidebar.js
5- @@ -2,10 +2,14 @@
6- * License, v. 2.0. If a copy of the MPL was not distributed with this
7- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
8-
9- +
10- /**
5+ @@ -6,6 +6,10 @@
116 * SidebarUI controls showing and hiding the browser sidebar.
127 */
138 var SidebarUI = {
9+ +
1410+ /**
1511+ * @returns {Map<string, { title: string, url?: string, menuId: string, triggerButtonId?: string, iconurl: string, bottom?: string }>}
1612+ */
1713 get sidebars() {
1814 if (this._sidebars) {
1915 return this._sidebars;
20- @@ -19,6 +23,8 @@ var SidebarUI = {
21- .getAttribute("label"),
16+ @@ -19,6 +23,7 @@ var SidebarUI = {
17+ get title() {
18+ return document.getElementById(elementId).getAttribute("label");
19+ },
20+ + bottom: false,
21+ ...rest,
22+ };
23+ }
24+ @@ -30,6 +35,7 @@ var SidebarUI = {
25+ elementId: "sidebar-switcher-bookmarks",
2226 url: "chrome://browser/content/places/bookmarksSidebar.xhtml",
2327 menuId: "menu_bookmarksSidebar",
2428+ iconurl: "chrome://global/skin/icons/bookmark-outline.svg",
25- + bottom: false,
26- },
29+ }),
2730 ],
2831 [
29- @@ -30 ,6 +36,8 @@ var SidebarUI = {
32+ @@ -39 ,6 +45,7 @@ var SidebarUI = {
3033 url: "chrome://browser/content/places/historySidebar.xhtml",
3134 menuId: "menu_historySidebar",
3235 triggerButtonId: "appMenuViewHistorySidebar",
3336+ iconurl: "chrome://browser/skin/history.svg",
34- + bottom: false,
35- },
37+ }),
3638 ],
3739 [
38- @@ -40 ,6 +48,8 @@ var SidebarUI = {
39- .getAttribute("label") ,
40+ @@ -47 ,6 +54,7 @@ var SidebarUI = {
41+ elementId: "sidebar-switcher-tabs" ,
4042 url: "chrome://browser/content/syncedtabs/sidebar.xhtml",
4143 menuId: "menu_tabsSidebar",
4244+ iconurl: "chrome://browser/skin/tab.svg",
43- + bottom: false,
44- },
45+ }),
4546 ],
4647 ]));
47- @@ -53,7 +63,10 @@ var SidebarUI = {
48- }
48+ @@ -61,6 +69,8 @@ var SidebarUI = {
4949 return (this._browser = document.getElementById("sidebar"));
5050 },
51- +
5251 POSITION_START_PREF: "sidebar.position_start",
5352+ SIDEBAR_TABS_PREF: "pulse.sidebar.enabled",
5453+ SIDEBAR_EXTENSIONS_PREF: "pulse.sidebar.extensions.enabled",
5554 DEFAULT_SIDEBAR_ID: "viewBookmarksSidebar",
5655
5756 // lastOpenedId is set in show() but unlike currentID it's not cleared out on hide
58- @@ -71 ,6 +84 ,8 @@ var SidebarUI = {
57+ @@ -78 ,6 +88 ,8 @@ var SidebarUI = {
5958 },
6059 _splitter: null,
6160 _icon: null,
@@ -64,23 +63,19 @@ index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc
6463 _reversePositionButton: null,
6564 _switcherPanel: null,
6665 _switcherTarget: null,
67- @@ -91,6 +106,10 @@ var SidebarUI = {
68- this._box = document.getElementById("sidebar-box");
69- this._splitter = document.getElementById("sidebar-splitter");
70- this._icon = document.getElementById("sidebar-icon");
71- +
66+ @@ -109,11 +121,28 @@ var SidebarUI = {
67+ this._switcherPanel = document.getElementById("sidebarMenu-popup");
68+ this._switcherTarget = document.getElementById("sidebar-switcher-target");
69+ this._switcherArrow = document.getElementById("sidebar-switcher-arrow");
7270+ this._sidebarIcons = document.getElementById("sidebar-icons");
7371+ this._sidebarBottomIcons = document.getElementById("sidebar-icons-bottom");
74- +
75- this._reversePositionButton = document.getElementById(
76- "sidebar-reverse-position"
77- );
78- @@ -102,9 +121,53 @@ var SidebarUI = {
72+
73+ this._switcherTarget.addEventListener("command", () => {
7974 this.toggleSwitcherPanel();
8075 });
8176
8277+ const sidebaritems = this.sidebars.keys();
83- + const sidebarExtensionVis = Services.prefs.getBoolPref(this.SIDEBAR_EXTENSIONS_PREF);
78+ + const sidebarExtensionVis = Services.prefs.getBoolPref(this.SIDEBAR_EXTENSIONS_PREF, false );
8479+ for (const sidebaritem of sidebaritems) {
8580+ if(this.sidebars.get(sidebaritem).extensionId && !sidebarExtensionVis) {
8681+ return;
@@ -96,10 +91,11 @@ index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc
9691+
9792 this._inited = true;
9893
94+ Services.obs.addObserver(this, "intl:app-locales-changed");
95+ @@ -121,6 +150,20 @@ var SidebarUI = {
9996 this._initDeferred.resolve();
100- +
101- + },
102- +
97+ },
98+
10399+ /**
104100+ * Set the sidebar tabs to be visible or not visible
105101+ * @param {boolean} visible Sets the sidebar to be visible or not visible
@@ -114,10 +110,14 @@ index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc
114110+ }
115111+ },
116112+
117- + // nsIObserver
113+ uninit() {
114+ // If this is the last browser window, persist various values that should be
115+ // remembered for after a restart / reopening a browser window.
116+ @@ -171,6 +214,55 @@ var SidebarUI = {
117+ break;
118+ }
119+ }
118120+
119- + observe(aSubject, aTopic, aData) {
120- + switch (aTopic) {
121121+ case "nsPref:changed":
122122+ switch (aData) {
123123+ case this.SIDEBAR_TABS_PREF:
@@ -126,13 +126,8 @@ index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc
126126+ }
127127+ break;
128128+ }
129- },
130-
131- uninit() {
132- @@ -135,6 +198,49 @@ var SidebarUI = {
133- }
134- },
135-
129+ + },
130+ +
136131+ createSidebarItem(id, icon, config) {
137132+ // if the sidebar item is already created, do nothing
138133+ if (document.getElementById(`sidebar-background-${id}`)) {
@@ -171,15 +166,10 @@ index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc
171166+ }
172167+ if(icon){
173168+ icon.remove()
174- + }
175- + },
176- +
177- +
178- +
179- /**
180- * Opens the switcher panel if it's closed, or closes it if it's open.
181- */
182- @@ -457,6 +563,10 @@ var SidebarUI = {
169+ }
170+ },
171+
172+ @@ -521,6 +613,10 @@ var SidebarUI = {
183173 return this._show(commandID).then(() => {
184174 this._loadSidebarExtension(commandID);
185175
@@ -190,7 +180,7 @@ index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc
190180 if (triggerNode) {
191181 updateToggleControlLabel(triggerNode);
192182 }
193- @@ -552 ,6 +662,25 @@ var SidebarUI = {
183+ @@ -618 ,6 +714,24 @@ var SidebarUI = {
194184
195185 this.selectMenuItem("");
196186
@@ -211,12 +201,11 @@ index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc
211201+
212202+ this._box.removeAttribute("checked")
213203+ }, 170);
214- +
215204+
216205 // Replace the document currently displayed in the sidebar with about:blank
217206 // so that we can free memory by unloading the page. We need to explicitly
218207 // create a new content viewer because the old one doesn't get destroyed
219- @@ -560 ,9 +689 ,6 @@ var SidebarUI = {
208+ @@ -626 ,9 +740 ,6 @@ var SidebarUI = {
220209 this.browser.setAttribute("src", "about:blank");
221210 this.browser.docShell.createAboutBlankContentViewer(null, null);
222211
@@ -226,43 +215,26 @@ index eb1ee9e2b868fa06af4ed88e1d54583cd4196880..4a4f2e926d2954003cd4b8cbacc318dc
226215 let selBrowser = gBrowser.selectedBrowser;
227216 selBrowser.focus();
228217 if (triggerNode) {
229- @@ -575,21 +701,31 @@ var SidebarUI = {
218+ @@ -641,10 +752,21 @@ var SidebarUI = {
230219 * none if the argument is an empty string.
231220 */
232221 selectMenuItem(commandID) {
233222+ // Pulse modification: This needs to update both which sidebar item is
234223+ // checked and which dropdown item is checked. Hence, we are overriding this
235224+ // method.
236- +
237225 for (let [id, { menuId, triggerButtonId }] of this.sidebars) {
238226 let menu = document.getElementById(menuId);
239227- let triggerbutton =
240- - triggerButtonId && document.getElementById(triggerButtonId);
241- + const dropdownTriggerButton = triggerButtonId && document.getElementById(triggerButtonId);
228+ + let dropdownTriggerButton =
229+ triggerButtonId && document.getElementById(triggerButtonId);
242230+ let sidebarTriggerButton = document.getElementById("sidebar-background-" + id);
243- +
244- + setCheckedForItem(id, menu, sidebarTriggerButton);
231+ +
232+ +
245233+ setCheckedForItem(id, menu, dropdownTriggerButton);
234+ + setCheckedForItem(id, menu, sidebarTriggerButton);
246235+ }
247236+
248- + function setCheckedForItem(id, menu, sidebarTriggureButton ) {
237+ + function setCheckedForItem(id, menu, triggerbutton ) {
249238 if (id == commandID) {
250239 menu.setAttribute("checked", "true");
251- - if (triggerbutton) {
252- - triggerbutton.setAttribute("checked", "true");
253- - updateToggleControlLabel(triggerbutton);
254- + if (sidebarTriggureButton) {
255- + sidebarTriggureButton.setAttribute("checked", "true");
256- + updateToggleControlLabel(sidebarTriggureButton);
257- }
258- } else {
259- menu.removeAttribute("checked");
260- - if (triggerbutton) {
261- - triggerbutton.removeAttribute("checked");
262- - updateToggleControlLabel(triggerbutton);
263- + if (sidebarTriggureButton) {
264- + sidebarTriggureButton.removeAttribute("checked");
265- + updateToggleControlLabel(sidebarTriggureButton);
266- }
267- }
268- }
240+ if (triggerbutton) {
0 commit comments