aboutsummaryrefslogtreecommitdiff
path: root/static/development-bundle/external/simulate/jquery.simulate.js
diff options
context:
space:
mode:
Diffstat (limited to 'static/development-bundle/external/simulate/jquery.simulate.js')
-rw-r--r--static/development-bundle/external/simulate/jquery.simulate.js152
1 files changed, 152 insertions, 0 deletions
diff --git a/static/development-bundle/external/simulate/jquery.simulate.js b/static/development-bundle/external/simulate/jquery.simulate.js
new file mode 100644
index 0000000..d52140b
--- /dev/null
+++ b/static/development-bundle/external/simulate/jquery.simulate.js
@@ -0,0 +1,152 @@
1/*
2 * jquery.simulate - simulate browser mouse and keyboard events
3 *
4 * Copyright (c) 2009 Eduardo Lundgren (eduardolundgren@gmail.com)
5 * and Richard D. Worth (rdworth@gmail.com)
6 *
7 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
8 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
9 *
10 */
11
12;(function($) {
13
14$.fn.extend({
15 simulate: function(type, options) {
16 return this.each(function() {
17 var opt = $.extend({}, $.simulate.defaults, options || {});
18 new $.simulate(this, type, opt);
19 });
20 }
21});
22
23$.simulate = function(el, type, options) {
24 this.target = el;
25 this.options = options;
26
27 if (/^drag$/.test(type)) {
28 this[type].apply(this, [this.target, options]);
29 } else {
30 this.simulateEvent(el, type, options);
31 }
32}
33
34$.extend($.simulate.prototype, {
35 simulateEvent: function(el, type, options) {
36 var evt = this.createEvent(type, options);
37 this.dispatchEvent(el, type, evt, options);
38 return evt;
39 },
40 createEvent: function(type, options) {
41 if (/^mouse(over|out|down|up|move)|(dbl)?click$/.test(type)) {
42 return this.mouseEvent(type, options);
43 } else if (/^key(up|down|press)$/.test(type)) {
44 return this.keyboardEvent(type, options);
45 }
46 },
47 mouseEvent: function(type, options) {
48 var evt;
49 var e = $.extend({
50 bubbles: true, cancelable: (type != "mousemove"), view: window, detail: 0,
51 screenX: 0, screenY: 0, clientX: 0, clientY: 0,
52 ctrlKey: false, altKey: false, shiftKey: false, metaKey: false,
53 button: 0, relatedTarget: undefined
54 }, options);
55
56 var relatedTarget = $(e.relatedTarget)[0];
57
58 if ($.isFunction(document.createEvent)) {
59 evt = document.createEvent("MouseEvents");
60 evt.initMouseEvent(type, e.bubbles, e.cancelable, e.view, e.detail,
61 e.screenX, e.screenY, e.clientX, e.clientY,
62 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
63 e.button, e.relatedTarget || document.body.parentNode);
64 } else if (document.createEventObject) {
65 evt = document.createEventObject();
66 $.extend(evt, e);
67 evt.button = { 0:1, 1:4, 2:2 }[evt.button] || evt.button;
68 }
69 return evt;
70 },
71 keyboardEvent: function(type, options) {
72 var evt;
73
74 var e = $.extend({ bubbles: true, cancelable: true, view: window,
75 ctrlKey: false, altKey: false, shiftKey: false, metaKey: false,
76 keyCode: 0, charCode: 0
77 }, options);
78
79 if ($.isFunction(document.createEvent)) {
80 try {
81 evt = document.createEvent("KeyEvents");
82 evt.initKeyEvent(type, e.bubbles, e.cancelable, e.view,
83 e.ctrlKey, e.altKey, e.shiftKey, e.metaKey,
84 e.keyCode, e.charCode);
85 } catch(err) {
86 evt = document.createEvent("Events");
87 evt.initEvent(type, e.bubbles, e.cancelable);
88 $.extend(evt, { view: e.view,
89 ctrlKey: e.ctrlKey, altKey: e.altKey, shiftKey: e.shiftKey, metaKey: e.metaKey,
90 keyCode: e.keyCode, charCode: e.charCode
91 });
92 }
93 } else if (document.createEventObject) {
94 evt = document.createEventObject();
95 $.extend(evt, e);
96 }
97 if ($.browser.msie || $.browser.opera) {
98 evt.keyCode = (e.charCode > 0) ? e.charCode : e.keyCode;
99 evt.charCode = undefined;
100 }
101 return evt;
102 },
103
104 dispatchEvent: function(el, type, evt) {
105 if (el.dispatchEvent) {
106 el.dispatchEvent(evt);
107 } else if (el.fireEvent) {
108 el.fireEvent('on' + type, evt);
109 }
110 return evt;
111 },
112
113 drag: function(el) {
114 var self = this, center = this.findCenter(this.target),
115 options = this.options, x = Math.floor(center.x), y = Math.floor(center.y),
116 dx = options.dx || 0, dy = options.dy || 0, target = this.target;
117 var coord = { clientX: x, clientY: y };
118 this.simulateEvent(target, "mousedown", coord);
119 coord = { clientX: x + 1, clientY: y + 1 };
120 this.simulateEvent(document, "mousemove", coord);
121 coord = { clientX: x + dx, clientY: y + dy };
122 this.simulateEvent(document, "mousemove", coord);
123 this.simulateEvent(document, "mousemove", coord);
124 this.simulateEvent(target, "mouseup", coord);
125 },
126 findCenter: function(el) {
127 var el = $(this.target), o = el.offset();
128 return {
129 x: o.left + el.outerWidth() / 2,
130 y: o.top + el.outerHeight() / 2
131 };
132 }
133});
134
135$.extend($.simulate, {
136 defaults: {
137 speed: 'sync'
138 },
139 VK_TAB: 9,
140 VK_ENTER: 13,
141 VK_ESC: 27,
142 VK_PGUP: 33,
143 VK_PGDN: 34,
144 VK_END: 35,
145 VK_HOME: 36,
146 VK_LEFT: 37,
147 VK_UP: 38,
148 VK_RIGHT: 39,
149 VK_DOWN: 40
150});
151
152})(jQuery);