Ответ 1
Хорошо, поэтому я просмотрел улучшенную версию этого миниатюрного кода и отметил следующее:
Само по себе это куча полезных функций.
CavalryLogger ничего не делает с этим файлом сам по себе, потому что он не существует и не определен.
Код в вопросе о привязке клавиш:
function KeyEventController() {
copy_properties(this, {
handlers: {}
});
document.onkeyup = this.onkeyevent.bind(this, 'onkeyup');
document.onkeydown = this.onkeyevent.bind(this, 'onkeydown');
document.onkeypress = this.onkeyevent.bind(this, 'onkeypress');
}
copy_properties(KeyEventController, {
instance: null,
getInstance: function () {
return KeyEventController.instance || (KeyEventController.instance = new KeyEventController());
},
defaultFilter: function (event, a) {
event = $E(event);
return KeyEventController.filterEventTypes(event, a) && KeyEventController.filterEventTargets(event, a) && KeyEventController.filterEventModifiers(event, a);
},
filterEventTypes: function (event, a) {
if (a === 'onkeydown') return true;
return false;
},
filterEventTargets: function (event, b) {
var a = $E(event).getTarget();
if (DOM.isNode(a, ['input', 'select', 'textarea', 'object', 'embed'])) if (a.type != 'checkbox' && a.type != 'radio' && a.type != 'submit') return false;
return a.getAttribute('contentEditable') != 'true';
},
filterEventModifiers: function (event, a) {
if (event.ctrlKey || event.altKey || event.metaKey || event.repeat) return false;
return true;
},
registerKey: function (f, a, d, g) {
if (d === undefined) d = KeyEventController.defaultFilter;
var b = KeyEventController.getInstance();
var c = b.mapKey(f);
if (is_empty(b.handlers)) onleaveRegister(b.resetHandlers.bind(b));
for (var e = 0; e < c.length; e++) {
f = c[e];
if (!b.handlers[f] || g) b.handlers[f] = [];
b.handlers[f].push({
callback: a,
filter: d
});
}
},
keyCodeMap: {
'[': [219],
']': [221],
'`': [192],
LEFT: [KEYS.LEFT, 63234],
RIGHT: [KEYS.RIGHT, 63235],
RETURN: [KEYS.RETURN],
TAB: [KEYS.TAB],
DOWN: [KEYS.DOWN, 63233],
UP: [KEYS.UP, 63232],
ESCAPE: [KEYS.ESC],
BACKSPACE: [KEYS.BACKSPACE],
DELETE: [KEYS.DELETE]
}
});
copy_properties(KeyEventController.prototype, {
mapKey: function (a) {
if (typeof (a) == 'number') return [48 + a, 96 + a];
if (KeyEventController.keyCodeMap[a.toUpperCase()]) return KeyEventController.keyCodeMap[a.toUpperCase()];
var b = a.toUpperCase().charCodeAt(0);
return [b];
},
onkeyevent: function (i, c) {
c = $E(c);
var d = null;
var g = this.handlers[c.keyCode];
var b, f, a;
if (g) for (var h = 0; h < g.length; h++) {
b = g[h].callback;
f = g[h].filter;
try {
if (!f || f(c, i)) {
var node = null;
if (window.Parent && Parent.byTag && c.getTarget) node = Parent.byTag(c.getTarget(), 'a');
user_action(node, 'key', c);
a = b(c, i);
if (a === false) return Event.kill(c);
}
} catch (e) {}
}
return true;
},
resetHandlers: function () {
this.handlers = {};
}
});
Этот код позволяет связывать ключи с обратными вызовами и включает в себя более понятные для человека имена для общих ключей. Возьмем, к примеру, использование здесь:
KeyEventController.registerKey('ESCAPE', Dialog._handleEscapeKey, a);
Ключ ESCAPE зарегистрирован, чтобы Dialogs исчезли. handlers
также по умолчанию пуст, поэтому ничего не произойдет, пока вы не будете использовать registerKey
или добавьте его вручную. Обратите внимание, что это единственный экземпляр registerKey
, который вызывается.
В нем также много полезных функций AJAX. В любом случае, вы не можете отправлять что-либо в Facebook из своего домена из-за той же политики происхождения (если только вы не изменили разрешения безопасности, но тогда это ваша ошибка). То же самое с набором cookie.
Там также есть man man, но он использует iFrame, поэтому он не сможет прочитать его из вашего домена в любом случае.
Наконец, подобный код кнопки, который я нашел, является iFrame, поэтому ему не нужно включать JS, если вы не используете javascript для создания iFrame или чего-то еще.
Имея это в виду, я не вижу необходимости включать все это.