<b> keyname = event.keyldentifier;</b>
<b> // В противном случае можно использовать свойство keyCode и отображение код->имя ниже</b>
<b> else </b>
<b> keyname = Keymap.keyCodeToKeyName[event.keyCode];</b>
<b> // Если имя клавиши не удалось определить, просто проигнорировать событие</b>
<b> // и вернуть управление,</b>
<b> if (!keyname) return;</b>
<b> // Канонический идентификатор клавиши состоит из имен модификаторов</b>
<b> // и имени клавиши в нижнем регистре</b>
<b> var keyid = modifiers + keyname.toLowerCase();</b>
<b> // Проверить, имеется ли привязка для данного идентификатора клавиши</b>
<b> var handler = this.map[keyid];</b>
<b> if (handler) { // Если обработчик для данной клавиши, вызвать его</b>
<b> // Вызвать функцию-обработчик</b>
<b> var retval = handler.call(element, event, keyid);</b>
<b> // Если обработчик вернул false, отменить действия по умолчанию</b>
<b> // и прервать всплытие события</b>
<b> if (retval === false) {</b>
<b> if (event.stopPropagation)</b>
<b> event.stopPropagation(); // модель DOM</b>
<b> else</b>
<b> event.cancelBubble = true; // модель IE</b>
<b> if (event.preventDefault)</b>
<b> event.preventDefault(); // DOM</b>
<b> else</b>
<b> event.returnValue = false; // IE</b>
<b> }</b>
<b> // Вернуть значение, полученное от обработчика</b>
<b> return retval;</b>
<b> }</b>
<b>};</b>
<b>// Вспомогательная функция преобразования идентификатора клавиши в каноническую форму.</b>
<b>// Нам необходимо преобразовать идентификатор "meta” в "Ctrl", чтобы превратить</b>
<b>// идентификатор Meta-C в "Command-C" на компьютерах Маc и в "Ctrl-C" на всех остальных. </b>
<b>Keymap.normalize = function(keyid) {</b>
<b> keyid = keyid.toLowerCaseO; // В нижний регистр</b>
<b> var words = keyid.split(/\s+|[\-+_]/); // Вычленить модификаторы</b>
<b> var keyname = words.pop(); // keyname - последнее слово</b>
<b> keyname = Keymap.aliases[keyname] || keyname; // Это псевдоним?</b>
<b> words.sort(); // Сортировать модификаторы</b>
<b> words.push(keyname); // Поместить обратно</b>
<b> // нормализованное имя</b>
<b> return words.join// Объединить все вместе</b>
<b>};</b>
<b>Keymap.aliases = { // Отображение привычных псевдонимов клавиш в их</b>
<b> "escape":"esc", // "официальные" имена, используемые в DOM Level 3,</b>
<b> "delete":"del", // и отображение кодов клавиш в имена ниже.</b>
<b> "return”:"enter", // Имя и значение должны состоять только из символов </b>
<b> "Ctrl":"control", // нижнего регистра.</b>
<b> "space":"spacebar",</b>
<b> "ins":"insert"</b>
<b>};</b>
<b>// Старое свойство keyCode объекта события keydown не стандартизовано</b>
<b>// Но следующие значения с успехом могут использоваться в большинстве броузеров и ОС.</b>
<b>Keymap.keyCodeToKeyName = {</b>
<b> // Клавиши со словами или стрелками на них</b>
<b> 8:"Backspace", 9:"Tab", 13:"Enter", 16:"Shift", 17:"Control". 18:"Alt",</b>
<b> 19:"Pause”, 20:"CapsLock", 27:"Esc", 32:"Spacebar", 33:"PageUp",</b>
<b> 34:"PageDown", 35:"End", 36:"Home", 37:"Left", 38:"Up", 39:"Right",</b>
<b> 40:"Down", 45:"Insert", 46:"Del",</b>
<b> // Цифровые клавиши на основной клавиатуре (не на дополнительной)</b>
<b> 48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9".</b>