15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2011 The Chromium Authors. All rights reserved. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file. 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var KEY_MAP = { 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12: 'Clear', 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14: 'Enter', 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33: 'PgUp', 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34: 'PgDown', 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35: 'End', 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36: 'Home', 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 37: 'Left', 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38: 'Up', 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39: 'Right', 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 40: 'Down', 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 45: 'Insert', 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46: 'Delete', 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96: 'Numpad0', 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97: 'Numpad1', 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 98: 'Numpad2', 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 99: 'Numpad3', 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100: 'Numpad4', 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 101: 'Numpad5', 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102: 'Numpad6', 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 103: 'Numpad7', 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 104: 'Numpad8', 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105: 'Numpad9', 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 106: '*', 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107: 'Plus', 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108: '_', 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 109: '-', 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 111: '/', 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 112: 'F1', 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 113: 'F2', 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 114: 'F3', 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115: 'F4', 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 116: 'F5', 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 117: 'F6', 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 118: 'F7', 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 119: 'F8', 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 120: 'F9', 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 121: 'F10', 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122: 'F11', 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 123: 'F12', 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 124: 'F13', 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125: 'F14', 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 126: 'F15', 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 186: ';', 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 187: '=', 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 188: ',', 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 189: '-', 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 190: '.', 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 191: '/', 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192: '`', 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 219: '[', 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 221: ']' 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var isMac = (navigator.appVersion.indexOf("Mac") != -1); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function keyEventToString(evt) { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var tokens = []; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.ctrlKey) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokens.push('Control'); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.altKey) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokens.push(isMac ? 'Option' : 'Alt'); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.metaKey) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokens.push(isMac ? 'Command' : 'Meta'); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.shiftKey) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokens.push('Shift'); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evt.keyCode >= 48 && evt.keyCode <= 90) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokens.push(String.fromCharCode(evt.keyCode)); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (KEY_MAP[evt.keyCode]) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tokens.push(KEY_MAP[evt.keyCode]); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ''; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return tokens.join('+'); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getDefaultKeyString() { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return keyEventToString({ 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keyCode: 83, // 's' 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shiftKey: true, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) altKey: true, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ctrlKey: true, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) metaKey: false}); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 95