|
19 | 19 | * not specified.
|
20 | 20 | *
|
21 | 21 | * @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 |
27 | 25 | */
|
28 |
| - window.browserTrigger = function browserTrigger(element, eventType, keys, x, y) { |
| 26 | + window.browserTrigger = function browserTrigger(element, eventType, eventData) { |
29 | 27 | if (element && !element.nodeName) element = element[0];
|
30 | 28 | if (!element) return;
|
31 | 29 |
|
| 30 | + eventData = eventData || {}; |
| 31 | + var keys = eventData.keys; |
| 32 | + var x = eventData.x; |
| 33 | + var y = eventData.y; |
| 34 | + |
32 | 35 | var inputType = (element.type) ? element.type.toLowerCase() : null,
|
33 | 36 | nodeName = element.nodeName.toLowerCase();
|
34 | 37 |
|
|
86 | 89 | }
|
87 | 90 | return ret;
|
88 | 91 | } 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, |
91 | 124 | appWindow = element.ownerDocument.defaultView,
|
92 | 125 | fakeProcessDefault = true,
|
93 | 126 | finalProcessDefault,
|
|
100 | 133 | return originalPreventDefault.apply(evnt, arguments);
|
101 | 134 | };
|
102 | 135 |
|
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 |
| - |
108 | 136 | element.dispatchEvent(evnt);
|
109 | 137 | finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault);
|
110 | 138 |
|
|
0 commit comments