browser-menubar.js (8059B)
1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- 2 * This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 document.addEventListener( 7 "DOMContentLoaded", 8 () => { 9 let mainMenuBar = document.getElementById("main-menubar"); 10 11 mainMenuBar.addEventListener("command", event => { 12 switch (event.target.id) { 13 // == edit-menu == 14 case "menu_preferences": 15 openPreferences(undefined); 16 break; 17 18 // == view-menu == 19 case "menu_pageStyleNoStyle": 20 gPageStyleMenu.disableStyle(); 21 break; 22 case "menu_pageStylePersistentOnly": 23 gPageStyleMenu.switchStyleSheet(null); 24 break; 25 case "repair-text-encoding": 26 BrowserCommands.forceEncodingDetection(); 27 break; 28 case "enterFullScreenItem": 29 case "exitFullScreenItem": 30 BrowserCommands.fullScreen(); 31 break; 32 case "documentDirection-swap": 33 gBrowser.selectedBrowser.sendMessageToActor( 34 "SwitchDocumentDirection", 35 {}, 36 "SwitchDocumentDirection", 37 "roots" 38 ); 39 break; 40 41 // == history-menu == 42 case "sync-tabs-menuitem": 43 gSync.openSyncedTabsPanel(); 44 break; 45 case "hiddenTabsMenu": 46 gTabsPanel.showHiddenTabsPanel(event, "hidden-tabs-menuitem"); 47 break; 48 case "sync-setup": 49 gSync.openPrefs("menubar"); 50 break; 51 case "sync-enable": 52 gSync.openPrefs("menubar"); 53 break; 54 case "sync-unverifieditem": 55 gSync.openPrefs("menubar"); 56 break; 57 case "sync-syncnowitem": 58 gSync.doSync(event); 59 break; 60 case "sync-reauthitem": 61 gSync.openSignInAgainPage("menubar"); 62 break; 63 case "menu_openFirefoxView": 64 FirefoxViewHandler.openTab(); 65 break; 66 case "hiddenUndoCloseWindow": 67 SessionWindowUI.undoCloseWindow(0); 68 break; 69 70 // == menu_HelpPopup == 71 // (Duplicated in PanelUI._onHelpCommand) 72 case "menu_openHelp": 73 openHelpLink("firefox-help"); 74 break; 75 case "menu_layout_debugger": 76 toOpenWindowByType( 77 "mozapp:layoutdebug", 78 "chrome://layoutdebug/content/layoutdebug.xhtml" 79 ); 80 break; 81 case "feedbackPage": 82 openFeedbackPage(); 83 break; 84 case "helpSafeMode": 85 safeModeRestart(); 86 break; 87 case "troubleShooting": 88 openTroubleshootingPage(); 89 break; 90 case "menu_HelpPopup_reportPhishingtoolmenu": 91 openUILink(gSafeBrowsing.getReportURL("Phish"), event, { 92 triggeringPrincipal: 93 Services.scriptSecurityManager.createNullPrincipal({}), 94 }); 95 break; 96 case "menu_HelpPopup_reportPhishingErrortoolmenu": 97 gSafeBrowsing.reportFalseDeceptiveSite(); 98 break; 99 case "helpSwitchDevice": 100 openSwitchingDevicesPage(); 101 break; 102 case "aboutName": 103 openAboutDialog(); 104 break; 105 case "helpPolicySupport": 106 openTrustedLinkIn(Services.policies.getSupportMenu().URL.href, "tab"); 107 break; 108 case "torBrowserUserManual": 109 gBrowser.selectedTab = gBrowser.addTab("about:manual", { 110 triggeringPrincipal: 111 Services.scriptSecurityManager.getSystemPrincipal(), 112 }); 113 break; 114 } 115 }); 116 117 document 118 .getElementById("historyMenuPopup") 119 .addEventListener("command", event => { 120 // Handle commands/clicks on the descending menuitems that are 121 // history entries. 122 let historyMenu = document.getElementById("history-menu"); 123 historyMenu._placesView._onCommand(event); 124 }); 125 126 let bookmarksMenuPopup = document.getElementById("bookmarksMenuPopup"); 127 bookmarksMenuPopup.addEventListener("command", event => { 128 BookmarksEventHandler.onCommand(event); 129 }); 130 131 bookmarksMenuPopup.addEventListener("click", event => { 132 BookmarksEventHandler.onClick( 133 event, 134 bookmarksMenuPopup.parentNode._placesView 135 ); 136 }); 137 138 bookmarksMenuPopup.addEventListener("mouseup", event => { 139 BookmarksEventHandler.onMouseUp(event); 140 }); 141 142 const bookmarksMenu = document.getElementById("bookmarksMenu"); 143 bookmarksMenu.addEventListener("dragover", event => 144 PlacesMenuDNDHandler.onDragOver(event) 145 ); 146 bookmarksMenu.addEventListener("dragenter", event => 147 PlacesMenuDNDHandler.onDragEnter(event) 148 ); 149 bookmarksMenu.addEventListener("dragleave", event => 150 PlacesMenuDNDHandler.onDragLeave(event) 151 ); 152 bookmarksMenu.addEventListener("drop", event => 153 PlacesMenuDNDHandler.onDrop(event) 154 ); 155 156 mainMenuBar.addEventListener("popupshowing", event => { 157 // On macOS, we don't track whether activation of the native menubar happened 158 // with the keyboard. 159 if (AppConstants.platform != "macosx") { 160 // We only set the "openedwithkey" if a specific menu like "Edit" was opened 161 // instead of the general menu bar. (e.g. Alt+E instead of just Alt) 162 if (event.target.parentNode.parentNode == this) { 163 this.setAttribute( 164 "openedwithkey", 165 event.target.parentNode.openedWithKey 166 ); 167 } 168 } 169 170 switch (event.target.id) { 171 case "menu_FilePopup": 172 gFileMenu.onPopupShowing(event); 173 break; 174 case "menu_newUserContextPopup": 175 createUserContextMenu(event); 176 break; 177 case "menu_EditPopup": 178 updateEditUIVisibility(); 179 break; 180 case "view-menu-popup": 181 ToolbarContextMenu.onViewToolbarsPopupShowing(event); 182 break; 183 case "pageStyleMenuPopup": 184 gPageStyleMenu.fillPopup(event.target); 185 break; 186 case "historyMenuPopup": 187 if (!event.target.parentNode._placesView) { 188 new HistoryMenu(event); 189 } 190 191 AIWindow.appMenu(event, window); 192 break; 193 case "historyUndoPopup": 194 document 195 .getElementById("history-menu") 196 ._placesView.populateUndoSubmenu(); 197 break; 198 case "historyUndoWindowPopup": 199 document 200 .getElementById("history-menu") 201 ._placesView.populateUndoWindowSubmenu(); 202 break; 203 case "bookmarksMenuPopup": 204 BookmarkingUI.onMainMenuPopupShowing(event); 205 if (!event.target.parentNode._placesView) { 206 new PlacesMenu( 207 event, 208 `place:parent=${PlacesUtils.bookmarks.menuGuid}` 209 ); 210 } 211 break; 212 case "bookmarksToolbarFolderPopup": 213 if (!event.target.parentNode._placesView) { 214 new PlacesMenu( 215 event, 216 `place:parent=${PlacesUtils.bookmarks.toolbarGuid}` 217 ); 218 } 219 break; 220 case "otherBookmarksFolderPopup": 221 if (!event.target.parentNode._placesView) { 222 new PlacesMenu( 223 event, 224 `place:parent=${PlacesUtils.bookmarks.unfiledGuid}` 225 ); 226 } 227 break; 228 case "mobileBookmarksFolderPopup": 229 if (!event.target.parentNode._placesView) { 230 new PlacesMenu( 231 event, 232 `place:parent=${PlacesUtils.bookmarks.mobileGuid}` 233 ); 234 } 235 break; 236 case "menu_HelpPopup": 237 buildHelpMenu(); 238 break; 239 case "menu_ProfilesPopup": 240 gProfiles.onPopupShowing(event); 241 break; 242 } 243 }); 244 245 document 246 .getElementById("menu_EditPopup") 247 .addEventListener("popuphidden", () => { 248 updateEditUIVisibility(); 249 }); 250 }, 251 { once: true } 252 );