Code coverage report for ./happen.js

Statements: 66.67% (22 / 33)      Branches: 46.55% (27 / 58)      Functions: 100% (6 / 6)      Lines: 66.67% (22 / 33)     

All files » ./ » happen.js
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);