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

Unified Diff: chrome/browser/resources/shared/js/cr/ui/command.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/command.js
===================================================================
--- chrome/browser/resources/shared/js/cr/ui/command.js (revision 177292)
+++ chrome/browser/resources/shared/js/cr/ui/command.js (working copy)
@@ -1,311 +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.
-
-/**
- * @fileoverview A command is an abstraction of an action a user can do in the
- * UI.
- *
- * When the focus changes in the document for each command a canExecute event
- * is dispatched on the active element. By listening to this event you can
- * enable and disable the command by setting the event.canExecute property.
- *
- * When a command is executed a command event is dispatched on the active
- * element. Note that you should stop the propagation after you have handled the
- * command if there might be other command listeners higher up in the DOM tree.
- */
-
-cr.define('cr.ui', function() {
-
- /**
- * This is used to identify keyboard shortcuts.
- * @param {string} shortcut The text used to describe the keys for this
- * keyboard shortcut.
- * @constructor
- */
- function KeyboardShortcut(shortcut) {
- var mods = {};
- var ident = '';
- shortcut.split('-').forEach(function(part) {
- var partLc = part.toLowerCase();
- switch (partLc) {
- case 'alt':
- case 'ctrl':
- case 'meta':
- case 'shift':
- mods[partLc + 'Key'] = true;
- break;
- default:
- if (ident)
- throw Error('Invalid shortcut');
- ident = part;
- }
- });
-
- this.ident_ = ident;
- this.mods_ = mods;
- }
-
- KeyboardShortcut.prototype = {
- /**
- * Whether the keyboard shortcut object matches a keyboard event.
- * @param {!Event} e The keyboard event object.
- * @return {boolean} Whether we found a match or not.
- */
- matchesEvent: function(e) {
- if (e.keyIdentifier == this.ident_) {
- // All keyboard modifiers needs to match.
- var mods = this.mods_;
- return ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].every(function(k) {
- return e[k] == !!mods[k];
- });
- }
- return false;
- }
- };
-
- /**
- * Creates a new command element.
- * @constructor
- * @extends {HTMLElement}
- */
- var Command = cr.ui.define('command');
-
- Command.prototype = {
- __proto__: HTMLElement.prototype,
-
- /**
- * Initializes the command.
- */
- decorate: function() {
- CommandManager.init(this.ownerDocument);
-
- if (this.hasAttribute('shortcut'))
- this.shortcut = this.getAttribute('shortcut');
- },
-
- /**
- * Executes the command by dispatching a command event on the given element.
- * If |element| isn't given, the active element is used instead.
- * If the command is {@code disabled} this does nothing.
- * @param {HTMLElement=} opt_element Optional element to dispatch event on.
- */
- execute: function(opt_element) {
- if (this.disabled)
- return;
- var doc = this.ownerDocument;
- if (doc.activeElement) {
- var e = new cr.Event('command', true, false);
- e.command = this;
-
- (opt_element || doc.activeElement).dispatchEvent(e);
- }
- },
-
- /**
- * Call this when there have been changes that might change whether the
- * command can be executed or not.
- * @param {Node=} opt_node Node for which to actuate command state.
- */
- canExecuteChange: function(opt_node) {
- dispatchCanExecuteEvent(this,
- opt_node || this.ownerDocument.activeElement);
- },
-
- /**
- * The keyboard shortcut that triggers the command. This is a string
- * consisting of a keyIdentifier (as reported by WebKit in keydown) as
- * well as optional key modifiers joinded with a '-'.
- *
- * Multiple keyboard shortcuts can be provided by separating them by
- * whitespace.
- *
- * For example:
- * "F1"
- * "U+0008-Meta" for Apple command backspace.
- * "U+0041-Ctrl" for Control A
- * "U+007F U+0008-Meta" for Delete and Command Backspace
- *
- * @type {string}
- */
- shortcut_: '',
- get shortcut() {
- return this.shortcut_;
- },
- set shortcut(shortcut) {
- var oldShortcut = this.shortcut_;
- if (shortcut !== oldShortcut) {
- this.keyboardShortcuts_ = shortcut.split(/\s+/).map(function(shortcut) {
- return new KeyboardShortcut(shortcut);
- });
-
- // Set this after the keyboardShortcuts_ since that might throw.
- this.shortcut_ = shortcut;
- cr.dispatchPropertyChange(this, 'shortcut', this.shortcut_,
- oldShortcut);
- }
- },
-
- /**
- * Whether the event object matches the shortcut for this command.
- * @param {!Event} e The key event object.
- * @return {boolean} Whether it matched or not.
- */
- matchesEvent: function(e) {
- if (!this.keyboardShortcuts_)
- return false;
-
- return this.keyboardShortcuts_.some(function(keyboardShortcut) {
- return keyboardShortcut.matchesEvent(e);
- });
- }
- };
-
- /**
- * The label of the command.
- * @type {string}
- */
- cr.defineProperty(Command, 'label', cr.PropertyKind.ATTR);
-
- /**
- * Whether the command is disabled or not.
- * @type {boolean}
- */
- cr.defineProperty(Command, 'disabled', cr.PropertyKind.BOOL_ATTR);
-
- /**
- * Whether the command is hidden or not.
- * @type {boolean}
- */
- cr.defineProperty(Command, 'hidden', cr.PropertyKind.BOOL_ATTR);
-
- /**
- * Whether the command is checked or not.
- * @type {boolean}
- */
- cr.defineProperty(Command, 'checked', cr.PropertyKind.BOOL_ATTR);
-
- /**
- * Dispatches a canExecute event on the target.
- * @param {cr.ui.Command} command The command that we are testing for.
- * @param {Element} target The target element to dispatch the event on.
- */
- function dispatchCanExecuteEvent(command, target) {
- var e = new CanExecuteEvent(command, true);
- target.dispatchEvent(e);
- command.disabled = !e.canExecute;
- }
-
- /**
- * The command managers for different documents.
- */
- var commandManagers = {};
-
- /**
- * Keeps track of the focused element and updates the commands when the focus
- * changes.
- * @param {!Document} doc The document that we are managing the commands for.
- * @constructor
- */
- function CommandManager(doc) {
- doc.addEventListener('focus', this.handleFocus_.bind(this), true);
- // Make sure we add the listener to the bubbling phase so that elements can
- // prevent the command.
- doc.addEventListener('keydown', this.handleKeyDown_.bind(this), false);
- }
-
- /**
- * Initializes a command manager for the document as needed.
- * @param {!Document} doc The document to manage the commands for.
- */
- CommandManager.init = function(doc) {
- var uid = cr.getUid(doc);
- if (!(uid in commandManagers)) {
- commandManagers[uid] = new CommandManager(doc);
- }
- };
-
- CommandManager.prototype = {
-
- /**
- * Handles focus changes on the document.
- * @param {Event} e The focus event object.
- * @private
- */
- handleFocus_: function(e) {
- var target = e.target;
- var commands = Array.prototype.slice.call(
- target.ownerDocument.querySelectorAll('command'));
-
- commands.forEach(function(command) {
- dispatchCanExecuteEvent(command, target);
- });
- },
-
- /**
- * Handles the keydown event and routes it to the right command.
- * @param {!Event} e The keydown event.
- */
- handleKeyDown_: function(e) {
- var target = e.target;
- var commands = Array.prototype.slice.call(
- target.ownerDocument.querySelectorAll('command'));
-
- for (var i = 0, command; command = commands[i]; i++) {
- if (!command.disabled && command.matchesEvent(e)) {
- e.preventDefault();
- // We do not want any other element to handle this.
- e.stopPropagation();
-
- command.execute();
- return;
- }
- }
- }
- };
-
- /**
- * The event type used for canExecute events.
- * @param {!cr.ui.Command} command The command that we are evaluating.
- * @extends {Event}
- * @constructor
- * @class
- */
- function CanExecuteEvent(command) {
- var e = command.ownerDocument.createEvent('Event');
- e.initEvent('canExecute', true, false);
- e.__proto__ = CanExecuteEvent.prototype;
- e.command = command;
- return e;
- }
-
- CanExecuteEvent.prototype = {
- __proto__: Event.prototype,
-
- /**
- * The current command
- * @type {cr.ui.Command}
- */
- command: null,
-
- /**
- * Whether the target can execute the command. Setting this also stops the
- * propagation.
- * @type {boolean}
- */
- canExecute_: false,
- get canExecute() {
- return this.canExecute_;
- },
- set canExecute(canExecute) {
- this.canExecute_ = !!canExecute;
- this.stopPropagation();
- }
- };
-
- // Export
- return {
- Command: Command,
- CanExecuteEvent: CanExecuteEvent
- };
-});

Powered by Google App Engine
This is Rietveld 408576698