1
0
Fork 0
firefox/browser/base/content/browser-context.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

386 lines
13 KiB
JavaScript

/* 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 IS_WEBEXT_PANELS =
document.documentElement.id === "webextpanels-window";
const contextMenuPopup = document.getElementById("contentAreaContextMenu");
// eslint-disable-next-line complexity
contextMenuPopup.addEventListener("command", event => {
switch (event.target.id) {
case "context-viewsource-goToLine":
gViewSourceUtils
.getPageActor(gContextMenu.browser)
.promptAndGoToLine();
break;
case "context-viewsource-wrapLongLines":
Services.prefs.setBoolPref(
"view_source.wrap_long_lines",
!Services.prefs.getBoolPref("view_source.wrap_long_lines", false)
);
break;
case "context-viewsource-highlightSyntax":
Services.prefs.setBoolPref(
"view_source.syntax_highlight",
!Services.prefs.getBoolPref("view_source.syntax_highlight", false)
);
break;
case "spell-add-to-dictionary":
InlineSpellCheckerUI.addToDictionary();
break;
case "spell-undo-add-to-dictionary":
InlineSpellCheckerUI.undoAddToDictionary();
break;
case "context-openlinkincurrent":
gContextMenu.openLinkInCurrent();
break;
case "context-openlinkincontainertab":
case "context-openlinkintab":
gContextMenu.openLinkInTab(event);
break;
case "context-openlink":
gContextMenu.openLink();
break;
case "context-openlinkprivate":
gContextMenu.openLinkInPrivateWindow();
break;
case "context-bookmarklink":
gContextMenu.bookmarkLink();
break;
case "context-savelink":
gContextMenu.saveLink();
break;
case "context-savelinktopocket":
Pocket.savePage(gContextMenu.browser, gContextMenu.linkURL);
break;
case "context-copyemail":
gContextMenu.copyEmail();
break;
case "context-copyphone":
gContextMenu.copyPhone();
break;
case "context-copylink":
gContextMenu.copyLink();
break;
case "context-previewlink":
gContextMenu.previewLink();
break;
case "context-stripOnShareLink":
gContextMenu.copyStrippedLink();
break;
case "context-media-play":
gContextMenu.mediaCommand("play");
break;
case "context-media-pause":
gContextMenu.mediaCommand("pause");
break;
case "context-media-mute":
gContextMenu.mediaCommand("mute");
break;
case "context-media-unmute":
gContextMenu.mediaCommand("unmute");
break;
case "context-media-playbackrate-050x":
gContextMenu.mediaCommand("playbackRate", 0.5);
break;
case "context-media-playbackrate-100x":
gContextMenu.mediaCommand("playbackRate", 1.0);
break;
case "context-media-playbackrate-125x":
gContextMenu.mediaCommand("playbackRate", 1.25);
break;
case "context-media-playbackrate-150x":
gContextMenu.mediaCommand("playbackRate", 1.5);
break;
case "context-media-playbackrate-200x":
gContextMenu.mediaCommand("playbackRate", 2.0);
break;
case "context-media-loop":
gContextMenu.mediaCommand("loop");
break;
case "context-leave-dom-fullscreen":
gContextMenu.leaveDOMFullScreen();
break;
case "context-video-fullscreen":
gContextMenu.mediaCommand("fullscreen");
break;
case "context-media-hidecontrols":
gContextMenu.mediaCommand("hidecontrols");
break;
case "context-media-showcontrols":
gContextMenu.mediaCommand("showcontrols");
break;
case "context-viewimage":
case "context-viewvideo":
gContextMenu.viewMedia(event);
break;
case "context-video-pictureinpicture":
gContextMenu.mediaCommand("pictureinpicture");
break;
case "context-reloadimage":
gContextMenu.reloadImage();
break;
case "context-video-saveimage":
gContextMenu.saveVideoFrameAsImage();
break;
case "context-saveaudio":
case "context-saveimage":
case "context-savevideo":
gContextMenu.saveMedia();
break;
case "context-copyimage-contents":
goDoCommand("cmd_copyImage");
break;
case "context-copyaudiourl":
case "context-copyimage":
case "context-copyvideourl":
gContextMenu.copyMediaLocation();
break;
case "context-sendaudio":
case "context-sendimage":
case "context-sendvideo":
gContextMenu.sendMedia();
break;
case "context-imagetext":
gContextMenu.getImageText();
break;
case "context-viewimageinfo":
gContextMenu.viewImageInfo();
break;
case "context-viewimagedesc":
gContextMenu.viewImageDesc(event);
break;
case "context-setDesktopBackground":
gContextMenu.setDesktopBackground();
break;
case "context-bookmarkpage":
gContextMenu.bookmarkThisPage();
break;
case "context-savepage":
gContextMenu.savePageAs();
break;
case "context-pocket":
Pocket.savePage(
gContextMenu.browser,
gContextMenu.browser.currentURI.spec,
gContextMenu.browser.contentTitle
);
break;
case "fill-login-generated-password":
gContextMenu.useGeneratedPassword();
break;
case "use-relay-mask":
gContextMenu.useRelayMask();
break;
case "manage-saved-logins":
gContextMenu.openPasswordManager();
break;
case "context-pdfjs-highlight-selection":
gContextMenu.pdfJSCmd("highlightSelection");
break;
case "context-reveal-password":
gContextMenu.toggleRevealPassword();
break;
case "context-print-selection":
gContextMenu.printSelection();
break;
case "context-pdfjs-undo":
gContextMenu.pdfJSCmd("undo");
break;
case "context-pdfjs-redo":
gContextMenu.pdfJSCmd("redo");
break;
case "context-pdfjs-cut":
gContextMenu.pdfJSCmd("cut");
break;
case "context-pdfjs-copy":
gContextMenu.pdfJSCmd("copy");
break;
case "context-pdfjs-paste":
gContextMenu.pdfJSCmd("paste");
break;
case "context-pdfjs-delete":
gContextMenu.pdfJSCmd("delete");
break;
case "context-pdfjs-selectall":
gContextMenu.pdfJSCmd("selectAll");
break;
case "context-take-screenshot":
gContextMenu.takeScreenshot();
break;
case "context-keywordfield":
if (!gContextMenu) {
throw new Error("Context menu doesn't seem to be open.");
}
gContextMenu.addKeywordForSearchField();
break;
case "context-add-engine":
if (!gContextMenu) {
throw new Error("Context menu doesn't seem to be open.");
}
gContextMenu.addSearchFieldAsEngine().catch(console.error);
break;
case "context-searchselect": {
let { searchTerms, usePrivate, principal, csp } = event.target;
SearchUIUtils.loadSearchFromContext(
window,
searchTerms,
usePrivate,
principal,
csp,
event
);
break;
}
case "context-searchselect-private": {
let { searchTerms, principal, csp } = event.target;
SearchUIUtils.loadSearchFromContext(
window,
searchTerms,
true,
principal,
csp,
event
);
break;
}
case "context-translate-selection":
gContextMenu.openSelectTranslationsPanel(event);
break;
case "context-showonlythisframe":
gContextMenu.showOnlyThisFrame();
break;
case "context-openframeintab":
gContextMenu.openFrameInTab();
break;
case "context-openframe":
gContextMenu.openFrame();
break;
case "context-reloadframe":
gContextMenu.reloadFrame(event);
break;
case "context-bookmarkframe":
gContextMenu.addBookmarkForFrame();
break;
case "context-saveframe":
gContextMenu.saveFrame();
break;
case "context-printframe":
gContextMenu.printFrame();
break;
case "context-take-frame-screenshot":
gContextMenu.takeScreenshot();
break;
case "context-viewframesource":
gContextMenu.viewFrameSource();
break;
case "context-viewframeinfo":
gContextMenu.viewFrameInfo();
break;
case "spell-check-enabled":
InlineSpellCheckerUI.toggleEnabled(window);
break;
case "spell-add-dictionaries":
case "spell-add-dictionaries-main":
gContextMenu.addDictionaries();
break;
case "context-bidi-page-direction-toggle":
gContextMenu.switchPageDirection();
break;
case "context-viewpartialsource-selection":
gContextMenu.viewPartialSource();
break;
case "context-viewsource":
BrowserCommands.viewSource(gContextMenu.browser);
break;
case "context-inspect-a11y":
gContextMenu.inspectA11Y();
break;
case "context-inspect":
gContextMenu.inspectNode();
break;
case "context-media-eme-learnmore":
gContextMenu.drmLearnMore(event);
break;
case "context-copy-link-to-highlight":
gContextMenu.copyLinkToHighlight();
break;
case "context-copy-clean-link-to-highlight":
gContextMenu.copyLinkToHighlight(/* stripSiteTracking */ true);
break;
case "context-remove-all-highlights":
gContextMenu.removeAllTextFragments();
break;
}
});
contextMenuPopup.addEventListener("popupshowing", event => {
switch (event.target.id) {
case "contentAreaContextMenu": {
// eslint-disable-next-line no-global-assign
gContextMenu = new nsContextMenu(contextMenuPopup, event.shiftKey);
if (!gContextMenu.shouldDisplay) {
event.preventDefault();
return;
}
if (!IS_WEBEXT_PANELS) {
updateEditUIVisibility();
}
// attempts to generate the text fragment directive of selected text
// Note: This is kicking off an async operation that might update
// the context menu while it's open (enables an entry).
if (gContextMenu.isContentSelected) {
gContextMenu.getTextDirective();
}
break;
}
case "context-openlinkinusercontext-popup":
gContextMenu.createContainerMenu(event);
break;
case "context-sendlinktodevice-popup":
gSync.populateSendTabToDevicesMenu(
event.target,
gContextMenu.linkURI,
gContextMenu.linkTextStr
);
break;
case "context-sendpagetodevice-popup":
gSync.populateSendTabToDevicesMenu(
event.target,
gBrowser.currentURI,
gBrowser.contentTitle
);
break;
}
});
contextMenuPopup.addEventListener("popuphiding", event => {
if (event.target != contextMenuPopup) {
return;
}
gContextMenu.hiding(contextMenuPopup);
// eslint-disable-next-line no-global-assign
gContextMenu = null;
if (!IS_WEBEXT_PANELS) {
updateEditUIVisibility();
}
});
// The command events bubble up to the popup element.
let userContextPopup = document.getElementById(
"context-openlinkinusercontext-popup"
);
userContextPopup.addEventListener("command", event =>
gContextMenu.openLinkInTab(event)
);
},
{ once: true }
);