506 lines
15 KiB
JavaScript
506 lines
15 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* 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/. */
|
|
|
|
/* eslint-env mozilla/browser-window */
|
|
|
|
document.addEventListener(
|
|
"DOMContentLoaded",
|
|
() => {
|
|
const navigatorToolbox = document.getElementById("navigator-toolbox");
|
|
const widgetOverflow = document.getElementById("widget-overflow");
|
|
|
|
function onPopupShowing(event) {
|
|
switch (event.target.id) {
|
|
case "PlacesChevronPopup":
|
|
document
|
|
.getElementById("PlacesToolbar")
|
|
._placesView._onChevronPopupShowing(event);
|
|
break;
|
|
|
|
case "BMB_bookmarksPopup":
|
|
BookmarkingUI.onPopupShowing(event);
|
|
// fall-through
|
|
case "BMB_bookmarksToolbarPopup":
|
|
case "BMB_unsortedBookmarksPopup":
|
|
case "BMB_mobileBookmarksPopup":
|
|
if (!event.target.parentNode._placesView) {
|
|
let placeMap = {
|
|
BMB_bookmarksPopup: PlacesUtils.bookmarks.menuGuid,
|
|
BMB_bookmarksToolbarPopup: PlacesUtils.bookmarks.toolbarGuid,
|
|
BMB_unsortedBookmarksPopup: PlacesUtils.bookmarks.unfiledGuid,
|
|
BMB_mobileBookmarksPopup: PlacesUtils.bookmarks.mobileGuid,
|
|
};
|
|
new PlacesMenu(event, `place:parent=${placeMap[event.target.id]}`);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
navigatorToolbox.addEventListener("popupshowing", onPopupShowing);
|
|
widgetOverflow.addEventListener("popupshowing", onPopupShowing);
|
|
|
|
function onCommand(event) {
|
|
let element = event.target.closest(`
|
|
#firefox-view-button,
|
|
.content-analysis-indicator,
|
|
#bookmarks-toolbar-button,
|
|
#PlacesToolbar,
|
|
#import-button,
|
|
#bookmarks-menu-button,
|
|
#BMB_bookmarksPopup,
|
|
#BMB_viewBookmarksSidebar,
|
|
#BMB_searchBookmarks,
|
|
#BMB_viewBookmarksToolbar`);
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
switch (element.id) {
|
|
case "firefox-view-button":
|
|
FirefoxViewHandler.openTab();
|
|
break;
|
|
|
|
case "bookmarks-toolbar-button":
|
|
PlacesToolbarHelper.onPlaceholderCommand();
|
|
break;
|
|
|
|
case "PlacesToolbar":
|
|
case "BMB_bookmarksPopup":
|
|
BookmarksEventHandler.onCommand(event);
|
|
break;
|
|
|
|
case "import-button":
|
|
MigrationUtils.showMigrationWizard(window, {
|
|
entrypoint: MigrationUtils.MIGRATION_ENTRYPOINTS.BOOKMARKS_TOOLBAR,
|
|
});
|
|
break;
|
|
|
|
case "bookmarks-menu-button":
|
|
BookmarkingUI.onCommand(event);
|
|
break;
|
|
|
|
case "BMB_viewBookmarksSidebar":
|
|
SidebarController.toggle("viewBookmarksSidebar");
|
|
break;
|
|
|
|
case "BMB_searchBookmarks":
|
|
PlacesCommandHook.searchBookmarks();
|
|
break;
|
|
|
|
case "BMB_viewBookmarksToolbar":
|
|
BookmarkingUI.toggleBookmarksToolbar("bookmarks-widget");
|
|
break;
|
|
|
|
default:
|
|
if (element.classList.contains("content-analysis-indicator")) {
|
|
ContentAnalysis.showPanel(element, PanelUI);
|
|
} else {
|
|
throw new Error(`Missing case for #${element.id}`);
|
|
}
|
|
}
|
|
}
|
|
navigatorToolbox.addEventListener("command", onCommand);
|
|
widgetOverflow.addEventListener("command", onCommand);
|
|
|
|
function onMouseDown(event) {
|
|
let element = event.target.closest(`
|
|
#firefox-view-button,
|
|
#alltabs-button,
|
|
#pageActionButton,
|
|
#downloads-button,
|
|
#fxa-toolbar-menu-button,
|
|
#unified-extensions-button,
|
|
#library-button
|
|
`);
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
switch (element.id) {
|
|
case "firefox-view-button":
|
|
FirefoxViewHandler.openToolbarMouseEvent(event);
|
|
break;
|
|
|
|
case "alltabs-button":
|
|
gTabsPanel.showAllTabsPanel(event, "alltabs-button");
|
|
break;
|
|
|
|
case "pageActionButton":
|
|
BrowserPageActions.mainButtonClicked(event);
|
|
break;
|
|
|
|
case "downloads-button":
|
|
DownloadsIndicatorView.onCommand(event);
|
|
break;
|
|
|
|
case "fxa-toolbar-menu-button":
|
|
gSync.toggleAccountPanel(element, event);
|
|
break;
|
|
|
|
case "unified-extensions-button":
|
|
gUnifiedExtensions.togglePanel(event);
|
|
break;
|
|
|
|
case "library-button":
|
|
PanelUI.showSubView("appMenu-libraryView", element, event);
|
|
break;
|
|
|
|
default:
|
|
throw new Error(`Missing case for #${element.id}`);
|
|
}
|
|
}
|
|
navigatorToolbox.addEventListener("mousedown", onMouseDown);
|
|
widgetOverflow.addEventListener("mousedown", onMouseDown);
|
|
|
|
function onMouseUp(event) {
|
|
let element = event.target.closest(`
|
|
#PlacesToolbar,
|
|
#BMB_bookmarksPopup
|
|
`);
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
switch (element.id) {
|
|
case "PlacesToolbar":
|
|
case "BMB_bookmarksPopup":
|
|
BookmarksEventHandler.onMouseUp(event);
|
|
break;
|
|
|
|
default:
|
|
throw new Error(`Missing case for #${element.id}`);
|
|
}
|
|
}
|
|
navigatorToolbox.addEventListener("mouseup", onMouseUp);
|
|
widgetOverflow.addEventListener("mouseup", onMouseUp);
|
|
|
|
function onClick(event) {
|
|
const isLeftClick = event.button === 0;
|
|
|
|
let element = event.target.closest(`
|
|
#vertical-tabs-newtab-button,
|
|
#tabs-newtab-button,
|
|
#new-tab-button,
|
|
#back-button,
|
|
#forward-button,
|
|
#reload-button ,
|
|
#urlbar-go-button,
|
|
#reader-mode-button,
|
|
#picture-in-picture-button,
|
|
#urlbar-zoom-button,
|
|
#star-button-box,
|
|
#personal-toolbar-empty-description,
|
|
#home-button,
|
|
#PlacesToolbar,
|
|
#BMB_bookmarksPopup,
|
|
#tracking-protection-icon-container,
|
|
#identity-icon-box,
|
|
#identity-permission-box,
|
|
#translations-button,
|
|
#taskbar-tabs-button
|
|
`);
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
switch (element.id) {
|
|
case "vertical-tabs-newtab-button":
|
|
case "tabs-newtab-button":
|
|
case "new-tab-button":
|
|
gBrowser.handleNewTabMiddleClick(element, event);
|
|
break;
|
|
|
|
case "back-button":
|
|
case "forward-button":
|
|
case "reload-button":
|
|
checkForMiddleClick(element, event);
|
|
break;
|
|
|
|
case "urlbar-go-button":
|
|
gURLBar.handleCommand(event);
|
|
break;
|
|
|
|
case "reader-mode-button":
|
|
if (isLeftClick) {
|
|
AboutReaderParent.toggleReaderMode(event);
|
|
}
|
|
break;
|
|
|
|
case "picture-in-picture-button":
|
|
if (isLeftClick) {
|
|
PictureInPicture.toggleUrlbar(event);
|
|
}
|
|
break;
|
|
|
|
case "urlbar-zoom-button":
|
|
if (isLeftClick) {
|
|
FullZoom.resetFromURLBar();
|
|
}
|
|
break;
|
|
|
|
case "star-button-box":
|
|
BrowserPageActions.doCommandForAction(
|
|
PageActions.actionForID("bookmark"),
|
|
event,
|
|
element
|
|
);
|
|
break;
|
|
|
|
case "personal-toolbar-empty-description":
|
|
if (isLeftClick && event.target.localName == "a") {
|
|
PlacesCommandHook.showPlacesOrganizer("BookmarksToolbar");
|
|
}
|
|
break;
|
|
|
|
case "home-button":
|
|
BrowserCommands.home(event);
|
|
break;
|
|
|
|
case "PlacesToolbar":
|
|
BookmarksEventHandler.onClick(event, element._placesView);
|
|
break;
|
|
|
|
case "BMB_bookmarksPopup":
|
|
BookmarksEventHandler.onClick(event, element.parentNode._placesView);
|
|
break;
|
|
|
|
case "tracking-protection-icon-container":
|
|
gProtectionsHandler.handleProtectionsButtonEvent(event);
|
|
break;
|
|
|
|
case "identity-icon-box":
|
|
gIdentityHandler.handleIdentityButtonEvent(event);
|
|
PageProxyClickHandler(event);
|
|
break;
|
|
|
|
case "identity-permission-box":
|
|
gPermissionPanel.handleIdentityButtonEvent(event);
|
|
PageProxyClickHandler(event);
|
|
break;
|
|
|
|
case "translations-button":
|
|
FullPageTranslationsPanel.open(event);
|
|
break;
|
|
|
|
default:
|
|
throw new Error(`Missing case for #${element.id}`);
|
|
}
|
|
}
|
|
navigatorToolbox.addEventListener("click", onClick);
|
|
widgetOverflow.addEventListener("click", onClick);
|
|
document.getElementById("sidebar-main").addEventListener("click", onClick);
|
|
|
|
function onKeyPress(event) {
|
|
const isLikeLeftClick = event.key === "Enter" || event.key === " ";
|
|
|
|
let element = event.target.closest(`
|
|
#reader-mode-button,
|
|
#picture-in-picture-button,
|
|
#urlbar-zoom-button,
|
|
#star-button-box,
|
|
#personal-toolbar-empty-description,
|
|
#home-button,
|
|
#tracking-protection-icon-container,
|
|
#identity-icon-box,
|
|
#identity-permission-box,
|
|
#translations-button,
|
|
#alltabs-button,
|
|
#pageActionButton,
|
|
#downloads-button,
|
|
#fxa-toolbar-menu-button,
|
|
#unified-extensions-button,
|
|
#library-button
|
|
`);
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
switch (element.id) {
|
|
case "reader-mode-button":
|
|
if (isLikeLeftClick) {
|
|
AboutReaderParent.toggleReaderMode(event);
|
|
}
|
|
break;
|
|
|
|
case "picture-in-picture-button":
|
|
if (isLikeLeftClick) {
|
|
PictureInPicture.toggleUrlbar(event);
|
|
}
|
|
break;
|
|
|
|
case "urlbar-zoom-button":
|
|
if (isLikeLeftClick) {
|
|
FullZoom.resetFromURLBar();
|
|
}
|
|
break;
|
|
|
|
case "star-button-box":
|
|
// This already handles checking for enter and space.
|
|
BrowserPageActions.doCommandForAction(
|
|
PageActions.actionForID("bookmark"),
|
|
event,
|
|
element
|
|
);
|
|
break;
|
|
|
|
case "personal-toolbar-empty-description":
|
|
if (isLikeLeftClick && event.target.localName == "a") {
|
|
PlacesCommandHook.showPlacesOrganizer("BookmarksToolbar");
|
|
}
|
|
break;
|
|
|
|
case "home-button":
|
|
if (isLikeLeftClick) {
|
|
BrowserCommands.home(event);
|
|
}
|
|
break;
|
|
|
|
case "tracking-protection-icon-container":
|
|
gProtectionsHandler.handleProtectionsButtonEvent(event);
|
|
break;
|
|
|
|
case "identity-icon-box":
|
|
gIdentityHandler.handleIdentityButtonEvent(event);
|
|
break;
|
|
|
|
case "identity-permission-box":
|
|
gPermissionPanel.handleIdentityButtonEvent(event);
|
|
break;
|
|
|
|
case "translations-button":
|
|
FullPageTranslationsPanel.open(event);
|
|
break;
|
|
|
|
case "alltabs-button":
|
|
gTabsPanel.showAllTabsPanel(event, "alltabs-button");
|
|
break;
|
|
|
|
case "pageActionButton":
|
|
BrowserPageActions.mainButtonClicked(event);
|
|
break;
|
|
|
|
case "downloads-button":
|
|
DownloadsIndicatorView.onCommand(event);
|
|
break;
|
|
|
|
case "fxa-toolbar-menu-button":
|
|
gSync.toggleAccountPanel(element, event);
|
|
break;
|
|
|
|
case "unified-extensions-button":
|
|
gUnifiedExtensions.togglePanel(event);
|
|
break;
|
|
|
|
case "library-button":
|
|
PanelUI.showSubView("appMenu-libraryView", element, event);
|
|
break;
|
|
|
|
default:
|
|
throw new Error(`Missing case for #${element.id}`);
|
|
}
|
|
}
|
|
// Make sure this preempts browser-toolbarKeyNav.js.
|
|
navigatorToolbox.addEventListener("keypress", onKeyPress, {
|
|
capture: true,
|
|
});
|
|
widgetOverflow.addEventListener("keypress", onKeyPress, { capture: true });
|
|
|
|
function onDragAndDrop(event) {
|
|
let element = event.target.closest(`
|
|
#new-tab-button,
|
|
#downloads-button,
|
|
#new-window-button,
|
|
#bookmarks-menu-button,
|
|
#home-button
|
|
`);
|
|
if (!element) {
|
|
return;
|
|
}
|
|
|
|
switch (element.id) {
|
|
case "new-tab-button":
|
|
if (event.type === "dragenter" || event.type === "dragover") {
|
|
ToolbarDropHandler.onDragOver(event);
|
|
} else if (event.type === "drop") {
|
|
ToolbarDropHandler.onDropNewTabButtonObserver(event);
|
|
}
|
|
break;
|
|
|
|
case "downloads-button":
|
|
if (event.type === "dragenter" || event.type === "dragover") {
|
|
DownloadsIndicatorView.onDragOver(event);
|
|
} else if (event.type === "drop") {
|
|
DownloadsIndicatorView.onDrop(event);
|
|
}
|
|
break;
|
|
|
|
case "new-window-button":
|
|
if (event.type === "dragenter" || event.type === "dragover") {
|
|
ToolbarDropHandler.onDragOver(event);
|
|
} else if (event.type === "drop") {
|
|
ToolbarDropHandler.onDropNewWindowButtonObserver(event);
|
|
}
|
|
break;
|
|
|
|
case "bookmarks-menu-button":
|
|
switch (event.type) {
|
|
case "dragenter":
|
|
PlacesMenuDNDHandler.onDragEnter(event);
|
|
break;
|
|
case "dragover":
|
|
PlacesMenuDNDHandler.onDragOver(event);
|
|
break;
|
|
case "dragleave":
|
|
PlacesMenuDNDHandler.onDragLeave(event);
|
|
break;
|
|
case "drop":
|
|
PlacesMenuDNDHandler.onDrop(event);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case "home-button":
|
|
if (event.type === "dragenter" || event.type === "dragover") {
|
|
if (HomePage.locked) {
|
|
return;
|
|
}
|
|
ToolbarDropHandler.onDragOver(event);
|
|
event.dropEffect = "link";
|
|
} else if (event.type == "drop") {
|
|
ToolbarDropHandler.onDropHomeButtonObserver(event);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
throw new Error(`Missing case for #${element.id}`);
|
|
}
|
|
}
|
|
|
|
navigatorToolbox.addEventListener("dragenter", onDragAndDrop);
|
|
widgetOverflow.addEventListener("dragenter", onDragAndDrop);
|
|
navigatorToolbox.addEventListener("dragover", onDragAndDrop);
|
|
widgetOverflow.addEventListener("dragover", onDragAndDrop);
|
|
navigatorToolbox.addEventListener("dragleave", onDragAndDrop);
|
|
widgetOverflow.addEventListener("dragleave", onDragAndDrop);
|
|
navigatorToolbox.addEventListener("drop", onDragAndDrop);
|
|
widgetOverflow.addEventListener("drop", onDragAndDrop);
|
|
|
|
document
|
|
.getElementById("identity-box")
|
|
.addEventListener("dragstart", event => {
|
|
gIdentityHandler.onDragStart(event);
|
|
});
|
|
|
|
let trackingProtectionIconContainer = document.getElementById(
|
|
"tracking-protection-icon-container"
|
|
);
|
|
trackingProtectionIconContainer.addEventListener("focus", () => {
|
|
gProtectionsHandler.onTrackingProtectionIconHoveredOrFocused();
|
|
});
|
|
trackingProtectionIconContainer.addEventListener("mouseover", () => {
|
|
gProtectionsHandler.onTrackingProtectionIconHoveredOrFocused();
|
|
});
|
|
},
|
|
{ once: true }
|
|
);
|