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

Side by Side Diff: chrome/browser/resources/md_downloads/crisper.js

Issue 2104103002: Convert Event#keyIdentifier (deprecated) to Event#key (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Patch file manager test Created 4 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview Assertion support. 6 * @fileoverview Assertion support.
7 */ 7 */
8 8
9 /** 9 /**
10 * Verify |condition| is truthy and return |condition| if so. 10 * Verify |condition| is truthy and return |condition| if so.
(...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 832
833 /** 833 /**
834 * This is used to identify keyboard shortcuts. 834 * This is used to identify keyboard shortcuts.
835 * @param {string} shortcut The text used to describe the keys for this 835 * @param {string} shortcut The text used to describe the keys for this
836 * keyboard shortcut. 836 * keyboard shortcut.
837 * @constructor 837 * @constructor
838 */ 838 */
839 function KeyboardShortcut(shortcut) { 839 function KeyboardShortcut(shortcut) {
840 var mods = {}; 840 var mods = {};
841 var ident = ''; 841 var ident = '';
842 shortcut.split('-').forEach(function(part) { 842 shortcut.split('|').forEach(function(part) {
843 var partLc = part.toLowerCase(); 843 var partLc = part.toLowerCase();
844 switch (partLc) { 844 switch (partLc) {
845 case 'alt': 845 case 'alt':
846 case 'ctrl': 846 case 'ctrl':
847 case 'meta': 847 case 'meta':
848 case 'shift': 848 case 'shift':
849 mods[partLc + 'Key'] = true; 849 mods[partLc + 'Key'] = true;
850 break; 850 break;
851 default: 851 default:
852 if (ident) 852 if (ident)
853 throw Error('Invalid shortcut'); 853 throw Error('Invalid shortcut');
854 ident = part; 854 ident = part;
855 } 855 }
856 }); 856 });
857 857
858 this.ident_ = ident; 858 this.ident_ = ident;
859 this.mods_ = mods; 859 this.mods_ = mods;
860 } 860 }
861 861
862 KeyboardShortcut.prototype = { 862 KeyboardShortcut.prototype = {
863 /** 863 /**
864 * Whether the keyboard shortcut object matches a keyboard event. 864 * Whether the keyboard shortcut object matches a keyboard event.
865 * @param {!Event} e The keyboard event object. 865 * @param {!Event} e The keyboard event object.
866 * @return {boolean} Whether we found a match or not. 866 * @return {boolean} Whether we found a match or not.
867 */ 867 */
868 matchesEvent: function(e) { 868 matchesEvent: function(e) {
869 if (e.keyIdentifier == this.ident_) { 869 if (e.key == this.ident_) {
870 // All keyboard modifiers needs to match. 870 // All keyboard modifiers needs to match.
871 var mods = this.mods_; 871 var mods = this.mods_;
872 return ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].every(function(k) { 872 return ['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].every(function(k) {
873 return e[k] == !!mods[k]; 873 return e[k] == !!mods[k];
874 }); 874 });
875 } 875 }
876 return false; 876 return false;
877 } 877 }
878 }; 878 };
879 879
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 * command can be executed or not. 920 * command can be executed or not.
921 * @param {Node=} opt_node Node for which to actuate command state. 921 * @param {Node=} opt_node Node for which to actuate command state.
922 */ 922 */
923 canExecuteChange: function(opt_node) { 923 canExecuteChange: function(opt_node) {
924 dispatchCanExecuteEvent(this, 924 dispatchCanExecuteEvent(this,
925 opt_node || this.ownerDocument.activeElement); 925 opt_node || this.ownerDocument.activeElement);
926 }, 926 },
927 927
928 /** 928 /**
929 * The keyboard shortcut that triggers the command. This is a string 929 * The keyboard shortcut that triggers the command. This is a string
930 * consisting of a keyIdentifier (as reported by WebKit in keydown) as 930 * consisting of a key (as reported by WebKit in keydown) as
931 * well as optional key modifiers joinded with a '-'. 931 * well as optional key modifiers joinded with a '|'.
932 * 932 *
933 * Multiple keyboard shortcuts can be provided by separating them by 933 * Multiple keyboard shortcuts can be provided by separating them by
934 * whitespace. 934 * whitespace.
935 * 935 *
936 * For example: 936 * For example:
937 * "F1" 937 * "F1"
938 * "U+0008-Meta" for Apple command backspace. 938 * "Backspace-Meta" for Apple command backspace.
939 * "U+0041-Ctrl" for Control A 939 * "a-Ctrl" for Control A
940 * "U+007F U+0008-Meta" for Delete and Command Backspace 940 * "Delete Backspace-Meta" for Delete and Command Backspace
941 * 941 *
942 * @type {string} 942 * @type {string}
943 */ 943 */
944 shortcut_: '', 944 shortcut_: '',
945 get shortcut() { 945 get shortcut() {
946 return this.shortcut_; 946 return this.shortcut_;
947 }, 947 },
948 set shortcut(shortcut) { 948 set shortcut(shortcut) {
949 var oldShortcut = this.shortcut_; 949 var oldShortcut = this.shortcut_;
950 if (shortcut !== oldShortcut) { 950 if (shortcut !== oldShortcut) {
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 var KEY_IDENTIFIER = { 1707 var KEY_IDENTIFIER = {
1708 'U+0008': 'backspace', 1708 'U+0008': 'backspace',
1709 'U+0009': 'tab', 1709 'U+0009': 'tab',
1710 'U+001B': 'esc', 1710 'U+001B': 'esc',
1711 'U+0020': 'space', 1711 'U+0020': 'space',
1712 'U+007F': 'del' 1712 'U+007F': 'del'
1713 }; 1713 };
1714 1714
1715 /** 1715 /**
1716 * Special table for KeyboardEvent.keyCode. 1716 * Special table for KeyboardEvent.keyCode.
1717 * KeyboardEvent.keyIdentifier is better, and KeyBoardEvent.key is even bett er 1717 * KeyBoardEvent.key is even better than that.
1718 * than that.
1719 * 1718 *
1720 * Values from: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEve nt.keyCode#Value_of_keyCode 1719 * Values from: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEve nt.keyCode#Value_of_keyCode
1721 */ 1720 */
1722 var KEY_CODE = { 1721 var KEY_CODE = {
1723 8: 'backspace', 1722 8: 'backspace',
1724 9: 'tab', 1723 9: 'tab',
1725 13: 'enter', 1724 13: 'enter',
1726 27: 'esc', 1725 27: 'esc',
1727 33: 'pageup', 1726 33: 'pageup',
1728 34: 'pagedown', 1727 34: 'pagedown',
(...skipping 23 matching lines...) Expand all
1752 /** 1751 /**
1753 * KeyboardEvent.key is mostly represented by printable character made by 1752 * KeyboardEvent.key is mostly represented by printable character made by
1754 * the keyboard, with unprintable keys labeled nicely. 1753 * the keyboard, with unprintable keys labeled nicely.
1755 * 1754 *
1756 * However, on OS X, Alt+char can make a Unicode character that follows an 1755 * However, on OS X, Alt+char can make a Unicode character that follows an
1757 * Apple-specific mapping. In this case, we fall back to .keyCode. 1756 * Apple-specific mapping. In this case, we fall back to .keyCode.
1758 */ 1757 */
1759 var KEY_CHAR = /[a-z0-9*]/; 1758 var KEY_CHAR = /[a-z0-9*]/;
1760 1759
1761 /** 1760 /**
1762 * Matches a keyIdentifier string.
1763 */
1764 var IDENT_CHAR = /U\+/;
1765
1766 /**
1767 * Matches arrow keys in Gecko 27.0+ 1761 * Matches arrow keys in Gecko 27.0+
1768 */ 1762 */
1769 var ARROW_KEY = /^arrow/; 1763 var ARROW_KEY = /^arrow/;
1770 1764
1771 /** 1765 /**
1772 * Matches space keys everywhere (notably including IE10's exceptional name 1766 * Matches space keys everywhere (notably including IE10's exceptional name
1773 * `spacebar`). 1767 * `spacebar`).
1774 */ 1768 */
1775 var SPACE_KEY = /^space(bar)?/; 1769 var SPACE_KEY = /^space(bar)?/;
1776 1770
(...skipping 27 matching lines...) Expand all
1804 } else if (lKey == 'multiply') { 1798 } else if (lKey == 'multiply') {
1805 // numpad '*' can map to Multiply on IE/Windows 1799 // numpad '*' can map to Multiply on IE/Windows
1806 validKey = '*'; 1800 validKey = '*';
1807 } else { 1801 } else {
1808 validKey = lKey; 1802 validKey = lKey;
1809 } 1803 }
1810 } 1804 }
1811 return validKey; 1805 return validKey;
1812 } 1806 }
1813 1807
1814 function transformKeyIdentifier(keyIdent) {
1815 var validKey = '';
1816 if (keyIdent) {
1817 if (keyIdent in KEY_IDENTIFIER) {
1818 validKey = KEY_IDENTIFIER[keyIdent];
1819 } else if (IDENT_CHAR.test(keyIdent)) {
1820 keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16);
1821 validKey = String.fromCharCode(keyIdent).toLowerCase();
1822 } else {
1823 validKey = keyIdent.toLowerCase();
1824 }
1825 }
1826 return validKey;
1827 }
1828
1829 function transformKeyCode(keyCode) { 1808 function transformKeyCode(keyCode) {
1830 var validKey = ''; 1809 var validKey = '';
1831 if (Number(keyCode)) { 1810 if (Number(keyCode)) {
1832 if (keyCode >= 65 && keyCode <= 90) { 1811 if (keyCode >= 65 && keyCode <= 90) {
1833 // ascii a-z 1812 // ascii a-z
1834 // lowercase is 32 offset from uppercase 1813 // lowercase is 32 offset from uppercase
1835 validKey = String.fromCharCode(32 + keyCode); 1814 validKey = String.fromCharCode(32 + keyCode);
1836 } else if (keyCode >= 112 && keyCode <= 123) { 1815 } else if (keyCode >= 112 && keyCode <= 123) {
1837 // function keys f1-f12 1816 // function keys f1-f12
1838 validKey = 'f' + (keyCode - 112); 1817 validKey = 'f' + (keyCode - 112);
(...skipping 14 matching lines...) Expand all
1853 * Calculates the normalized key for a KeyboardEvent. 1832 * Calculates the normalized key for a KeyboardEvent.
1854 * @param {KeyboardEvent} keyEvent 1833 * @param {KeyboardEvent} keyEvent
1855 * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key 1834 * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key
1856 * transformation to alpha-numeric chars. This is useful with key 1835 * transformation to alpha-numeric chars. This is useful with key
1857 * combinations like shift + 2, which on FF for MacOS produces 1836 * combinations like shift + 2, which on FF for MacOS produces
1858 * keyEvent.key = @ 1837 * keyEvent.key = @
1859 * To get 2 returned, set noSpecialChars = true 1838 * To get 2 returned, set noSpecialChars = true
1860 * To get @ returned, set noSpecialChars = false 1839 * To get @ returned, set noSpecialChars = false
1861 */ 1840 */
1862 function normalizedKeyForEvent(keyEvent, noSpecialChars) { 1841 function normalizedKeyForEvent(keyEvent, noSpecialChars) {
1863 // Fall back from .key, to .keyIdentifier, to .keyCode, and then to 1842 // Fall back from .key, to .keyCode, and then to
1864 // .detail.key to support artificial keyboard events. 1843 // .detail.key to support artificial keyboard events.
1865 return transformKey(keyEvent.key, noSpecialChars) || 1844 return transformKey(keyEvent.key, noSpecialChars) ||
1866 transformKeyIdentifier(keyEvent.keyIdentifier) ||
1867 transformKeyCode(keyEvent.keyCode) || 1845 transformKeyCode(keyEvent.keyCode) ||
1868 transformKey(keyEvent.detail ? keyEvent.detail.key : keyEvent.detail, no SpecialChars) || ''; 1846 transformKey(keyEvent.detail ? keyEvent.detail.key : keyEvent.detail, no SpecialChars) || '';
1869 } 1847 }
1870 1848
1871 function keyComboMatchesEvent(keyCombo, event) { 1849 function keyComboMatchesEvent(keyCombo, event) {
1872 // For combos with modifiers we support only alpha-numeric keys 1850 // For combos with modifiers we support only alpha-numeric keys
1873 var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers); 1851 var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers);
1874 return keyEvent === keyCombo.key && 1852 return keyEvent === keyCombo.key &&
1875 (!keyCombo.hasModifiers || ( 1853 (!keyCombo.hasModifiers || (
1876 !!event.shiftKey === !!keyCombo.shiftKey && 1854 !!event.shiftKey === !!keyCombo.shiftKey &&
(...skipping 2294 matching lines...) Expand 10 before | Expand all | Expand 10 after
4171 4149
4172 /** @this {ActionLink} */ 4150 /** @this {ActionLink} */
4173 createdCallback: function() { 4151 createdCallback: function() {
4174 // Action links can start disabled (e.g. <a is="action-link" disabled>). 4152 // Action links can start disabled (e.g. <a is="action-link" disabled>).
4175 this.tabIndex = this.disabled ? -1 : 0; 4153 this.tabIndex = this.disabled ? -1 : 0;
4176 4154
4177 if (!this.hasAttribute('role')) 4155 if (!this.hasAttribute('role'))
4178 this.setAttribute('role', 'link'); 4156 this.setAttribute('role', 'link');
4179 4157
4180 this.addEventListener('keydown', function(e) { 4158 this.addEventListener('keydown', function(e) {
4181 if (!this.disabled && e.keyIdentifier == 'Enter' && !this.href) { 4159 if (!this.disabled && e.key == 'Enter' && !this.href) {
4182 // Schedule a click asynchronously because other 'keydown' handlers 4160 // Schedule a click asynchronously because other 'keydown' handlers
4183 // may still run later (e.g. document.addEventListener('keydown')). 4161 // may still run later (e.g. document.addEventListener('keydown')).
4184 // Specifically options dialogs break when this timeout isn't here. 4162 // Specifically options dialogs break when this timeout isn't here.
4185 // NOTE: this affects the "trusted" state of the ensuing click. I 4163 // NOTE: this affects the "trusted" state of the ensuing click. I
4186 // haven't found anything that breaks because of this (yet). 4164 // haven't found anything that breaks because of this (yet).
4187 window.setTimeout(this.click.bind(this), 0); 4165 window.setTimeout(this.click.bind(this), 0);
4188 } 4166 }
4189 }); 4167 });
4190 4168
4191 function preventDefault(e) { 4169 function preventDefault(e) {
(...skipping 7347 matching lines...) Expand 10 before | Expand all | Expand 10 after
11539 Manager.updateItem = function(index, data) { 11517 Manager.updateItem = function(index, data) {
11540 Manager.get().updateItem_(index, data); 11518 Manager.get().updateItem_(index, data);
11541 }; 11519 };
11542 11520
11543 return {Manager: Manager}; 11521 return {Manager: Manager};
11544 }); 11522 });
11545 // Copyright 2015 The Chromium Authors. All rights reserved. 11523 // Copyright 2015 The Chromium Authors. All rights reserved.
11546 // Use of this source code is governed by a BSD-style license that can be 11524 // Use of this source code is governed by a BSD-style license that can be
11547 // found in the LICENSE file. 11525 // found in the LICENSE file.
11548 11526
11549 window.addEventListener('load', downloads.Manager.onLoad); 11527 window.addEventListener('load', downloads.Manager.onLoad);
OLDNEW
« no previous file with comments | « chrome/browser/resources/chromeos/wallpaper_manager/main.html ('k') | chrome/browser/resources/md_downloads/downloads.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698