Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2009 Google Inc. All rights reserved. | 3 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * | 8 * |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 Tilde: { code: 192, name: "Tilde" }, | 97 Tilde: { code: 192, name: "Tilde" }, |
| 98 Backslash: { code: 220, name: "\\" }, | 98 Backslash: { code: 220, name: "\\" }, |
| 99 SingleQuote: { code: 222, name: "\'" }, | 99 SingleQuote: { code: 222, name: "\'" }, |
| 100 get CtrlOrMeta() | 100 get CtrlOrMeta() |
| 101 { | 101 { |
| 102 // "default" command/ctrl key for platform, Command on Mac, Ctrl on othe r platforms | 102 // "default" command/ctrl key for platform, Command on Mac, Ctrl on othe r platforms |
| 103 return WebInspector.isMac() ? this.Meta : this.Ctrl; | 103 return WebInspector.isMac() ? this.Meta : this.Ctrl; |
| 104 }, | 104 }, |
| 105 }; | 105 }; |
| 106 | 106 |
| 107 WebInspector.KeyboardShortcut.KeyBindings = { | |
|
pfeldman
2014/02/21 16:29:16
Lets not copy these definitions.
apavlov
2014/02/24 09:57:57
OK. But do we want to support "?" or replace it by
pfeldman
2014/03/13 05:24:02
I don't really see how these correlate. I was just
apavlov
2014/03/17 13:40:59
Okay, I'll build up the required map automatically
| |
| 108 // These must be in sync with WebInspector.KeyboardShortcut.Keys. | |
| 109 ";": { code: 186 }, | |
| 110 "+": { code: 187, shiftKey: true}, | |
| 111 ",": { code: 188 }, | |
| 112 "-": { code: 189 }, | |
| 113 ".": { code: 190 }, | |
| 114 "/": { code: 191 }, | |
| 115 "?": { code: 191, shiftKey: true }, | |
| 116 "`": { code: 192 }, | |
| 117 "~": { code: 192, shiftKey: true }, | |
| 118 "\\": { code: 220 }, | |
| 119 "'": { code: 222 } | |
| 120 } | |
| 121 | |
| 107 /** | 122 /** |
| 108 * Creates a number encoding keyCode in the lower 8 bits and modifiers mask in t he higher 8 bits. | 123 * Creates a number encoding keyCode in the lower 8 bits and modifiers mask in t he higher 8 bits. |
| 109 * It is useful for matching pressed keys. | 124 * It is useful for matching pressed keys. |
| 110 * | 125 * |
| 111 * @param {number|string} keyCode The code of the key, or a character "a-z" whic h is converted to a keyCode value. | 126 * @param {number|string} keyCode The code of the key, or a character "a-z" whic h is converted to a keyCode value. |
| 112 * @param {number=} modifiers Optional list of modifiers passed as additional pa ramerters. | 127 * @param {number=} modifiers Optional list of modifiers passed as additional pa ramerters. |
| 113 * @return {number} | 128 * @return {number} |
| 114 */ | 129 */ |
| 115 WebInspector.KeyboardShortcut.makeKey = function(keyCode, modifiers) | 130 WebInspector.KeyboardShortcut.makeKey = function(keyCode, modifiers) |
| 116 { | 131 { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 166 */ | 181 */ |
| 167 WebInspector.KeyboardShortcut.makeDescriptor = function(key, modifiers) | 182 WebInspector.KeyboardShortcut.makeDescriptor = function(key, modifiers) |
| 168 { | 183 { |
| 169 return { | 184 return { |
| 170 key: WebInspector.KeyboardShortcut.makeKey(typeof key === "string" ? key : key.code, modifiers), | 185 key: WebInspector.KeyboardShortcut.makeKey(typeof key === "string" ? key : key.code, modifiers), |
| 171 name: WebInspector.KeyboardShortcut.shortcutToString(key, modifiers) | 186 name: WebInspector.KeyboardShortcut.shortcutToString(key, modifiers) |
| 172 }; | 187 }; |
| 173 } | 188 } |
| 174 | 189 |
| 175 /** | 190 /** |
| 191 * @param {string} shortcut | |
| 192 * @return {number} | |
| 193 */ | |
| 194 WebInspector.KeyboardShortcut.makeKeyFromBindingShortcut = function(shortcut) | |
| 195 { | |
| 196 var parts = shortcut.split(/\+(?!$)/); | |
| 197 var modifiers = 0; | |
| 198 for (var i = 0; i < parts.length; ++i) { | |
| 199 if (typeof WebInspector.KeyboardShortcut.Modifiers[parts[i]] !== "undefi ned") { | |
| 200 modifiers |= WebInspector.KeyboardShortcut.Modifiers[parts[i]]; | |
| 201 continue; | |
| 202 } | |
| 203 console.assert(i === parts.length - 1, "Modifiers-only shortcuts are not allowed (encountered <" + shortcut + ">)"); | |
| 204 var key = WebInspector.KeyboardShortcut.Keys[parts[i]] || WebInspector.K eyboardShortcut.KeyBindings[parts[i]]; | |
| 205 if (key && key.shiftKey) | |
| 206 modifiers |= WebInspector.KeyboardShortcut.Modifiers.Shift; | |
| 207 return WebInspector.KeyboardShortcut.makeKey(key ? key.code : parts[i].t oLowerCase(), modifiers) | |
| 208 } | |
| 209 console.assert(false); | |
| 210 return 0; | |
| 211 } | |
| 212 | |
| 213 /** | |
| 176 * @param {string|!WebInspector.KeyboardShortcut.Key} key | 214 * @param {string|!WebInspector.KeyboardShortcut.Key} key |
| 177 * @param {number=} modifiers | 215 * @param {number=} modifiers |
| 178 * @return {string} | 216 * @return {string} |
| 179 */ | 217 */ |
| 180 WebInspector.KeyboardShortcut.shortcutToString = function(key, modifiers) | 218 WebInspector.KeyboardShortcut.shortcutToString = function(key, modifiers) |
| 181 { | 219 { |
| 182 return WebInspector.KeyboardShortcut._modifiersToString(modifiers) + WebInsp ector.KeyboardShortcut._keyName(key); | 220 return WebInspector.KeyboardShortcut._modifiersToString(modifiers) + WebInsp ector.KeyboardShortcut._keyName(key); |
| 183 } | 221 } |
| 184 | 222 |
| 185 /** | 223 /** |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 223 if (modifiers & WebInspector.KeyboardShortcut.Modifiers.Alt) | 261 if (modifiers & WebInspector.KeyboardShortcut.Modifiers.Alt) |
| 224 res += isMac ? optKey : "Alt + "; | 262 res += isMac ? optKey : "Alt + "; |
| 225 if (modifiers & WebInspector.KeyboardShortcut.Modifiers.Shift) | 263 if (modifiers & WebInspector.KeyboardShortcut.Modifiers.Shift) |
| 226 res += isMac ? shiftKey : "Shift + "; | 264 res += isMac ? shiftKey : "Shift + "; |
| 227 if (modifiers & WebInspector.KeyboardShortcut.Modifiers.Meta) | 265 if (modifiers & WebInspector.KeyboardShortcut.Modifiers.Meta) |
| 228 res += isMac ? cmdKey : "Win + "; | 266 res += isMac ? cmdKey : "Win + "; |
| 229 | 267 |
| 230 return res; | 268 return res; |
| 231 }; | 269 }; |
| 232 | 270 |
| 271 /** | |
| 272 * @param {!KeyboardEvent} event | |
| 273 */ | |
| 274 WebInspector.KeyboardShortcut.handleShortcut = function(event) | |
| 275 { | |
| 276 var key = WebInspector.KeyboardShortcut.makeKeyFromEvent(event); | |
| 277 var extensions = WebInspector.KeyboardShortcut._keysToActionExtensions[key]; | |
| 278 if (!extensions) | |
| 279 return; | |
| 280 | |
| 281 function handler(extension) | |
| 282 { | |
| 283 var result = extension.instance().handleAction(event); | |
| 284 if (result) | |
| 285 event.consume(true); | |
| 286 delete WebInspector.KeyboardShortcut._pendingActionTimer; | |
| 287 return result; | |
| 288 } | |
| 289 | |
| 290 for (var i = 0; i < extensions.length; ++i) { | |
| 291 var ident = event.keyIdentifier; | |
| 292 if (/^F\d+|Control|Shift|Alt|U+001B$/.test(ident) || event.ctrlKey || ev ent.altKey || event.metaKey) { | |
| 293 if (handler(extensions[i])) | |
| 294 return; | |
| 295 } else { | |
| 296 WebInspector.KeyboardShortcut._pendingActionTimer = setTimeout(handl er.bind(null, extensions[i]), 0); | |
| 297 break; | |
| 298 } | |
| 299 } | |
| 300 } | |
| 301 | |
| 233 WebInspector.KeyboardShortcut.SelectAll = WebInspector.KeyboardShortcut.makeKey( "a", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta); | 302 WebInspector.KeyboardShortcut.SelectAll = WebInspector.KeyboardShortcut.makeKey( "a", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta); |
| 303 | |
| 304 WebInspector.KeyboardShortcut._onkeypress = function(event) | |
| 305 { | |
| 306 if (!WebInspector.KeyboardShortcut._pendingActionTimer) | |
| 307 return; | |
| 308 | |
| 309 var target = event.target; | |
| 310 if (WebInspector.isBeingEdited(event.target)) { | |
| 311 clearTimeout(WebInspector.KeyboardShortcut._pendingActionTimer); | |
| 312 delete WebInspector.KeyboardShortcut._pendingActionTimer; | |
| 313 } | |
| 314 } | |
| 315 | |
| 316 WebInspector.KeyboardShortcut.loadBindings = function() | |
|
pfeldman
2014/02/21 16:29:16
What is this loading?
apavlov
2014/02/24 09:57:57
It is called from inspector.js once modules have b
pfeldman
2014/03/13 05:24:02
It should be called differently then - loadBinding
| |
| 317 { | |
| 318 /** | |
| 319 * @param {string=} platformsString | |
| 320 * @return {boolean} | |
| 321 */ | |
| 322 function platformMatches(platformsString) | |
| 323 { | |
| 324 if (!platformsString) | |
| 325 return true; | |
| 326 var platforms = platformsString.split(","); | |
| 327 var isMatch = false; | |
| 328 for (var i = 0; i < platforms.length; ++i) { | |
| 329 var currentPlatform = platforms[i]; | |
| 330 var negate = false; | |
| 331 if (currentPlatform.charAt(0) === "!") { | |
| 332 currentPlatform = currentPlatform.substring(1); | |
| 333 negate = true; | |
| 334 } | |
| 335 var match = WebInspector.platform() === currentPlatform; | |
| 336 isMatch |= negate ? !match : match; | |
| 337 } | |
| 338 return isMatch; | |
| 339 } | |
| 340 | |
| 341 /** | |
| 342 * @param {!WebInspector.ModuleManager.Extension} extension | |
| 343 */ | |
| 344 function registerBindings(extension) | |
| 345 { | |
| 346 var bindings = extension.descriptor().bindings; | |
| 347 if (!bindings) | |
| 348 return; | |
| 349 for (var i = 0; i < bindings.length; ++i) { | |
| 350 if (!platformMatches(bindings[i].platform)) | |
| 351 continue; | |
| 352 var key = WebInspector.KeyboardShortcut.makeKeyFromBindingShortcut(b indings[i].shortcut); | |
| 353 if (key) { | |
| 354 if (WebInspector.KeyboardShortcut._keysToActionExtensions[key]) | |
| 355 WebInspector.KeyboardShortcut._keysToActionExtensions[key].p ush(extension); | |
| 356 else | |
| 357 WebInspector.KeyboardShortcut._keysToActionExtensions[key] = [extension]; | |
| 358 } | |
| 359 } | |
| 360 } | |
| 361 | |
| 362 document.addEventListener("keypress", WebInspector.KeyboardShortcut._onkeypr ess, true); | |
| 363 WebInspector.KeyboardShortcut._keysToActionExtensions = {}; | |
| 364 var extensions = WebInspector.moduleManager.extensions(WebInspector.ActionDe legate); | |
| 365 extensions.forEach(registerBindings); | |
| 366 } | |
| OLD | NEW |