diff options
| author | Matias Niemelä | 2013-09-06 16:06:37 -0400 |
|---|---|---|
| committer | Matias Niemelä | 2013-09-06 17:00:37 -0400 |
| commit | 28f56a383e9d1ff378e3568a3039e941c7ffb1d8 (patch) | |
| tree | c87df3d5838df200782a1261f46c2ad74d609cda /src/ngScenario/browserTrigger.js | |
| parent | 32ad2926116e5f52ed04d788220bd389f8d0a4ac (diff) | |
| download | angular.js-28f56a383e9d1ff378e3568a3039e941c7ffb1d8.tar.bz2 | |
fix(ngScenario): provide event parameters as object
BREAKING CHANGE: browserTrigger now uses an eventData object instead of direct parameters for mouse events.
To migrate, place the `keys`,`x` and `y` parameters inside of an object and place that as the third parameter
for the browserTrigger function.
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); |
