aboutsummaryrefslogtreecommitdiffstats
path: root/src/ngScenario/browserTrigger.js
diff options
context:
space:
mode:
authorMatias Niemelä2013-09-06 16:06:37 -0400
committerMatias Niemelä2013-09-06 17:00:37 -0400
commit28f56a383e9d1ff378e3568a3039e941c7ffb1d8 (patch)
treec87df3d5838df200782a1261f46c2ad74d609cda /src/ngScenario/browserTrigger.js
parent32ad2926116e5f52ed04d788220bd389f8d0a4ac (diff)
downloadangular.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.js54
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);