Added support of the appmenu for DevTools menuitems (optional)

Issue #96
This commit is contained in:
janekptacijarabaci 2018-04-08 00:15:48 +02:00 • committed by Roy Tam
commit e5c504fca6
2 changed files with 64 additions and 6 deletions

View file

@ -156,6 +156,12 @@ function createToolMenuElements(toolDefinition, doc) {
}); });
} }
let appmenuitem = createMenuItem({
doc,
id: "appmenuitem_" + id,
label: toolDefinition.menuLabel || toolDefinition.label
});
let menuitem = createMenuItem({ let menuitem = createMenuItem({
doc, doc,
id: "menuitem_" + id, id: "menuitem_" + id,
@ -170,6 +176,7 @@ function createToolMenuElements(toolDefinition, doc) {
return { return {
key, key,
appmenuitem,
menuitem menuitem
}; };
} }
@ -186,12 +193,24 @@ function createToolMenuElements(toolDefinition, doc) {
* The tool definition after which the tool menu item is to be added. * The tool definition after which the tool menu item is to be added.
*/ */
function insertToolMenuElements(doc, toolDefinition, prevDef) { function insertToolMenuElements(doc, toolDefinition, prevDef) {
let { key, menuitem } = createToolMenuElements(toolDefinition, doc); let { key, appmenuitem, menuitem } = createToolMenuElements(toolDefinition, doc);
if (key) { if (key) {
attachKeybindingsToBrowser(doc, key); attachKeybindingsToBrowser(doc, key);
} }
let amp;
if (prevDef) {
let menuitem = doc.getElementById("appmenuitem_" + prevDef.id);
ref = menuitem && menuitem.nextSibling ? menuitem.nextSibling : null;
} else {
ref = doc.getElementById("appmenu_devtools_separator");
}
if (ref) {
amp.parentNode.insertBefore(menuitem, ref);
}
let ref; let ref;
if (prevDef) { if (prevDef) {
let menuitem = doc.getElementById("menuitem_" + prevDef.id); let menuitem = doc.getElementById("menuitem_" + prevDef.id);
@ -220,6 +239,11 @@ function removeToolFromMenu(toolId, doc) {
key.remove(); key.remove();
} }
let appmenuitem = doc.getElementById("appmenuitem_" + toolId);
if (appmenuitem) {
appmenuitem.remove();
}
let menuitem = doc.getElementById("menuitem_" + toolId); let menuitem = doc.getElementById("menuitem_" + toolId);
if (menuitem) { if (menuitem) {
menuitem.remove(); menuitem.remove();
@ -235,6 +259,7 @@ exports.removeToolFromMenu = removeToolFromMenu;
*/ */
function addAllToolsToMenu(doc) { function addAllToolsToMenu(doc) {
let fragKeys = doc.createDocumentFragment(); let fragKeys = doc.createDocumentFragment();
let fragAppMenuItems = doc.createDocumentFragment();
let fragMenuItems = doc.createDocumentFragment(); let fragMenuItems = doc.createDocumentFragment();
for (let toolDefinition of gDevTools.getToolDefinitionArray()) { for (let toolDefinition of gDevTools.getToolDefinitionArray()) {
@ -251,11 +276,17 @@ function addAllToolsToMenu(doc) {
if (elements.key) { if (elements.key) {
fragKeys.appendChild(elements.key); fragKeys.appendChild(elements.key);
} }
fragAppMenuItems.appendChild(elements.appmenuitem);
fragMenuItems.appendChild(elements.menuitem); fragMenuItems.appendChild(elements.menuitem);
} }
attachKeybindingsToBrowser(doc, fragKeys); attachKeybindingsToBrowser(doc, fragKeys);
let amps = doc.getElementById("appmenu_devtools_separator");
if (amps) {
amps.parentNode.insertBefore(fragAppMenuItems, amps);
}
let mps = doc.getElementById("menu_devtools_separator"); let mps = doc.getElementById("menu_devtools_separator");
if (mps) { if (mps) {
mps.parentNode.insertBefore(fragMenuItems, mps); mps.parentNode.insertBefore(fragMenuItems, mps);
@ -270,18 +301,28 @@ function addAllToolsToMenu(doc) {
*/ */
function addTopLevelItems(doc) { function addTopLevelItems(doc) {
let keys = doc.createDocumentFragment(); let keys = doc.createDocumentFragment();
let appmenuItems = doc.createDocumentFragment();
let menuItems = doc.createDocumentFragment(); let menuItems = doc.createDocumentFragment();
let { menuitems } = require("../menus"); let { menuitems } = require("../menus");
for (let item of menuitems) { for (let item of menuitems) {
if (item.separator) { if (item.separator) {
let appseparator = doc.createElement("menuseparator");
appseparator.id = "app" + item.id;
let separator = doc.createElement("menuseparator"); let separator = doc.createElement("menuseparator");
separator.id = item.id; separator.id = item.id;
appmenuItems.appendChild(appseparator);
menuItems.appendChild(separator); menuItems.appendChild(separator);
} else { } else {
let { id, l10nKey } = item; let { id, l10nKey } = item;
// Create a <menuitem> // Create a <menuitem>
let appmenuitem = createMenuItem({
doc,
id: "app" + id,
label: l10n(l10nKey + ".label"),
isCheckbox: item.checkbox
});
let menuitem = createMenuItem({ let menuitem = createMenuItem({
doc, doc,
id, id,
@ -289,7 +330,9 @@ function addTopLevelItems(doc) {
accesskey: l10n(l10nKey + ".accesskey"), accesskey: l10n(l10nKey + ".accesskey"),
isCheckbox: item.checkbox isCheckbox: item.checkbox
}); });
appmenuitem.addEventListener("command", item.oncommand);
menuitem.addEventListener("command", item.oncommand); menuitem.addEventListener("command", item.oncommand);
appmenuItems.appendChild(appmenuitem);
menuItems.appendChild(menuitem); menuItems.appendChild(menuitem);
if (item.key && l10nKey) { if (item.key && l10nKey) {
@ -330,6 +373,9 @@ function addTopLevelItems(doc) {
for (let node of keys.children) { for (let node of keys.children) {
nodes.push(node); nodes.push(node);
} }
for (let node of appmenuItems.children) {
nodes.push(node);
}
for (let node of menuItems.children) { for (let node of menuItems.children) {
nodes.push(node); nodes.push(node);
} }
@ -337,15 +383,27 @@ function addTopLevelItems(doc) {
attachKeybindingsToBrowser(doc, keys); attachKeybindingsToBrowser(doc, keys);
let appmenu = doc.getElementById("appmenu_webDeveloper_popup");
if (appmenu) {
appmenu.appendChild(appmenuItems);
// There is still "Page Source" menuitem hardcoded into browser.xul. Instead
// of manually inserting everything around it, move it to the expected
// position.
let appmenu_pageSource = doc.getElementById("appmenu_pageSource");
let appmenu_endSeparator = doc.getElementById("appmenu_devToolsEndSeparator");
appmenu.insertBefore(appmenu_pageSource, appmenu_endSeparator);
}
let menu = doc.getElementById("menuWebDeveloperPopup"); let menu = doc.getElementById("menuWebDeveloperPopup");
menu.appendChild(menuItems); menu.appendChild(menuItems);
// There is still "Page Source" menuitem hardcoded into browser.xul. Instead // There is still "Page Source" menuitem hardcoded into browser.xul. Instead
// of manually inserting everything around it, move it to the expected // of manually inserting everything around it, move it to the expected
// position. // position.
let pageSource = doc.getElementById("menu_pageSource"); let menu_pageSource = doc.getElementById("menu_pageSource");
let endSeparator = doc.getElementById("devToolsEndSeparator"); let menu_endSeparator = doc.getElementById("menu_devToolsEndSeparator");
menu.insertBefore(pageSource, endSeparator); menu.insertBefore(menu_pageSource, menu_endSeparator);
} }
/** /**

View file

@ -183,9 +183,9 @@ exports.menuitems = [
} }
}, },
{ separator: true, { separator: true,
id: "devToolsEndSeparator" id: "menu_devToolsEndSeparator"
}, },
{ id: "getMoreDevtools", { id: "menu_getMoreDevtools",
l10nKey: "getMoreDevtoolsCmd", l10nKey: "getMoreDevtoolsCmd",
oncommand(event) { oncommand(event) {
let window = event.target.ownerDocument.defaultView; let window = event.target.ownerDocument.defaultView;