1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | 1 1 1 6 7 7 6 1 6 6 6 6 6 1 1 7 7 5 1 1 1 1 | // https://github.com/tmcw/happen !(function(context) { var h = {}; // Make inheritance bearable: clone one level of properties function extend(child, parent) { for (var property in parent) { Eif (typeof child[property] == 'undefined') { child[property] = parent[property]; } } return child; } h.once = function(x, o) { var evt; Iif (o.type.slice(0, 3) === 'key') { if (typeof Event === 'function') { evt = new Event(o.type); evt.keyCode = o.keyCode || 0; evt.charCode = o.charCode || 0; evt.shift = o.shift || false; evt.meta = o.meta || false; evt.ctrl = o.ctrl || false; evt.alt = o.alt || false; } else { evt = document.createEvent('KeyboardEvent'); // https://developer.mozilla.org/en/DOM/event.initKeyEvent // https://developer.mozilla.org/en/DOM/KeyboardEvent evt[(evt.initKeyEvent) ? 'initKeyEvent' : 'initKeyboardEvent']( o.type, // in DOMString typeArg, true, // in boolean canBubbleArg, true, // in boolean cancelableArg, null, // in nsIDOMAbstractView viewArg, Specifies UIEvent.view. This value may be null. o.ctrl || false, // in boolean ctrlKeyArg, o.alt || false, // in boolean altKeyArg, o.shift || false, // in boolean shiftKeyArg, o.meta || false, // in boolean metaKeyArg, o.keyCode || 0, // in unsigned long keyCodeArg, o.charCode || 0 // in unsigned long charCodeArg); ); } } else { evt = document.createEvent('MouseEvents'); // https://developer.mozilla.org/en/DOM/event.initMouseEvent evt.initMouseEvent(o.type, true, // canBubble true, // cancelable window, // 'AbstractView' o.clicks || 0, // click count o.screenX || 0, // screenX o.screenY || 0, // screenY o.clientX || 0, // clientX o.clientY || 0, // clientY o.ctrl || 0, // ctrl o.alt || false, // alt o.shift || false, // shift o.meta || false, // meta o.button || false, // mouse button null // relatedTarget ); } x.dispatchEvent(evt); }; var shortcuts = ['click', 'mousedown', 'mouseup', 'mousemove', 'keydown', 'keyup', 'keypress'], s, i = 0; while (s = shortcuts[i++]) { h[s] = (function(s) { return function(x, o) { h.once(x, extend(o || {}, { type: s })); }; })(s); } h.dblclick = function(x, o) { h.once(x, extend(o || {}, { type: 'dblclick', clicks: 2 })); }; this.happen = h; Iif (typeof module !== 'undefined') { module.exports = this.happen; } })(this); |