/* 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/. */
"use strict";
const Menu = require("resource://devtools/client/framework/menu.js"); const MenuItem = require("resource://devtools/client/framework/menu-item.js");
const messageVariable = target.closest(".objectBox"); // Ensure that console.group and console.groupCollapsed commands are not captured const variableText =
messageVariable &&
!messageEl.classList.contains("startGroup") &&
!messageEl.classList.contains("startGroupCollapsed")
? messageVariable.textContent
: null;
// Retrieve closes actor id from the DOM. const actorEl =
target.closest("[data-link-actor-id]") ||
target.querySelector("[data-link-actor-id]"); const actor = actorEl ? actorEl.dataset.linkActorId : null;
const rootObjectInspector = target.closest(".object-inspector"); const rootActor = rootObjectInspector
? rootObjectInspector.querySelector("[data-link-actor-id]")
: null; // We can have object which are not displayed inside an ObjectInspector (e.g. Errors), // so let's default to `actor`. const rootActorId = rootActor ? rootActor.dataset.linkActorId : actor;
// Copy URL for a network request.
menu.append( new MenuItem({
id: "console-menu-copy-url",
label: l10n.getStr("webconsole.menu.copyURL.label"),
accesskey: l10n.getStr("webconsole.menu.copyURL.accesskey"),
visible: source === MESSAGE_SOURCE.NETWORK,
click: () => { if (!request) { return;
}
clipboardHelper.copyString(request.url);
},
})
);
if (toolbox && request) { // Open Network message in the Network panel.
menu.append( new MenuItem({
id: "console-menu-open-in-network-panel",
label: l10n.getStr("webconsole.menu.openInNetworkPanel.label"),
accesskey: l10n.getStr("webconsole.menu.openInNetworkPanel.accesskey"),
visible: source === MESSAGE_SOURCE.NETWORK,
click: () => dispatch(actions.openNetworkPanel(message.messageId)),
})
); // Resend Network message.
menu.append( new MenuItem({
id: "console-menu-resend-network-request",
label: l10n.getStr("webconsole.menu.resendNetworkRequest.label"),
accesskey: l10n.getStr( "webconsole.menu.resendNetworkRequest.accesskey"
),
visible: source === MESSAGE_SOURCE.NETWORK,
click: () => dispatch(actions.resendNetworkRequest(messageId)),
})
);
}
// Open URL in a new tab for a network request.
menu.append( new MenuItem({
id: "console-menu-open-url",
label: l10n.getStr("webconsole.menu.openURL.label"),
accesskey: l10n.getStr("webconsole.menu.openURL.accesskey"),
visible: source === MESSAGE_SOURCE.NETWORK,
click: () => { if (!request) { return;
}
openContentLink(request.url);
},
})
);
// Open DOM node in the Inspector panel. const contentDomReferenceEl = target.closest( "[data-link-content-dom-reference]"
); if (isConnectedElement && contentDomReferenceEl) { const contentDomReference = contentDomReferenceEl.getAttribute( "data-link-content-dom-reference"
);
// Store as global variable.
menu.append( new MenuItem({
id: "console-menu-store",
label: l10n.getStr("webconsole.menu.storeAsGlobalVar.label"),
accesskey: l10n.getStr("webconsole.menu.storeAsGlobalVar.accesskey"),
disabled: !actor,
click: () => dispatch(actions.storeAsGlobal(actor)),
})
);
// Copy message or grip.
menu.append( new MenuItem({
id: "console-menu-copy",
label: l10n.getStr("webconsole.menu.copyMessage.label"),
accesskey: l10n.getStr("webconsole.menu.copyMessage.accesskey"), // Disabled if there is no selection and no message element available to copy.
disabled: selection.isCollapsed && !clipboardText,
click: () => { if (selection.isCollapsed) { // If the selection is empty/collapsed, copy the text content of the // message for which the context menu was opened.
clipboardHelper.copyString(clipboardText);
} else {
clipboardHelper.copyString(selection.toString());
}
},
})
);
// Copy message object.
menu.append( new MenuItem({
id: "console-menu-copy-object",
label: l10n.getStr("webconsole.menu.copyObject.label"),
accesskey: l10n.getStr("webconsole.menu.copyObject.accesskey"), // Disabled if there is no actor and no variable text associated.
disabled: !actor && !variableText,
click: () => dispatch(actions.copyMessageObject(actor, variableText)),
})
);
/** * Returns the whole text content of the console output. * We're creating a new ConsoleOutput using the current store, turning off virtualization * so we can have access to all the messages. * * @param {WebConsoleWrapper} webConsoleWrapper * @returns Promise<String>
*/
async function getUnvirtualizedConsoleOutputText(webConsoleWrapper) { returnnew Promise(resolve => { const ReactDOM = require("resource://devtools/client/shared/vendor/react-dom.js"); const {
createElement,
createFactory,
} = require("resource://devtools/client/shared/vendor/react.js"); const ConsoleOutput = createFactory(
require("resource://devtools/client/webconsole/components/Output/ConsoleOutput.js")
); const {
Provider,
createProvider,
} = require("resource://devtools/client/shared/vendor/react-redux.js");
// Create an element that won't impact the layout of the console const singleUseElement = doc.createElement("section");
singleUseElement.classList.add("clipboard-only");
doc.body.append(singleUseElement);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.