Source code

Revision control

Copy as Markdown

Other Tools

/* 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 {
L10N,
} = require("resource://devtools/client/netmonitor/src/utils/l10n.js");
const {
contextMenuFormatters,
} = require("resource://devtools/client/netmonitor/src/utils/context-menu-utils.js");
loader.lazyRequireGetter(
this,
"copyString",
"resource://devtools/shared/platform/clipboard.js",
true
);
loader.lazyRequireGetter(
this,
"showMenu",
"resource://devtools/client/shared/components/menu/utils.js",
true
);
class PropertiesViewContextMenu {
constructor(props = {}) {
this.props = props;
this.copyAll = this.copyAll.bind(this);
this.copyValue = this.copyValue.bind(this);
}
/**
* Handle the context menu opening.
* @param {Object} event open event
* @param {Object} selection object representing the current selection
* @param {Object} data object containing information
* @param {Object} data.member member of the right-clicked row
* @param {Object} data.object the whole tree data
*/
open(event = {}, selection, { member, object }) {
const menuItems = [
{
id: "properties-view-context-menu-copyvalue",
label: L10N.getStr("netmonitor.context.copyValue"),
accesskey: L10N.getStr("netmonitor.context.copyValue.accesskey"),
click: () => this.copyValue(member, selection),
},
{
id: "properties-view-context-menu-copyall",
label: L10N.getStr("netmonitor.context.copyAll"),
accesskey: L10N.getStr("netmonitor.context.copyAll.accesskey"),
click: () => this.copyAll(object, selection),
},
];
showMenu(menuItems, {
screenX: event.screenX,
screenY: event.screenY,
});
}
/**
* Copies all.
* @param {Object} object the whole tree data
* @param {Object} selection object representing the current selection
*/
copyAll(object, selection) {
let buffer = "";
if (selection.toString() !== "") {
buffer = selection.toString();
} else {
const { customFormatters } = this.props;
buffer = contextMenuFormatters.baseCopyAllFormatter(object);
if (customFormatters?.copyAllFormatter) {
buffer = customFormatters.copyAllFormatter(
object,
contextMenuFormatters.baseCopyAllFormatter
);
}
}
try {
copyString(buffer);
} catch (error) {}
}
/**
* Copies the value of a single item.
* @param {Object} member member of the right-clicked row
* @param {Object} selection object representing the current selection
*/
copyValue(member, selection) {
let buffer = "";
if (selection.toString() !== "") {
buffer = selection.toString();
} else {
const { customFormatters } = this.props;
buffer = contextMenuFormatters.baseCopyFormatter(member);
if (customFormatters?.copyFormatter) {
buffer = customFormatters.copyFormatter(
member,
contextMenuFormatters.baseCopyFormatter
);
}
}
try {
copyString(buffer);
} catch (error) {}
}
}
module.exports = PropertiesViewContextMenu;