diff options
Diffstat (limited to 'src/ngScenario/browserTrigger.js')
| -rw-r--r-- | src/ngScenario/browserTrigger.js | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/src/ngScenario/browserTrigger.js b/src/ngScenario/browserTrigger.js index dc7a9916..d1b69a1d 100644 --- a/src/ngScenario/browserTrigger.js +++ b/src/ngScenario/browserTrigger.js @@ -19,16 +19,19 @@ * not specified. * * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement - * @param {string} eventType Optional event type. - * @param {Array.<string>=} keys Optional list of pressed keys - * (valid values: 'alt', 'meta', 'shift', 'ctrl') - * @param {number} x Optional x-coordinate for mouse/touch events. - * @param {number} y Optional y-coordinate for mouse/touch events. + * @param {string} eventType Optional event type + * @param {Object=} eventData An optional object which contains additional event data (such as x,y coordinates, keys, etc...) that + * are passed into the event when triggered */ - window.browserTrigger = function browserTrigger(element, eventType, keys, x, y) { + window.browserTrigger = function browserTrigger(element, eventType, eventData) { if (element && !element.nodeName) element = element[0]; if (!element) return; + eventData = eventData || {}; + var keys = eventData.keys; + var x = eventData.x; + var y = eventData.y; + var inputType = (element.type) ? element.type.toLowerCase() : null, nodeName = element.nodeName.toLowerCase(); @@ -86,8 +89,38 @@ } return ret; } else { - var evnt = document.createEvent('MouseEvents'), - originalPreventDefault = evnt.preventDefault, + var evnt; + if(/transitionend/.test(eventType)) { + if(window.WebKitTransitionEvent) { + evnt = new WebKitTransitionEvent(eventType, eventData); + evnt.initEvent(eventType, false, true); + } + else { + evnt = document.createEvent('TransitionEvent'); + evnt.initTransitionEvent(eventType, null, null, null, eventData.elapsedTime); + } + } + else if(/animationend/.test(eventType)) { + if(window.WebKitAnimationEvent) { + evnt = new WebKitAnimationEvent(eventType, eventData); + evnt.initEvent(eventType, false, true); + } + else { + evnt = document.createEvent('AnimationEvent'); + evnt.initAnimationEvent(eventType, null, null, null, eventData.elapsedTime); + } + } + else { + evnt = document.createEvent('MouseEvents'); + x = x || 0; + y = y || 0; + evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'), pressed('alt'), + pressed('shift'), pressed('meta'), 0, element); + } + + if(!evnt) return; + + var originalPreventDefault = evnt.preventDefault, appWindow = element.ownerDocument.defaultView, fakeProcessDefault = true, finalProcessDefault, @@ -100,11 +133,6 @@ return originalPreventDefault.apply(evnt, arguments); }; - x = x || 0; - y = y || 0; - evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'), pressed('alt'), - pressed('shift'), pressed('meta'), 0, element); - element.dispatchEvent(evnt); finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault); |
