module.exports = function(locale, platform, userAgent) { // general locale.bindKeyCode(3, ['cancel']); locale.bindKeyCode(8, ['backspace']); locale.bindKeyCode(9, ['tab']); locale.bindKeyCode(12, ['clear']); locale.bindKeyCode(13, ['enter']); locale.bindKeyCode(16, ['shift']); locale.bindKeyCode(17, ['ctrl']); locale.bindKeyCode(18, ['alt', 'menu']); locale.bindKeyCode(19, ['pause', 'break']); locale.bindKeyCode(20, ['capslock']); locale.bindKeyCode(27, ['escape', 'esc']); locale.bindKeyCode(32, ['space', 'spacebar']); locale.bindKeyCode(33, ['pageup']); locale.bindKeyCode(34, ['pagedown']); locale.bindKeyCode(35, ['end']); locale.bindKeyCode(36, ['home']); locale.bindKeyCode(37, ['left']); locale.bindKeyCode(38, ['up']); locale.bindKeyCode(39, ['right']); locale.bindKeyCode(40, ['down']); locale.bindKeyCode(41, ['select']); locale.bindKeyCode(42, ['printscreen']); locale.bindKeyCode(43, ['execute']); locale.bindKeyCode(44, ['snapshot']); locale.bindKeyCode(45, ['insert', 'ins']); locale.bindKeyCode(46, ['delete', 'del']); locale.bindKeyCode(47, ['help']); locale.bindKeyCode(145, ['scrolllock', 'scroll']); locale.bindKeyCode(187, ['equal', 'equalsign', '=']); locale.bindKeyCode(188, ['comma', ',']); locale.bindKeyCode(190, ['period', '.']); locale.bindKeyCode(191, ['slash', 'forwardslash', '/']); locale.bindKeyCode(192, ['graveaccent', '`']); locale.bindKeyCode(219, ['openbracket', '[']); locale.bindKeyCode(220, ['backslash', '\\']); locale.bindKeyCode(221, ['closebracket', ']']); locale.bindKeyCode(222, ['apostrophe', '\'']); // 0-9 locale.bindKeyCode(48, ['zero', '0']); locale.bindKeyCode(49, ['one', '1']); locale.bindKeyCode(50, ['two', '2']); locale.bindKeyCode(51, ['three', '3']); locale.bindKeyCode(52, ['four', '4']); locale.bindKeyCode(53, ['five', '5']); locale.bindKeyCode(54, ['six', '6']); locale.bindKeyCode(55, ['seven', '7']); locale.bindKeyCode(56, ['eight', '8']); locale.bindKeyCode(57, ['nine', '9']); // numpad locale.bindKeyCode(96, ['numzero', 'num0']); locale.bindKeyCode(97, ['numone', 'num1']); locale.bindKeyCode(98, ['numtwo', 'num2']); locale.bindKeyCode(99, ['numthree', 'num3']); locale.bindKeyCode(100, ['numfour', 'num4']); locale.bindKeyCode(101, ['numfive', 'num5']); locale.bindKeyCode(102, ['numsix', 'num6']); locale.bindKeyCode(103, ['numseven', 'num7']); locale.bindKeyCode(104, ['numeight', 'num8']); locale.bindKeyCode(105, ['numnine', 'num9']); locale.bindKeyCode(106, ['nummultiply', 'num*']); locale.bindKeyCode(107, ['numadd', 'num+']); locale.bindKeyCode(108, ['numenter']); locale.bindKeyCode(109, ['numsubtract', 'num-']); locale.bindKeyCode(110, ['numdecimal', 'num.']); locale.bindKeyCode(111, ['numdivide', 'num/']); locale.bindKeyCode(144, ['numlock', 'num']); // function keys locale.bindKeyCode(112, ['f1']); locale.bindKeyCode(113, ['f2']); locale.bindKeyCode(114, ['f3']); locale.bindKeyCode(115, ['f4']); locale.bindKeyCode(116, ['f5']); locale.bindKeyCode(117, ['f6']); locale.bindKeyCode(118, ['f7']); locale.bindKeyCode(119, ['f8']); locale.bindKeyCode(120, ['f9']); locale.bindKeyCode(121, ['f10']); locale.bindKeyCode(122, ['f11']); locale.bindKeyCode(123, ['f12']); // secondary key symbols locale.bindMacro('shift + `', ['tilde', '~']); locale.bindMacro('shift + 1', ['exclamation', 'exclamationpoint', '!']); locale.bindMacro('shift + 2', ['at', '@']); locale.bindMacro('shift + 3', ['number', '#']); locale.bindMacro('shift + 4', ['dollar', 'dollars', 'dollarsign', '$']); locale.bindMacro('shift + 5', ['percent', '%']); locale.bindMacro('shift + 6', ['caret', '^']); locale.bindMacro('shift + 7', ['ampersand', 'and', '&']); locale.bindMacro('shift + 8', ['asterisk', '*']); locale.bindMacro('shift + 9', ['openparen', '(']); locale.bindMacro('shift + 0', ['closeparen', ')']); locale.bindMacro('shift + -', ['underscore', '_']); locale.bindMacro('shift + =', ['plus', '+']); locale.bindMacro('shift + [', ['opencurlybrace', 'opencurlybracket', '{']); locale.bindMacro('shift + ]', ['closecurlybrace', 'closecurlybracket', '}']); locale.bindMacro('shift + \\', ['verticalbar', '|']); locale.bindMacro('shift + ;', ['colon', ':']); locale.bindMacro('shift + \'', ['quotationmark', '\'']); locale.bindMacro('shift + !,', ['openanglebracket', '<']); locale.bindMacro('shift + .', ['closeanglebracket', '>']); locale.bindMacro('shift + /', ['questionmark', '?']); //a-z and A-Z for (var keyCode = 65; keyCode <= 90; keyCode += 1) { var keyName = String.fromCharCode(keyCode + 32); var capitalKeyName = String.fromCharCode(keyCode); locale.bindKeyCode(keyCode, keyName); locale.bindMacro('shift + ' + keyName, capitalKeyName); locale.bindMacro('capslock + ' + keyName, capitalKeyName); } // browser caveats var semicolonKeyCode = userAgent.match('Firefox') ? 59 : 186; var dashKeyCode = userAgent.match('Firefox') ? 173 : 189; var leftCommandKeyCode; var rightCommandKeyCode; if (platform.match('Mac') && (userAgent.match('Safari') || userAgent.match('Chrome'))) { leftCommandKeyCode = 91; rightCommandKeyCode = 93; } else if(platform.match('Mac') && userAgent.match('Opera')) { leftCommandKeyCode = 17; rightCommandKeyCode = 17; } else if(platform.match('Mac') && userAgent.match('Firefox')) { leftCommandKeyCode = 224; rightCommandKeyCode = 224; } locale.bindKeyCode(semicolonKeyCode, ['semicolon', ';']); locale.bindKeyCode(dashKeyCode, ['dash', '-']); locale.bindKeyCode(leftCommandKeyCode, ['command', 'windows', 'win', 'super', 'leftcommand', 'leftwindows', 'leftwin', 'leftsuper']); locale.bindKeyCode(rightCommandKeyCode, ['command', 'windows', 'win', 'super', 'rightcommand', 'rightwindows', 'rightwin', 'rightsuper']); // kill keys locale.setKillKey('command'); };