Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2460)

Unified Diff: chrome/browser/resources/shared/js/cr/ui/context_menu_handler.js

Issue 11962043: Move webui resources from chrome\browser\resources\shared to ui\webui\resources. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/shared/js/cr/ui/context_menu_handler.js
===================================================================
--- chrome/browser/resources/shared/js/cr/ui/context_menu_handler.js (revision 177292)
+++ chrome/browser/resources/shared/js/cr/ui/context_menu_handler.js (working copy)
@@ -1,262 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// require: event_target.js
-
-cr.define('cr.ui', function() {
- /** @const */ var EventTarget = cr.EventTarget;
- /** @const */ var Event = cr.Event;
- /** @const */ var Menu = cr.ui.Menu;
-
- /**
- * Handles context menus.
- * @constructor
- * @extends {EventTarget}
- */
- function ContextMenuHandler() {}
-
- ContextMenuHandler.prototype = {
- __proto__: EventTarget.prototype,
-
- /**
- * The menu that we are currently showing.
- * @type {cr.ui.Menu}
- */
- menu_: null,
- get menu() {
- return this.menu_;
- },
-
- /**
- * Shows a menu as a context menu.
- * @param {!Event} e The event triggering the show (usually a contextmenu
- * event).
- * @param {!cr.ui.Menu} menu The menu to show.
- */
- showMenu: function(e, menu) {
- this.menu_ = menu;
- menu.updateCommands(e.currentTarget);
- menu.hidden = false;
- menu.contextElement = e.currentTarget;
-
- // when the menu is shown we steal all keyboard events.
- var doc = menu.ownerDocument;
- doc.addEventListener('keydown', this, true);
- doc.addEventListener('mousedown', this, true);
- // Note: this should be listening for focus, as in menu_button.js, but
- // as per crbug.com/162190 this indirectly causes odd behaviour.
- // Since the context menu is currently not keyboard-accessible, blur
- // is sufficient for now.
- doc.addEventListener('blur', this, true);
- doc.defaultView.addEventListener('resize', this);
- menu.addEventListener('contextmenu', this);
- menu.addEventListener('activate', this);
- this.positionMenu_(e, menu);
-
- var ev = new Event('show');
- ev.element = menu.contextElement;
- ev.menu = menu;
- this.dispatchEvent(ev);
- },
-
- /**
- * Hide the currently shown menu.
- */
- hideMenu: function() {
- var menu = this.menu;
- if (!menu)
- return;
-
- menu.hidden = true;
- var originalContextElement = menu.contextElement;
- menu.contextElement = null;
- var doc = menu.ownerDocument;
- doc.removeEventListener('keydown', this, true);
- doc.removeEventListener('mousedown', this, true);
- doc.removeEventListener('blur', this, true);
- doc.defaultView.removeEventListener('resize', this);
- menu.removeEventListener('contextmenu', this);
- menu.removeEventListener('activate', this);
- menu.selectedIndex = -1;
- this.menu_ = null;
-
- // On windows we might hide the menu in a right mouse button up and if
- // that is the case we wait some short period before we allow the menu
- // to be shown again.
- this.hideTimestamp_ = cr.isWindows ? Date.now() : 0;
-
- var ev = new Event('hide');
- ev.element = menu.contextElement;
- ev.menu = menu;
- this.dispatchEvent(ev);
- },
-
- /**
- * Positions the menu
- * @param {!Event} e The event object triggering the showing.
- * @param {!cr.ui.Menu} menu The menu to position.
- * @private
- */
- positionMenu_: function(e, menu) {
- // TODO(arv): Handle scrolled documents when needed.
-
- var element = e.currentTarget;
- var x, y;
- // When the user presses the context menu key (on the keyboard) we need
- // to detect this.
- if (this.keyIsDown_) {
- var rect = element.getRectForContextMenu ?
- element.getRectForContextMenu() :
- element.getBoundingClientRect();
- var offset = Math.min(rect.width, rect.height) / 2;
- x = rect.left + offset;
- y = rect.top + offset;
- } else {
- x = e.clientX;
- y = e.clientY;
- }
-
- cr.ui.positionPopupAtPoint(x, y, menu);
- },
-
- /**
- * Handles event callbacks.
- * @param {!Event} e The event object.
- */
- handleEvent: function(e) {
- // Keep track of keydown state so that we can use that to determine the
- // reason for the contextmenu event.
- switch (e.type) {
- case 'keydown':
- this.keyIsDown_ = !e.ctrlKey && !e.altKey &&
- // context menu key or Shift-F10
- (e.keyCode == 93 && !e.shiftKey ||
- e.keyIdentifier == 'F10' && e.shiftKey);
- break;
-
- case 'keyup':
- this.keyIsDown_ = false;
- break;
- }
-
- // Context menu is handled even when we have no menu.
- if (e.type != 'contextmenu' && !this.menu)
- return;
-
- switch (e.type) {
- case 'mousedown':
- if (!this.menu.contains(e.target))
- this.hideMenu();
- else
- e.preventDefault();
- break;
- case 'keydown':
- // keyIdentifier does not report 'Esc' correctly
- if (e.keyCode == 27 /* Esc */) {
- this.hideMenu();
- e.stopPropagation();
- e.preventDefault();
-
- // If the menu is visible we let it handle all the keyboard events.
- } else if (this.menu) {
- this.menu.handleKeyDown(e);
- e.preventDefault();
- e.stopPropagation();
- }
- break;
-
- case 'activate':
- case 'blur':
- case 'resize':
- this.hideMenu();
- break;
-
- case 'contextmenu':
- if ((!this.menu || !this.menu.contains(e.target)) &&
- (!this.hideTimestamp_ || Date.now() - this.hideTimestamp_ > 50))
- this.showMenu(e, e.currentTarget.contextMenu);
- e.preventDefault();
- // Don't allow elements further up in the DOM to show their menus.
- e.stopPropagation();
- break;
- }
- },
-
- /**
- * Adds a contextMenu property to an element or element class.
- * @param {!Element|!Function} element The element or class to add the
- * contextMenu property to.
- */
- addContextMenuProperty: function(element) {
- if (typeof element == 'function')
- element = element.prototype;
-
- element.__defineGetter__('contextMenu', function() {
- return this.contextMenu_;
- });
- element.__defineSetter__('contextMenu', function(menu) {
- var oldContextMenu = this.contextMenu;
-
- if (typeof menu == 'string' && menu[0] == '#') {
- menu = this.ownerDocument.getElementById(menu.slice(1));
- cr.ui.decorate(menu, Menu);
- }
-
- if (menu === oldContextMenu)
- return;
-
- if (oldContextMenu && !menu) {
- this.removeEventListener('contextmenu', contextMenuHandler);
- this.removeEventListener('keydown', contextMenuHandler);
- this.removeEventListener('keyup', contextMenuHandler);
- }
- if (menu && !oldContextMenu) {
- this.addEventListener('contextmenu', contextMenuHandler);
- this.addEventListener('keydown', contextMenuHandler);
- this.addEventListener('keyup', contextMenuHandler);
- }
-
- this.contextMenu_ = menu;
-
- if (menu && menu.id)
- this.setAttribute('contextmenu', '#' + menu.id);
-
- cr.dispatchPropertyChange(this, 'contextMenu', menu, oldContextMenu);
- });
-
- if (!element.getRectForContextMenu) {
- /**
- * @return {!ClientRect} The rect to use for positioning the context
- * menu when the context menu is not opened using a mouse position.
- */
- element.getRectForContextMenu = function() {
- return this.getBoundingClientRect();
- };
- }
- },
-
- /**
- * Sets the given contextMenu to the given element. A contextMenu property
- * would be added if necessary.
- * @param {!Element} element The element or class to set the contextMenu to.
- * @param {!cr.ui.Menu} contextMenu The contextMenu property to be set.
- */
- setContextMenu: function(element, contextMenu) {
- if (!element.contextMenu)
- this.addContextMenuProperty(element);
- element.contextMenu = contextMenu;
- }
- };
-
- /**
- * The singleton context menu handler.
- * @type {!ContextMenuHandler}
- */
- var contextMenuHandler = new ContextMenuHandler;
-
- // Export
- return {
- contextMenuHandler: contextMenuHandler
- };
-});
« no previous file with comments | « chrome/browser/resources/shared/js/cr/ui/context_menu_button.js ('k') | chrome/browser/resources/shared/js/cr/ui/dialogs.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698