| OLD | NEW |
| 1 (function() { | 1 (function() { |
| 2 'use strict'; | 2 'use strict'; |
| 3 | 3 |
| 4 /** | 4 /** |
| 5 * Chrome uses an older version of DOM Level 3 Keyboard Events | 5 * Chrome uses an older version of DOM Level 3 Keyboard Events |
| 6 * | 6 * |
| 7 * Most keys are labeled as text, but some are Unicode codepoints. | 7 * Most keys are labeled as text, but some are Unicode codepoints. |
| 8 * Values taken from: http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-200712
21/keyset.html#KeySet-Set | 8 * Values taken from: http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-200712
21/keyset.html#KeySet-Set |
| 9 */ | 9 */ |
| 10 var KEY_IDENTIFIER = { | 10 var KEY_IDENTIFIER = { |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 * keyEvent.key = @ | 161 * keyEvent.key = @ |
| 162 * To get 2 returned, set noSpecialChars = true | 162 * To get 2 returned, set noSpecialChars = true |
| 163 * To get @ returned, set noSpecialChars = false | 163 * To get @ returned, set noSpecialChars = false |
| 164 */ | 164 */ |
| 165 function normalizedKeyForEvent(keyEvent, noSpecialChars) { | 165 function normalizedKeyForEvent(keyEvent, noSpecialChars) { |
| 166 // Fall back from .key, to .keyIdentifier, to .keyCode, and then to | 166 // Fall back from .key, to .keyIdentifier, to .keyCode, and then to |
| 167 // .detail.key to support artificial keyboard events. | 167 // .detail.key to support artificial keyboard events. |
| 168 return transformKey(keyEvent.key, noSpecialChars) || | 168 return transformKey(keyEvent.key, noSpecialChars) || |
| 169 transformKeyIdentifier(keyEvent.keyIdentifier) || | 169 transformKeyIdentifier(keyEvent.keyIdentifier) || |
| 170 transformKeyCode(keyEvent.keyCode) || | 170 transformKeyCode(keyEvent.keyCode) || |
| 171 transformKey(keyEvent.detail.key, noSpecialChars) || ''; | 171 transformKey(keyEvent.detail ? keyEvent.detail.key : keyEvent.detail, no
SpecialChars) || ''; |
| 172 } | 172 } |
| 173 | 173 |
| 174 function keyComboMatchesEvent(keyCombo, event) { | 174 function keyComboMatchesEvent(keyCombo, event) { |
| 175 // For combos with modifiers we support only alpha-numeric keys | 175 // For combos with modifiers we support only alpha-numeric keys |
| 176 var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers); | 176 var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers); |
| 177 return keyEvent === keyCombo.key && | 177 return keyEvent === keyCombo.key && |
| 178 (!keyCombo.hasModifiers || ( | 178 (!keyCombo.hasModifiers || ( |
| 179 !!event.shiftKey === !!keyCombo.shiftKey && | 179 !!event.shiftKey === !!keyCombo.shiftKey && |
| 180 !!event.ctrlKey === !!keyCombo.ctrlKey && | 180 !!event.ctrlKey === !!keyCombo.ctrlKey && |
| 181 !!event.altKey === !!keyCombo.altKey && | 181 !!event.altKey === !!keyCombo.altKey && |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 detail: detail, | 439 detail: detail, |
| 440 cancelable: true | 440 cancelable: true |
| 441 }); | 441 }); |
| 442 this[handlerName].call(this, event); | 442 this[handlerName].call(this, event); |
| 443 if (event.defaultPrevented) { | 443 if (event.defaultPrevented) { |
| 444 keyboardEvent.preventDefault(); | 444 keyboardEvent.preventDefault(); |
| 445 } | 445 } |
| 446 } | 446 } |
| 447 }; | 447 }; |
| 448 })(); | 448 })(); |
| OLD | NEW |