Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 28f56a3

Browse files
committed
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.
1 parent 32ad292 commit 28f56a3

File tree

4 files changed

+471
-99
lines changed

4 files changed

+471
-99
lines changed

src/ngScenario/browserTrigger.js

+41-13
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,19 @@
1919
* not specified.
2020
*
2121
* @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement
22-
* @param {string} eventType Optional event type.
23-
* @param {Array.<string>=} keys Optional list of pressed keys
24-
* (valid values: 'alt', 'meta', 'shift', 'ctrl')
25-
* @param {number} x Optional x-coordinate for mouse/touch events.
26-
* @param {number} y Optional y-coordinate for mouse/touch events.
22+
* @param {string} eventType Optional event type
23+
* @param {Object=} eventData An optional object which contains additional event data (such as x,y coordinates, keys, etc...) that
24+
* are passed into the event when triggered
2725
*/
28-
window.browserTrigger = function browserTrigger(element, eventType, keys, x, y) {
26+
window.browserTrigger = function browserTrigger(element, eventType, eventData) {
2927
if (element && !element.nodeName) element = element[0];
3028
if (!element) return;
3129

30+
eventData = eventData || {};
31+
var keys = eventData.keys;
32+
var x = eventData.x;
33+
var y = eventData.y;
34+
3235
var inputType = (element.type) ? element.type.toLowerCase() : null,
3336
nodeName = element.nodeName.toLowerCase();
3437

@@ -86,8 +89,38 @@
8689
}
8790
return ret;
8891
} else {
89-
var evnt = document.createEvent('MouseEvents'),
90-
originalPreventDefault = evnt.preventDefault,
92+
var evnt;
93+
if(/transitionend/.test(eventType)) {
94+
if(window.WebKitTransitionEvent) {
95+
evnt = new WebKitTransitionEvent(eventType, eventData);
96+
evnt.initEvent(eventType, false, true);
97+
}
98+
else {
99+
evnt = document.createEvent('TransitionEvent');
100+
evnt.initTransitionEvent(eventType, null, null, null, eventData.elapsedTime);
101+
}
102+
}
103+
else if(/animationend/.test(eventType)) {
104+
if(window.WebKitAnimationEvent) {
105+
evnt = new WebKitAnimationEvent(eventType, eventData);
106+
evnt.initEvent(eventType, false, true);
107+
}
108+
else {
109+
evnt = document.createEvent('AnimationEvent');
110+
evnt.initAnimationEvent(eventType, null, null, null, eventData.elapsedTime);
111+
}
112+
}
113+
else {
114+
evnt = document.createEvent('MouseEvents');
115+
x = x || 0;
116+
y = y || 0;
117+
evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'), pressed('alt'),
118+
pressed('shift'), pressed('meta'), 0, element);
119+
}
120+
121+
if(!evnt) return;
122+
123+
var originalPreventDefault = evnt.preventDefault,
91124
appWindow = element.ownerDocument.defaultView,
92125
fakeProcessDefault = true,
93126
finalProcessDefault,
@@ -100,11 +133,6 @@
100133
return originalPreventDefault.apply(evnt, arguments);
101134
};
102135

103-
x = x || 0;
104-
y = y || 0;
105-
evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'), pressed('alt'),
106-
pressed('shift'), pressed('meta'), 0, element);
107-
108136
element.dispatchEvent(evnt);
109137
finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault);
110138

0 commit comments

Comments
 (0)