Source code
Revision control
Copy as Markdown
Other Tools
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/global.css"?>
<script>
customElements.define("shadow-input", class extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: "open" });
this.shadowRoot.appendChild(document.createElement("input"));
}
connectedCallback() {
// Not in the constructor: attributes aren't set yet for parser-created
// custom elements.
this.shadowRoot.querySelector("input").type =
this.getAttribute("type") || "text";
}
});
</script>
<script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
<!-- Copied from toolkit/content/editMenuCommands.inc.xul -->
<script type="application/javascript" src="chrome://global/content/editMenuOverlay.js"/>
<script>
// A consumer of EditContextMenu.addItems(), for the test to check against.
window.testItemSet = EditContextMenu.addItems({
matches: input => input.localName == "textarea",
createItems() {
let fragment = document.createDocumentFragment();
let item = document.createXULElement("menuitem");
item.id = "test-item";
item.setAttribute("label", "Test");
fragment.appendChild(item);
return fragment;
},
onShowing(input, [item]) {
item.setAttribute("data-shown-for", input.localName);
},
after: "edit-contextmenu-paste",
// Ignored, since after is given too.
before: "edit-contextmenu-undo",
});
// A second consumer, for the items that go above the standard ones.
window.testItemSetBefore = EditContextMenu.addItems({
matches: input => input.localName == "textarea",
createItems() {
let fragment = document.createDocumentFragment();
let item = document.createXULElement("menuitem");
item.id = "test-item-before";
item.setAttribute("label", "Test before");
fragment.appendChild(item);
return fragment;
},
onShowing(input, items, event) {
window.testContextmenuEvent = event;
},
before: "edit-contextmenu-undo",
});
</script>
<commandset id="editMenuCommands">
<commandset id="editMenuCommandSetAll" commandupdater="true" events="focus,select"
oncommandupdate="goUpdateGlobalEditMenuItems()"/>
<commandset id="editMenuCommandSetUndo" commandupdater="true" events="undo"
oncommandupdate="goUpdateUndoEditMenuItems()"/>
<commandset id="editMenuCommandSetPaste" commandupdater="true" events="clipboard"
oncommandupdate="goUpdatePasteMenuItems()"/>
<command id="cmd_undo" oncommand="goDoCommand('cmd_undo')"/>
<command id="cmd_redo" oncommand="goDoCommand('cmd_redo')"/>
<command id="cmd_cut" oncommand="goDoCommand('cmd_cut')"/>
<command id="cmd_copy" oncommand="goDoCommand('cmd_copy')"/>
<command id="cmd_paste" oncommand="goDoCommand('cmd_paste')"/>
<command id="cmd_delete" oncommand="goDoCommand('cmd_delete')"/>
<command id="cmd_selectAll" oncommand="goDoCommand('cmd_selectAll')"/>
<command id="cmd_switchTextDirection" oncommand="goDoCommand('cmd_switchTextDirection');"/>
</commandset>
<menupopup id="outer-context-menu">
<menuseparator id="customizeMailToolbarMenuSeparator"/>
<menuitem id="hello" label="Hello" accesskey="H"/>
</menupopup>
<hbox context="outer-context-menu">
<html:textarea />
<html:input />
<html:input type="password" />
<html:shadow-input />
<html:shadow-input type="password" />
</hbox>
</window>