Index: third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js b/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js |
index ae049454f9fb10959546388a43c41567f3af8918..fb06813fbc63d01fd9b50cc82bed63eb0c95eb56 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js |
+++ b/third_party/WebKit/Source/devtools/front_end/ui/SoftContextMenu.js |
@@ -22,379 +22,372 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
- |
/** |
- * @constructor |
- * @param {!Array.<!InspectorFrontendHostAPI.ContextMenuDescriptor>} items |
- * @param {function(string)} itemSelectedCallback |
- * @param {!WebInspector.SoftContextMenu=} parentMenu |
+ * @unrestricted |
*/ |
-WebInspector.SoftContextMenu = function(items, itemSelectedCallback, parentMenu) |
-{ |
+WebInspector.SoftContextMenu = class { |
+ /** |
+ * @param {!Array.<!InspectorFrontendHostAPI.ContextMenuDescriptor>} items |
+ * @param {function(string)} itemSelectedCallback |
+ * @param {!WebInspector.SoftContextMenu=} parentMenu |
+ */ |
+ constructor(items, itemSelectedCallback, parentMenu) { |
this._items = items; |
this._itemSelectedCallback = itemSelectedCallback; |
this._parentMenu = parentMenu; |
-}; |
- |
-WebInspector.SoftContextMenu.prototype = { |
- /** |
- * @param {!Document} document |
- * @param {number} x |
- * @param {number} y |
- */ |
- show: function(document, x, y) |
- { |
- if (!this._items.length) |
- return; |
- |
- this._document = document; |
- this._x = x; |
- this._y = y; |
- this._time = new Date().getTime(); |
- |
- // Create context menu. |
- this.element = createElementWithClass("div", "soft-context-menu"); |
- var root = WebInspector.createShadowRootWithCoreStyles(this.element, "ui/softContextMenu.css"); |
- this._contextMenuElement = root.createChild("div"); |
- this.element.style.top = y + "px"; |
- var subMenuOverlap = 3; |
- this.element.style.left = (this._parentMenu ? x - subMenuOverlap : x) + "px"; |
- |
- this._contextMenuElement.tabIndex = 0; |
- this._contextMenuElement.addEventListener("mouseup", (e) => e.consume(), false); |
- this._contextMenuElement.addEventListener("keydown", this._menuKeyDown.bind(this), false); |
- |
- for (var i = 0; i < this._items.length; ++i) |
- this._contextMenuElement.appendChild(this._createMenuItem(this._items[i])); |
- |
- // Install glass pane capturing events. |
- if (!this._parentMenu) { |
- this._glassPaneElement = createElementWithClass("div", "soft-context-menu-glass-pane fill"); |
- this._glassPaneElement.tabIndex = 0; |
- this._glassPaneElement.style.zIndex = "20000"; |
- this._glassPaneElement.addEventListener("mouseup", this._glassPaneMouseUp.bind(this), false); |
- this._glassPaneElement.appendChild(this.element); |
- document.body.appendChild(this._glassPaneElement); |
- this._discardMenuOnResizeListener = this._discardMenu.bind(this, true); |
- document.defaultView.addEventListener("resize", this._discardMenuOnResizeListener, false); |
- } else { |
- this._parentMenu._parentGlassPaneElement().appendChild(this.element); |
- } |
- |
- // Re-position menu in case it does not fit. |
- if (document.body.offsetWidth < this.element.offsetLeft + this.element.offsetWidth) { |
- this.element.style.left = Math.max(WebInspector.Dialog.modalHostView().element.totalOffsetLeft(), this._parentMenu |
- ? this._parentMenu.element.offsetLeft - this.element.offsetWidth + subMenuOverlap |
- : document.body.offsetWidth - this.element.offsetWidth) + "px"; |
- } |
- |
- // Move submenus upwards if it does not fit. |
- if (this._parentMenu && document.body.offsetHeight < this.element.offsetTop + this.element.offsetHeight) { |
- y = Math.max(WebInspector.Dialog.modalHostView().element.totalOffsetTop(), document.body.offsetHeight - this.element.offsetHeight); |
- this.element.style.top = y + "px"; |
- } |
- |
- var maxHeight = WebInspector.Dialog.modalHostView().element.offsetHeight; |
- maxHeight -= y - WebInspector.Dialog.modalHostView().element.totalOffsetTop(); |
- this.element.style.maxHeight = maxHeight + "px"; |
- |
- this._focus(); |
- }, |
- |
- discard: function() |
- { |
- this._discardMenu(true); |
- }, |
- |
- _parentGlassPaneElement: function() |
- { |
- if (this._glassPaneElement) |
- return this._glassPaneElement; |
- if (this._parentMenu) |
- return this._parentMenu._parentGlassPaneElement(); |
- return null; |
- }, |
- |
- _createMenuItem: function(item) |
- { |
- if (item.type === "separator") |
- return this._createSeparator(); |
- |
- if (item.type === "subMenu") |
- return this._createSubMenu(item); |
- |
- var menuItemElement = createElementWithClass("div", "soft-context-menu-item"); |
- var checkMarkElement = menuItemElement.createChild("div", "checkmark"); |
- if (!item.checked) |
- checkMarkElement.style.opacity = "0"; |
- |
- if (item.element) { |
- var wrapper = menuItemElement.createChild("div", "soft-context-menu-custom-item"); |
- wrapper.appendChild(item.element); |
- menuItemElement._isCustom = true; |
- return menuItemElement; |
- } |
- |
- if (!item.enabled) |
- menuItemElement.classList.add("soft-context-menu-disabled"); |
- menuItemElement.createTextChild(item.label); |
- menuItemElement.createChild("span", "soft-context-menu-shortcut").textContent = item.shortcut; |
- |
- menuItemElement.addEventListener("mousedown", this._menuItemMouseDown.bind(this), false); |
- menuItemElement.addEventListener("mouseup", this._menuItemMouseUp.bind(this), false); |
- |
- // Manually manage hover highlight since :hover does not work in case of click-and-hold menu invocation. |
- menuItemElement.addEventListener("mouseover", this._menuItemMouseOver.bind(this), false); |
- menuItemElement.addEventListener("mouseleave", this._menuItemMouseLeave.bind(this), false); |
- |
- menuItemElement._actionId = item.id; |
- return menuItemElement; |
- }, |
- |
- _createSubMenu: function(item) |
- { |
- var menuItemElement = createElementWithClass("div", "soft-context-menu-item"); |
- menuItemElement._subItems = item.subItems; |
- |
- // Occupy the same space on the left in all items. |
- var checkMarkElement = menuItemElement.createChild("span", "soft-context-menu-item-checkmark checkmark"); |
- checkMarkElement.textContent = "\u2713 "; // Checkmark Unicode symbol |
- checkMarkElement.style.opacity = "0"; |
- |
- menuItemElement.createTextChild(item.label); |
- |
- var subMenuArrowElement = menuItemElement.createChild("span", "soft-context-menu-item-submenu-arrow"); |
- subMenuArrowElement.textContent = "\u25B6"; // BLACK RIGHT-POINTING TRIANGLE |
- |
- menuItemElement.addEventListener("mousedown", this._menuItemMouseDown.bind(this), false); |
- menuItemElement.addEventListener("mouseup", this._menuItemMouseUp.bind(this), false); |
+ } |
+ |
+ /** |
+ * @param {!Document} document |
+ * @param {number} x |
+ * @param {number} y |
+ */ |
+ show(document, x, y) { |
+ if (!this._items.length) |
+ return; |
+ |
+ this._document = document; |
+ this._x = x; |
+ this._y = y; |
+ this._time = new Date().getTime(); |
+ |
+ // Create context menu. |
+ this.element = createElementWithClass('div', 'soft-context-menu'); |
+ var root = WebInspector.createShadowRootWithCoreStyles(this.element, 'ui/softContextMenu.css'); |
+ this._contextMenuElement = root.createChild('div'); |
+ this.element.style.top = y + 'px'; |
+ var subMenuOverlap = 3; |
+ this.element.style.left = (this._parentMenu ? x - subMenuOverlap : x) + 'px'; |
+ |
+ this._contextMenuElement.tabIndex = 0; |
+ this._contextMenuElement.addEventListener('mouseup', (e) => e.consume(), false); |
+ this._contextMenuElement.addEventListener('keydown', this._menuKeyDown.bind(this), false); |
+ |
+ for (var i = 0; i < this._items.length; ++i) |
+ this._contextMenuElement.appendChild(this._createMenuItem(this._items[i])); |
+ |
+ // Install glass pane capturing events. |
+ if (!this._parentMenu) { |
+ this._glassPaneElement = createElementWithClass('div', 'soft-context-menu-glass-pane fill'); |
+ this._glassPaneElement.tabIndex = 0; |
+ this._glassPaneElement.style.zIndex = '20000'; |
+ this._glassPaneElement.addEventListener('mouseup', this._glassPaneMouseUp.bind(this), false); |
+ this._glassPaneElement.appendChild(this.element); |
+ document.body.appendChild(this._glassPaneElement); |
+ this._discardMenuOnResizeListener = this._discardMenu.bind(this, true); |
+ document.defaultView.addEventListener('resize', this._discardMenuOnResizeListener, false); |
+ } else { |
+ this._parentMenu._parentGlassPaneElement().appendChild(this.element); |
+ } |
- // Manually manage hover highlight since :hover does not work in case of click-and-hold menu invocation. |
- menuItemElement.addEventListener("mouseover", this._menuItemMouseOver.bind(this), false); |
- menuItemElement.addEventListener("mouseleave", this._menuItemMouseLeave.bind(this), false); |
+ // Re-position menu in case it does not fit. |
+ if (document.body.offsetWidth < this.element.offsetLeft + this.element.offsetWidth) { |
+ this.element.style.left = |
+ Math.max( |
+ WebInspector.Dialog.modalHostView().element.totalOffsetLeft(), this._parentMenu ? |
+ this._parentMenu.element.offsetLeft - this.element.offsetWidth + subMenuOverlap : |
+ document.body.offsetWidth - this.element.offsetWidth) + |
+ 'px'; |
+ } |
- return menuItemElement; |
- }, |
+ // Move submenus upwards if it does not fit. |
+ if (this._parentMenu && document.body.offsetHeight < this.element.offsetTop + this.element.offsetHeight) { |
+ y = Math.max( |
+ WebInspector.Dialog.modalHostView().element.totalOffsetTop(), |
+ document.body.offsetHeight - this.element.offsetHeight); |
+ this.element.style.top = y + 'px'; |
+ } |
- _createSeparator: function() |
- { |
- var separatorElement = createElementWithClass("div", "soft-context-menu-separator"); |
- separatorElement._isSeparator = true; |
- separatorElement.createChild("div", "separator-line"); |
- return separatorElement; |
- }, |
+ var maxHeight = WebInspector.Dialog.modalHostView().element.offsetHeight; |
+ maxHeight -= y - WebInspector.Dialog.modalHostView().element.totalOffsetTop(); |
+ this.element.style.maxHeight = maxHeight + 'px'; |
+ |
+ this._focus(); |
+ } |
+ |
+ discard() { |
+ this._discardMenu(true); |
+ } |
+ |
+ _parentGlassPaneElement() { |
+ if (this._glassPaneElement) |
+ return this._glassPaneElement; |
+ if (this._parentMenu) |
+ return this._parentMenu._parentGlassPaneElement(); |
+ return null; |
+ } |
+ |
+ _createMenuItem(item) { |
+ if (item.type === 'separator') |
+ return this._createSeparator(); |
+ |
+ if (item.type === 'subMenu') |
+ return this._createSubMenu(item); |
+ |
+ var menuItemElement = createElementWithClass('div', 'soft-context-menu-item'); |
+ var checkMarkElement = menuItemElement.createChild('div', 'checkmark'); |
+ if (!item.checked) |
+ checkMarkElement.style.opacity = '0'; |
+ |
+ if (item.element) { |
+ var wrapper = menuItemElement.createChild('div', 'soft-context-menu-custom-item'); |
+ wrapper.appendChild(item.element); |
+ menuItemElement._isCustom = true; |
+ return menuItemElement; |
+ } |
- _menuItemMouseDown: function(event) |
- { |
- // Do not let separator's mouse down hit menu's handler - we need to receive mouse up! |
- event.consume(true); |
- }, |
- |
- _menuItemMouseUp: function(event) |
- { |
- this._triggerAction(event.target, event); |
- event.consume(); |
- }, |
- |
- _focus: function() |
- { |
- this._contextMenuElement.focus(); |
- }, |
- |
- _triggerAction: function(menuItemElement, event) |
- { |
- if (!menuItemElement._subItems) { |
- this._discardMenu(true, event); |
- if (typeof menuItemElement._actionId !== "undefined") { |
- this._itemSelectedCallback(menuItemElement._actionId); |
- delete menuItemElement._actionId; |
- } |
- return; |
- } |
+ if (!item.enabled) |
+ menuItemElement.classList.add('soft-context-menu-disabled'); |
+ menuItemElement.createTextChild(item.label); |
+ menuItemElement.createChild('span', 'soft-context-menu-shortcut').textContent = item.shortcut; |
+ |
+ menuItemElement.addEventListener('mousedown', this._menuItemMouseDown.bind(this), false); |
+ menuItemElement.addEventListener('mouseup', this._menuItemMouseUp.bind(this), false); |
+ |
+ // Manually manage hover highlight since :hover does not work in case of click-and-hold menu invocation. |
+ menuItemElement.addEventListener('mouseover', this._menuItemMouseOver.bind(this), false); |
+ menuItemElement.addEventListener('mouseleave', this._menuItemMouseLeave.bind(this), false); |
+ |
+ menuItemElement._actionId = item.id; |
+ return menuItemElement; |
+ } |
+ |
+ _createSubMenu(item) { |
+ var menuItemElement = createElementWithClass('div', 'soft-context-menu-item'); |
+ menuItemElement._subItems = item.subItems; |
+ |
+ // Occupy the same space on the left in all items. |
+ var checkMarkElement = menuItemElement.createChild('span', 'soft-context-menu-item-checkmark checkmark'); |
+ checkMarkElement.textContent = '\u2713 '; // Checkmark Unicode symbol |
+ checkMarkElement.style.opacity = '0'; |
+ |
+ menuItemElement.createTextChild(item.label); |
+ |
+ var subMenuArrowElement = menuItemElement.createChild('span', 'soft-context-menu-item-submenu-arrow'); |
+ subMenuArrowElement.textContent = '\u25B6'; // BLACK RIGHT-POINTING TRIANGLE |
+ |
+ menuItemElement.addEventListener('mousedown', this._menuItemMouseDown.bind(this), false); |
+ menuItemElement.addEventListener('mouseup', this._menuItemMouseUp.bind(this), false); |
+ |
+ // Manually manage hover highlight since :hover does not work in case of click-and-hold menu invocation. |
+ menuItemElement.addEventListener('mouseover', this._menuItemMouseOver.bind(this), false); |
+ menuItemElement.addEventListener('mouseleave', this._menuItemMouseLeave.bind(this), false); |
+ |
+ return menuItemElement; |
+ } |
+ |
+ _createSeparator() { |
+ var separatorElement = createElementWithClass('div', 'soft-context-menu-separator'); |
+ separatorElement._isSeparator = true; |
+ separatorElement.createChild('div', 'separator-line'); |
+ return separatorElement; |
+ } |
+ |
+ _menuItemMouseDown(event) { |
+ // Do not let separator's mouse down hit menu's handler - we need to receive mouse up! |
+ event.consume(true); |
+ } |
+ |
+ _menuItemMouseUp(event) { |
+ this._triggerAction(event.target, event); |
+ event.consume(); |
+ } |
+ |
+ _focus() { |
+ this._contextMenuElement.focus(); |
+ } |
+ |
+ _triggerAction(menuItemElement, event) { |
+ if (!menuItemElement._subItems) { |
+ this._discardMenu(true, event); |
+ if (typeof menuItemElement._actionId !== 'undefined') { |
+ this._itemSelectedCallback(menuItemElement._actionId); |
+ delete menuItemElement._actionId; |
+ } |
+ return; |
+ } |
- this._showSubMenu(menuItemElement); |
- event.consume(); |
- }, |
+ this._showSubMenu(menuItemElement); |
+ event.consume(); |
+ } |
- _showSubMenu: function(menuItemElement) |
- { |
- if (menuItemElement._subMenuTimer) { |
- clearTimeout(menuItemElement._subMenuTimer); |
- delete menuItemElement._subMenuTimer; |
- } |
- if (this._subMenu) |
- return; |
- |
- this._subMenu = new WebInspector.SoftContextMenu(menuItemElement._subItems, this._itemSelectedCallback, this); |
- var topPadding = 4; |
- this._subMenu.show(this._document, menuItemElement.totalOffsetLeft() + menuItemElement.offsetWidth, menuItemElement.totalOffsetTop() - 1 - topPadding); |
- }, |
- |
- _hideSubMenu: function() |
- { |
- if (!this._subMenu) |
- return; |
- this._subMenu._discardSubMenus(); |
- this._focus(); |
- }, |
- |
- _menuItemMouseOver: function(event) |
- { |
- this._highlightMenuItem(event.target, true); |
- }, |
- |
- _menuItemMouseLeave: function(event) |
- { |
- if (!this._subMenu || !event.relatedTarget) { |
- this._highlightMenuItem(null, true); |
- return; |
- } |
+ _showSubMenu(menuItemElement) { |
+ if (menuItemElement._subMenuTimer) { |
+ clearTimeout(menuItemElement._subMenuTimer); |
+ delete menuItemElement._subMenuTimer; |
+ } |
+ if (this._subMenu) |
+ return; |
+ |
+ this._subMenu = new WebInspector.SoftContextMenu(menuItemElement._subItems, this._itemSelectedCallback, this); |
+ var topPadding = 4; |
+ this._subMenu.show( |
+ this._document, menuItemElement.totalOffsetLeft() + menuItemElement.offsetWidth, |
+ menuItemElement.totalOffsetTop() - 1 - topPadding); |
+ } |
+ |
+ _hideSubMenu() { |
+ if (!this._subMenu) |
+ return; |
+ this._subMenu._discardSubMenus(); |
+ this._focus(); |
+ } |
+ |
+ _menuItemMouseOver(event) { |
+ this._highlightMenuItem(event.target, true); |
+ } |
+ |
+ _menuItemMouseLeave(event) { |
+ if (!this._subMenu || !event.relatedTarget) { |
+ this._highlightMenuItem(null, true); |
+ return; |
+ } |
- var relatedTarget = event.relatedTarget; |
- if (relatedTarget.classList.contains("soft-context-menu-glass-pane")) |
- this._highlightMenuItem(null, true); |
- }, |
- |
- /** |
- * @param {?Element} menuItemElement |
- * @param {boolean} scheduleSubMenu |
- */ |
- _highlightMenuItem: function(menuItemElement, scheduleSubMenu) |
- { |
- if (this._highlightedMenuItemElement === menuItemElement) |
- return; |
- |
- this._hideSubMenu(); |
- if (this._highlightedMenuItemElement) { |
- this._highlightedMenuItemElement.classList.remove("soft-context-menu-item-mouse-over"); |
- if (this._highlightedMenuItemElement._subItems && this._highlightedMenuItemElement._subMenuTimer) { |
- clearTimeout(this._highlightedMenuItemElement._subMenuTimer); |
- delete this._highlightedMenuItemElement._subMenuTimer; |
- } |
+ var relatedTarget = event.relatedTarget; |
+ if (relatedTarget.classList.contains('soft-context-menu-glass-pane')) |
+ this._highlightMenuItem(null, true); |
+ } |
+ |
+ /** |
+ * @param {?Element} menuItemElement |
+ * @param {boolean} scheduleSubMenu |
+ */ |
+ _highlightMenuItem(menuItemElement, scheduleSubMenu) { |
+ if (this._highlightedMenuItemElement === menuItemElement) |
+ return; |
+ |
+ this._hideSubMenu(); |
+ if (this._highlightedMenuItemElement) { |
+ this._highlightedMenuItemElement.classList.remove('soft-context-menu-item-mouse-over'); |
+ if (this._highlightedMenuItemElement._subItems && this._highlightedMenuItemElement._subMenuTimer) { |
+ clearTimeout(this._highlightedMenuItemElement._subMenuTimer); |
+ delete this._highlightedMenuItemElement._subMenuTimer; |
+ } |
+ } |
+ this._highlightedMenuItemElement = menuItemElement; |
+ if (this._highlightedMenuItemElement) { |
+ this._highlightedMenuItemElement.classList.add('soft-context-menu-item-mouse-over'); |
+ this._contextMenuElement.focus(); |
+ if (scheduleSubMenu && this._highlightedMenuItemElement._subItems && |
+ !this._highlightedMenuItemElement._subMenuTimer) |
+ this._highlightedMenuItemElement._subMenuTimer = |
+ setTimeout(this._showSubMenu.bind(this, this._highlightedMenuItemElement), 150); |
+ } |
+ } |
+ |
+ _highlightPrevious() { |
+ var menuItemElement = this._highlightedMenuItemElement ? this._highlightedMenuItemElement.previousSibling : |
+ this._contextMenuElement.lastChild; |
+ while (menuItemElement && (menuItemElement._isSeparator || menuItemElement._isCustom)) |
+ menuItemElement = menuItemElement.previousSibling; |
+ if (menuItemElement) |
+ this._highlightMenuItem(menuItemElement, false); |
+ } |
+ |
+ _highlightNext() { |
+ var menuItemElement = this._highlightedMenuItemElement ? this._highlightedMenuItemElement.nextSibling : |
+ this._contextMenuElement.firstChild; |
+ while (menuItemElement && (menuItemElement._isSeparator || menuItemElement._isCustom)) |
+ menuItemElement = menuItemElement.nextSibling; |
+ if (menuItemElement) |
+ this._highlightMenuItem(menuItemElement, false); |
+ } |
+ |
+ _menuKeyDown(event) { |
+ switch (event.key) { |
+ case 'ArrowUp': |
+ this._highlightPrevious(); |
+ break; |
+ case 'ArrowDown': |
+ this._highlightNext(); |
+ break; |
+ case 'ArrowLeft': |
+ if (this._parentMenu) { |
+ this._highlightMenuItem(null, false); |
+ this._parentMenu._hideSubMenu(); |
} |
- this._highlightedMenuItemElement = menuItemElement; |
- if (this._highlightedMenuItemElement) { |
- this._highlightedMenuItemElement.classList.add("soft-context-menu-item-mouse-over"); |
- this._contextMenuElement.focus(); |
- if (scheduleSubMenu && this._highlightedMenuItemElement._subItems && !this._highlightedMenuItemElement._subMenuTimer) |
- this._highlightedMenuItemElement._subMenuTimer = setTimeout(this._showSubMenu.bind(this, this._highlightedMenuItemElement), 150); |
+ break; |
+ case 'ArrowRight': |
+ if (!this._highlightedMenuItemElement) |
+ break; |
+ if (this._highlightedMenuItemElement._subItems) { |
+ this._showSubMenu(this._highlightedMenuItemElement); |
+ this._subMenu._focus(); |
+ this._subMenu._highlightNext(); |
} |
- }, |
- |
- _highlightPrevious: function() |
- { |
- var menuItemElement = this._highlightedMenuItemElement ? this._highlightedMenuItemElement.previousSibling : this._contextMenuElement.lastChild; |
- while (menuItemElement && (menuItemElement._isSeparator || menuItemElement._isCustom)) |
- menuItemElement = menuItemElement.previousSibling; |
- if (menuItemElement) |
- this._highlightMenuItem(menuItemElement, false); |
- }, |
- |
- _highlightNext: function() |
- { |
- var menuItemElement = this._highlightedMenuItemElement ? this._highlightedMenuItemElement.nextSibling : this._contextMenuElement.firstChild; |
- while (menuItemElement && (menuItemElement._isSeparator || menuItemElement._isCustom)) |
- menuItemElement = menuItemElement.nextSibling; |
- if (menuItemElement) |
- this._highlightMenuItem(menuItemElement, false); |
- }, |
- |
- _menuKeyDown: function(event) |
- { |
- switch (event.key) { |
- case "ArrowUp": |
- this._highlightPrevious(); break; |
- case "ArrowDown": |
- this._highlightNext(); break; |
- case "ArrowLeft": |
- if (this._parentMenu) { |
- this._highlightMenuItem(null, false); |
- this._parentMenu._hideSubMenu(); |
- } |
- break; |
- case "ArrowRight": |
- if (!this._highlightedMenuItemElement) |
- break; |
- if (this._highlightedMenuItemElement._subItems) { |
- this._showSubMenu(this._highlightedMenuItemElement); |
- this._subMenu._focus(); |
- this._subMenu._highlightNext(); |
- } |
- break; |
- case "Escape": |
- this._discardMenu(false, event); break; |
- case "Enter": |
- if (!isEnterKey(event)) |
- break; |
- // Fall through |
- case " ": // Space |
- if (this._highlightedMenuItemElement) |
- this._triggerAction(this._highlightedMenuItemElement, event); |
- if (this._highlightedMenuItemElement._subItems) { |
- this._subMenu._focus(); |
- this._subMenu._highlightNext(); |
- } |
- break; |
+ break; |
+ case 'Escape': |
+ this._discardMenu(false, event); |
+ break; |
+ case 'Enter': |
+ if (!isEnterKey(event)) |
+ break; |
+ // Fall through |
+ case ' ': // Space |
+ if (this._highlightedMenuItemElement) |
+ this._triggerAction(this._highlightedMenuItemElement, event); |
+ if (this._highlightedMenuItemElement._subItems) { |
+ this._subMenu._focus(); |
+ this._subMenu._highlightNext(); |
} |
+ break; |
+ } |
+ event.consume(true); |
+ } |
+ |
+ _glassPaneMouseUp(event) { |
+ // Return if this is simple 'click', since dispatched on glass pane, can't use 'click' event. |
+ if (new Date().getTime() - this._time < 300) |
+ return; |
+ if (event.target === this.element) |
+ return; |
+ this._discardMenu(true, event); |
+ event.consume(); |
+ } |
+ |
+ /** |
+ * @param {boolean} closeParentMenus |
+ * @param {!Event=} event |
+ */ |
+ _discardMenu(closeParentMenus, event) { |
+ if (this._subMenu && !closeParentMenus) |
+ return; |
+ if (this._glassPaneElement) { |
+ var glassPane = this._glassPaneElement; |
+ delete this._glassPaneElement; |
+ // This can re-enter discardMenu due to blur. |
+ this._document.body.removeChild(glassPane); |
+ if (this._parentMenu) { |
+ delete this._parentMenu._subMenu; |
+ if (closeParentMenus) |
+ this._parentMenu._discardMenu(closeParentMenus, event); |
+ else |
+ this._parentMenu._focus(); |
+ } |
+ |
+ if (event) |
event.consume(true); |
- }, |
- |
- _glassPaneMouseUp: function(event) |
- { |
- // Return if this is simple 'click', since dispatched on glass pane, can't use 'click' event. |
- if (new Date().getTime() - this._time < 300) |
- return; |
- if (event.target === this.element) |
- return; |
- this._discardMenu(true, event); |
- event.consume(); |
- }, |
- |
- /** |
- * @param {boolean} closeParentMenus |
- * @param {!Event=} event |
- */ |
- _discardMenu: function(closeParentMenus, event) |
- { |
- if (this._subMenu && !closeParentMenus) |
- return; |
- if (this._glassPaneElement) { |
- var glassPane = this._glassPaneElement; |
- delete this._glassPaneElement; |
- // This can re-enter discardMenu due to blur. |
- this._document.body.removeChild(glassPane); |
- if (this._parentMenu) { |
- delete this._parentMenu._subMenu; |
- if (closeParentMenus) |
- this._parentMenu._discardMenu(closeParentMenus, event); |
- else |
- this._parentMenu._focus(); |
- } |
- |
- if (event) |
- event.consume(true); |
- } else if (this._parentMenu && this._contextMenuElement.parentElementOrShadowHost()) { |
- this._discardSubMenus(); |
- if (closeParentMenus) |
- this._parentMenu._discardMenu(closeParentMenus, event); |
- else |
- this._parentMenu._focus(); |
- if (event) |
- event.consume(true); |
- } |
- if (this._discardMenuOnResizeListener) { |
- this._document.defaultView.removeEventListener("resize", this._discardMenuOnResizeListener, false); |
- delete this._discardMenuOnResizeListener; |
- } |
- }, |
- |
- _discardSubMenus: function() |
- { |
- if (this._subMenu) |
- this._subMenu._discardSubMenus(); |
- if (this.element) |
- this.element.remove(); |
- if (this._parentMenu) |
- delete this._parentMenu._subMenu; |
+ } else if (this._parentMenu && this._contextMenuElement.parentElementOrShadowHost()) { |
+ this._discardSubMenus(); |
+ if (closeParentMenus) |
+ this._parentMenu._discardMenu(closeParentMenus, event); |
+ else |
+ this._parentMenu._focus(); |
+ if (event) |
+ event.consume(true); |
+ } |
+ if (this._discardMenuOnResizeListener) { |
+ this._document.defaultView.removeEventListener('resize', this._discardMenuOnResizeListener, false); |
+ delete this._discardMenuOnResizeListener; |
} |
+ } |
+ |
+ _discardSubMenus() { |
+ if (this._subMenu) |
+ this._subMenu._discardSubMenus(); |
+ if (this.element) |
+ this.element.remove(); |
+ if (this._parentMenu) |
+ delete this._parentMenu._subMenu; |
+ } |
}; |