Шрифт:
if (event.shiftKey) modifiers += "shift.”;
// Имя клавиши легко получить, если реализовано свойство key,
// определяемое стандартом DOM Level 3:
if (event.key) keyname = event.key;
// Для получения имен функциональных клавиш в Safari и Chrome можно
// использовать свойство keyldentifier
else
if (event. keyldentifier&&event. keyldentifier. substrings, 2) !== "U+")
keyname = event.keyldentifier;
// В противном случае можно использовать свойство keyCode и отображение код->имя ниже
else
keyname = Keymap.keyCodeToKeyName[event.keyCode];
// Если имя клавиши не удалось определить, просто проигнорировать событие
// и вернуть управление,
if (!keyname) return;
// Канонический идентификатор клавиши состоит из имен модификаторов
// и имени клавиши в нижнем регистре
var keyid = modifiers + keyname.toLowerCase;
// Проверить, имеется ли привязка для данного идентификатора клавиши
var handler = this.map[keyid];
if (handler) { // Если обработчик для данной клавиши, вызвать его
// Вызвать функцию-обработчик
var retval = handler.call(element, event, keyid);
// Если обработчик вернул false, отменить действия по умолчанию
// и прервать всплытие события
if (retval === false) {
if (event.stopPropagation)
event.stopPropagation; // модель DOM
else
event.cancelBubble = true; // модель IE
if (event.preventDefault)
event.preventDefault; // DOM
else
event.returnValue = false; // IE
}
// Вернуть значение, полученное от обработчика
return retval;
}
};
// Вспомогательная функция преобразования идентификатора клавиши в каноническую форму.
// Нам необходимо преобразовать идентификатор "meta” в "Ctrl", чтобы превратить
// идентификатор Meta-C в "Command-C" на компьютерах Маc и в "Ctrl-C" на всех остальных.
Keymap.normalize = function(keyid) {
keyid = keyid.toLowerCaseO; // В нижний регистр
var words = keyid.split(/\s+|[\-+_]/); // Вычленить модификаторы
var keyname = words.pop; // keyname - последнее слово
keyname = Keymap.aliases[keyname] || keyname; // Это псевдоним?
words.sort; // Сортировать модификаторы
words.push(keyname); // Поместить обратно
// нормализованное имя
return words.join// Объединить все вместе