highstocks-rails 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,316 +0,0 @@
1
- /**
2
- * @license Highstock JS v1.3.7 (2013-10-24)
3
- * Prototype adapter
4
- *
5
- * @author Michael Nelson, Torstein Hønsi.
6
- *
7
- * Feel free to use and modify this script.
8
- * Highcharts license: www.highcharts.com/license.
9
- */
10
-
11
- // JSLint options:
12
- /*global Effect, Class, Event, Element, $, $$, $A */
13
-
14
- // Adapter interface between prototype and the Highcharts charting library
15
- var HighchartsAdapter = (function () {
16
-
17
- var hasEffect = typeof Effect !== 'undefined';
18
-
19
- return {
20
-
21
- /**
22
- * Initialize the adapter. This is run once as Highcharts is first run.
23
- * @param {Object} pathAnim The helper object to do animations across adapters.
24
- */
25
- init: function (pathAnim) {
26
- if (hasEffect) {
27
- /**
28
- * Animation for Highcharts SVG element wrappers only
29
- * @param {Object} element
30
- * @param {Object} attribute
31
- * @param {Object} to
32
- * @param {Object} options
33
- */
34
- Effect.HighchartsTransition = Class.create(Effect.Base, {
35
- initialize: function (element, attr, to, options) {
36
- var from,
37
- opts;
38
-
39
- this.element = element;
40
- this.key = attr;
41
- from = element.attr ? element.attr(attr) : $(element).getStyle(attr);
42
-
43
- // special treatment for paths
44
- if (attr === 'd') {
45
- this.paths = pathAnim.init(
46
- element,
47
- element.d,
48
- to
49
- );
50
- this.toD = to;
51
-
52
-
53
- // fake values in order to read relative position as a float in update
54
- from = 0;
55
- to = 1;
56
- }
57
-
58
- opts = Object.extend((options || {}), {
59
- from: from,
60
- to: to,
61
- attribute: attr
62
- });
63
- this.start(opts);
64
- },
65
- setup: function () {
66
- HighchartsAdapter._extend(this.element);
67
- // If this is the first animation on this object, create the _highcharts_animation helper that
68
- // contain pointers to the animation objects.
69
- if (!this.element._highchart_animation) {
70
- this.element._highchart_animation = {};
71
- }
72
-
73
- // Store a reference to this animation instance.
74
- this.element._highchart_animation[this.key] = this;
75
- },
76
- update: function (position) {
77
- var paths = this.paths,
78
- element = this.element,
79
- obj;
80
-
81
- if (paths) {
82
- position = pathAnim.step(paths[0], paths[1], position, this.toD);
83
- }
84
-
85
- if (element.attr) { // SVGElement
86
-
87
- if (element.element) { // If not, it has been destroyed (#1405)
88
- element.attr(this.options.attribute, position);
89
- }
90
-
91
- } else { // HTML, #409
92
- obj = {};
93
- obj[this.options.attribute] = position;
94
- $(element).setStyle(obj);
95
- }
96
-
97
- },
98
- finish: function () {
99
- // Delete the property that holds this animation now that it is finished.
100
- // Both canceled animations and complete ones gets a 'finish' call.
101
- if (this.element && this.element._highchart_animation) { // #1405
102
- delete this.element._highchart_animation[this.key];
103
- }
104
- }
105
- });
106
- }
107
- },
108
-
109
- /**
110
- * Run a general method on the framework, following jQuery syntax
111
- * @param {Object} el The HTML element
112
- * @param {String} method Which method to run on the wrapped element
113
- */
114
- adapterRun: function (el, method) {
115
-
116
- // This currently works for getting inner width and height. If adding
117
- // more methods later, we need a conditional implementation for each.
118
- return parseInt($(el).getStyle(method), 10);
119
-
120
- },
121
-
122
- /**
123
- * Downloads a script and executes a callback when done.
124
- * @param {String} scriptLocation
125
- * @param {Function} callback
126
- */
127
- getScript: function (scriptLocation, callback) {
128
- var head = $$('head')[0]; // Returns an array, so pick the first element.
129
- if (head) {
130
- // Append a new 'script' element, set its type and src attributes, add a 'load' handler that calls the callback
131
- head.appendChild(new Element('script', { type: 'text/javascript', src: scriptLocation}).observe('load', callback));
132
- }
133
- },
134
-
135
- /**
136
- * Custom events in prototype needs to be namespaced. This method adds a namespace 'h:' in front of
137
- * events that are not recognized as native.
138
- */
139
- addNS: function (eventName) {
140
- var HTMLEvents = /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/,
141
- MouseEvents = /^(?:click|mouse(?:down|up|over|move|out))$/;
142
- return (HTMLEvents.test(eventName) || MouseEvents.test(eventName)) ?
143
- eventName :
144
- 'h:' + eventName;
145
- },
146
-
147
- // el needs an event to be attached. el is not necessarily a dom element
148
- addEvent: function (el, event, fn) {
149
- if (el.addEventListener || el.attachEvent) {
150
- Event.observe($(el), HighchartsAdapter.addNS(event), fn);
151
-
152
- } else {
153
- HighchartsAdapter._extend(el);
154
- el._highcharts_observe(event, fn);
155
- }
156
- },
157
-
158
- // motion makes things pretty. use it if effects is loaded, if not... still get to the end result.
159
- animate: function (el, params, options) {
160
- var key,
161
- fx;
162
-
163
- // default options
164
- options = options || {};
165
- options.delay = 0;
166
- options.duration = (options.duration || 500) / 1000;
167
- options.afterFinish = options.complete;
168
-
169
- // animate wrappers and DOM elements
170
- if (hasEffect) {
171
- for (key in params) {
172
- // The fx variable is seemingly thrown away here, but the Effect.setup will add itself to the _highcharts_animation object
173
- // on the element itself so its not really lost.
174
- fx = new Effect.HighchartsTransition($(el), key, params[key], options);
175
- }
176
- } else {
177
- if (el.attr) { // #409 without effects
178
- for (key in params) {
179
- el.attr(key, params[key]);
180
- }
181
- }
182
- if (options.complete) {
183
- options.complete();
184
- }
185
- }
186
-
187
- if (!el.attr) { // HTML element, #409
188
- $(el).setStyle(params);
189
- }
190
- },
191
-
192
- // this only occurs in higcharts 2.0+
193
- stop: function (el) {
194
- var key;
195
- if (el._highcharts_extended && el._highchart_animation) {
196
- for (key in el._highchart_animation) {
197
- // Cancel the animation
198
- // The 'finish' function in the Effect object will remove the reference
199
- el._highchart_animation[key].cancel();
200
- }
201
- }
202
- },
203
-
204
- // um.. each
205
- each: function (arr, fn) {
206
- $A(arr).each(fn);
207
- },
208
-
209
- inArray: function (item, arr, from) {
210
- return arr ? arr.indexOf(item, from) : -1;
211
- },
212
-
213
- /**
214
- * Get the cumulative offset relative to the top left of the page. This method, unlike its
215
- * jQuery and MooTools counterpart, still suffers from issue #208 regarding the position
216
- * of a chart within a fixed container.
217
- */
218
- offset: function (el) {
219
- return $(el).cumulativeOffset();
220
- },
221
-
222
- // fire an event based on an event name (event) and an object (el).
223
- // again, el may not be a dom element
224
- fireEvent: function (el, event, eventArguments, defaultFunction) {
225
- if (el.fire) {
226
- el.fire(HighchartsAdapter.addNS(event), eventArguments);
227
- } else if (el._highcharts_extended) {
228
- eventArguments = eventArguments || {};
229
- el._highcharts_fire(event, eventArguments);
230
- }
231
-
232
- if (eventArguments && eventArguments.defaultPrevented) {
233
- defaultFunction = null;
234
- }
235
-
236
- if (defaultFunction) {
237
- defaultFunction(eventArguments);
238
- }
239
- },
240
-
241
- removeEvent: function (el, event, handler) {
242
- if ($(el).stopObserving) {
243
- if (event) {
244
- event = HighchartsAdapter.addNS(event);
245
- }
246
- $(el).stopObserving(event, handler);
247
- } if (window === el) {
248
- Event.stopObserving(el, event, handler);
249
- } else {
250
- HighchartsAdapter._extend(el);
251
- el._highcharts_stop_observing(event, handler);
252
- }
253
- },
254
-
255
- washMouseEvent: function (e) {
256
- return e;
257
- },
258
-
259
- // um, grep
260
- grep: function (arr, fn) {
261
- return arr.findAll(fn);
262
- },
263
-
264
- // um, map
265
- map: function (arr, fn) {
266
- return arr.map(fn);
267
- },
268
-
269
- // extend an object to handle highchart events (highchart objects, not svg elements).
270
- // this is a very simple way of handling events but whatever, it works (i think)
271
- _extend: function (object) {
272
- if (!object._highcharts_extended) {
273
- Object.extend(object, {
274
- _highchart_events: {},
275
- _highchart_animation: null,
276
- _highcharts_extended: true,
277
- _highcharts_observe: function (name, fn) {
278
- this._highchart_events[name] = [this._highchart_events[name], fn].compact().flatten();
279
- },
280
- _highcharts_stop_observing: function (name, fn) {
281
- if (name) {
282
- if (fn) {
283
- this._highchart_events[name] = [this._highchart_events[name]].compact().flatten().without(fn);
284
- } else {
285
- delete this._highchart_events[name];
286
- }
287
- } else {
288
- this._highchart_events = {};
289
- }
290
- },
291
- _highcharts_fire: function (name, args) {
292
- var target = this;
293
- (this._highchart_events[name] || []).each(function (fn) {
294
- // args is never null here
295
- if (args.stopped) {
296
- return; // "throw $break" wasn't working. i think because of the scope of 'this'.
297
- }
298
-
299
- // Attach a simple preventDefault function to skip default handler if called
300
- args.preventDefault = function () {
301
- args.defaultPrevented = true;
302
- };
303
- args.target = target;
304
-
305
- // If the event handler return false, prevent the default handler from executing
306
- if (fn.bind(this)(args) === false) {
307
- args.preventDefault();
308
- }
309
- }
310
- .bind(this));
311
- }
312
- });
313
- }
314
- }
315
- };
316
- }());
@@ -1,583 +0,0 @@
1
- /**
2
- * @license Highstock JS v1.3.7 (2013-10-24)
3
- *
4
- * Standalone Highcharts Framework
5
- *
6
- * License: MIT License
7
- */
8
-
9
-
10
- /*global Highcharts */
11
- var HighchartsAdapter = (function () {
12
-
13
- var UNDEFINED,
14
- doc = document,
15
- emptyArray = [],
16
- timers = [],
17
- timerId,
18
- Fx;
19
-
20
- Math.easeInOutSine = function (t, b, c, d) {
21
- return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;
22
- };
23
-
24
-
25
-
26
- /**
27
- * Extend given object with custom events
28
- */
29
- function augment(obj) {
30
- function removeOneEvent(el, type, fn) {
31
- el.removeEventListener(type, fn, false);
32
- }
33
-
34
- function IERemoveOneEvent(el, type, fn) {
35
- fn = el.HCProxiedMethods[fn.toString()];
36
- el.detachEvent('on' + type, fn);
37
- }
38
-
39
- function removeAllEvents(el, type) {
40
- var events = el.HCEvents,
41
- remove,
42
- types,
43
- len,
44
- n;
45
-
46
- if (el.removeEventListener) {
47
- remove = removeOneEvent;
48
- } else if (el.attachEvent) {
49
- remove = IERemoveOneEvent;
50
- } else {
51
- return; // break on non-DOM events
52
- }
53
-
54
-
55
- if (type) {
56
- types = {};
57
- types[type] = true;
58
- } else {
59
- types = events;
60
- }
61
-
62
- for (n in types) {
63
- if (events[n]) {
64
- len = events[n].length;
65
- while (len--) {
66
- remove(el, n, events[n][len]);
67
- }
68
- }
69
- }
70
- }
71
-
72
- if (!obj.HCExtended) {
73
- Highcharts.extend(obj, {
74
- HCExtended: true,
75
-
76
- HCEvents: {},
77
-
78
- bind: function (name, fn) {
79
- var el = this,
80
- events = this.HCEvents,
81
- wrappedFn;
82
-
83
- // handle DOM events in modern browsers
84
- if (el.addEventListener) {
85
- el.addEventListener(name, fn, false);
86
-
87
- // handle old IE implementation
88
- } else if (el.attachEvent) {
89
-
90
- wrappedFn = function (e) {
91
- fn.call(el, e);
92
- };
93
-
94
- if (!el.HCProxiedMethods) {
95
- el.HCProxiedMethods = {};
96
- }
97
-
98
- // link wrapped fn with original fn, so we can get this in removeEvent
99
- el.HCProxiedMethods[fn.toString()] = wrappedFn;
100
-
101
- el.attachEvent('on' + name, wrappedFn);
102
- }
103
-
104
-
105
- if (events[name] === UNDEFINED) {
106
- events[name] = [];
107
- }
108
-
109
- events[name].push(fn);
110
- },
111
-
112
- unbind: function (name, fn) {
113
- var events,
114
- index;
115
-
116
- if (name) {
117
- events = this.HCEvents[name] || [];
118
- if (fn) {
119
- index = HighchartsAdapter.inArray(fn, events);
120
- if (index > -1) {
121
- events.splice(index, 1);
122
- this.HCEvents[name] = events;
123
- }
124
- if (this.removeEventListener) {
125
- removeOneEvent(this, name, fn);
126
- } else if (this.attachEvent) {
127
- IERemoveOneEvent(this, name, fn);
128
- }
129
- } else {
130
- removeAllEvents(this, name);
131
- this.HCEvents[name] = [];
132
- }
133
- } else {
134
- removeAllEvents(this);
135
- this.HCEvents = {};
136
- }
137
- },
138
-
139
- trigger: function (name, args) {
140
- var events = this.HCEvents[name] || [],
141
- target = this,
142
- len = events.length,
143
- i,
144
- preventDefault,
145
- fn;
146
-
147
- // Attach a simple preventDefault function to skip default handler if called
148
- preventDefault = function () {
149
- args.defaultPrevented = true;
150
- };
151
-
152
- for (i = 0; i < len; i++) {
153
- fn = events[i];
154
-
155
- // args is never null here
156
- if (args.stopped) {
157
- return;
158
- }
159
-
160
- args.preventDefault = preventDefault;
161
- args.target = target;
162
- args.type = name; // #2297
163
-
164
- // If the event handler return false, prevent the default handler from executing
165
- if (fn.call(this, args) === false) {
166
- args.preventDefault();
167
- }
168
- }
169
- }
170
- });
171
- }
172
-
173
- return obj;
174
- }
175
-
176
-
177
- return {
178
- /**
179
- * Initialize the adapter. This is run once as Highcharts is first run.
180
- */
181
- init: function (pathAnim) {
182
-
183
- /**
184
- * Compatibility section to add support for legacy IE. This can be removed if old IE
185
- * support is not needed.
186
- */
187
- if (!doc.defaultView) {
188
- this._getStyle = function (el, prop) {
189
- var val;
190
- if (el.style[prop]) {
191
- return el.style[prop];
192
- } else {
193
- if (prop === 'opacity') {
194
- prop = 'filter';
195
- }
196
- /*jslint unparam: true*/
197
- val = el.currentStyle[prop.replace(/\-(\w)/g, function (a, b) { return b.toUpperCase(); })];
198
- if (prop === 'filter') {
199
- val = val.replace(
200
- /alpha\(opacity=([0-9]+)\)/,
201
- function (a, b) {
202
- return b / 100;
203
- }
204
- );
205
- }
206
- /*jslint unparam: false*/
207
- return val === '' ? 1 : val;
208
- }
209
- };
210
- this.adapterRun = function (elem, method) {
211
- var alias = { width: 'clientWidth', height: 'clientHeight' }[method];
212
-
213
- if (alias) {
214
- elem.style.zoom = 1;
215
- return elem[alias] - 2 * parseInt(HighchartsAdapter._getStyle(elem, 'padding'), 10);
216
- }
217
- };
218
- }
219
-
220
- if (!Array.prototype.forEach) {
221
- this.each = function (arr, fn) { // legacy
222
- var i = 0,
223
- len = arr.length;
224
- for (; i < len; i++) {
225
- if (fn.call(arr[i], arr[i], i, arr) === false) {
226
- return i;
227
- }
228
- }
229
- };
230
- }
231
-
232
- if (!Array.prototype.indexOf) {
233
- this.inArray = function (item, arr) {
234
- var len,
235
- i = 0;
236
-
237
- if (arr) {
238
- len = arr.length;
239
-
240
- for (; i < len; i++) {
241
- if (arr[i] === item) {
242
- return i;
243
- }
244
- }
245
- }
246
-
247
- return -1;
248
- };
249
- }
250
-
251
- if (!Array.prototype.filter) {
252
- this.grep = function (elements, callback) {
253
- var ret = [],
254
- i = 0,
255
- length = elements.length;
256
-
257
- for (; i < length; i++) {
258
- if (!!callback(elements[i], i)) {
259
- ret.push(elements[i]);
260
- }
261
- }
262
-
263
- return ret;
264
- };
265
- }
266
-
267
- //--- End compatibility section ---
268
-
269
-
270
- /**
271
- * Start of animation specific code
272
- */
273
- Fx = function (elem, options, prop) {
274
- this.options = options;
275
- this.elem = elem;
276
- this.prop = prop;
277
- };
278
- Fx.prototype = {
279
-
280
- update: function () {
281
- var styles,
282
- paths = this.paths,
283
- elem = this.elem,
284
- elemelem = elem.element; // if destroyed, it is null
285
-
286
- // Animating a path definition on SVGElement
287
- if (paths && elemelem) {
288
- elem.attr('d', pathAnim.step(paths[0], paths[1], this.now, this.toD));
289
-
290
- // Other animations on SVGElement
291
- } else if (elem.attr) {
292
- if (elemelem) {
293
- elem.attr(this.prop, this.now);
294
- }
295
-
296
- // HTML styles
297
- } else {
298
- styles = {};
299
- styles[elem] = this.now + this.unit;
300
- Highcharts.css(elem, styles);
301
- }
302
-
303
- if (this.options.step) {
304
- this.options.step.call(this.elem, this.now, this);
305
- }
306
-
307
- },
308
- custom: function (from, to, unit) {
309
- var self = this,
310
- t = function (gotoEnd) {
311
- return self.step(gotoEnd);
312
- },
313
- i;
314
-
315
- this.startTime = +new Date();
316
- this.start = from;
317
- this.end = to;
318
- this.unit = unit;
319
- this.now = this.start;
320
- this.pos = this.state = 0;
321
-
322
- t.elem = this.elem;
323
-
324
- if (t() && timers.push(t) === 1) {
325
- timerId = setInterval(function () {
326
-
327
- for (i = 0; i < timers.length; i++) {
328
- if (!timers[i]()) {
329
- timers.splice(i--, 1);
330
- }
331
- }
332
-
333
- if (!timers.length) {
334
- clearInterval(timerId);
335
- }
336
- }, 13);
337
- }
338
- },
339
-
340
- step: function (gotoEnd) {
341
- var t = +new Date(),
342
- ret,
343
- done,
344
- options = this.options,
345
- i;
346
-
347
- if (this.elem.stopAnimation) {
348
- ret = false;
349
-
350
- } else if (gotoEnd || t >= options.duration + this.startTime) {
351
- this.now = this.end;
352
- this.pos = this.state = 1;
353
- this.update();
354
-
355
- this.options.curAnim[this.prop] = true;
356
-
357
- done = true;
358
- for (i in options.curAnim) {
359
- if (options.curAnim[i] !== true) {
360
- done = false;
361
- }
362
- }
363
-
364
- if (done) {
365
- if (options.complete) {
366
- options.complete.call(this.elem);
367
- }
368
- }
369
- ret = false;
370
-
371
- } else {
372
- var n = t - this.startTime;
373
- this.state = n / options.duration;
374
- this.pos = options.easing(n, 0, 1, options.duration);
375
- this.now = this.start + ((this.end - this.start) * this.pos);
376
- this.update();
377
- ret = true;
378
- }
379
- return ret;
380
- }
381
- };
382
-
383
- /**
384
- * The adapter animate method
385
- */
386
- this.animate = function (el, prop, opt) {
387
- var start,
388
- unit = '',
389
- end,
390
- fx,
391
- args,
392
- name;
393
-
394
- el.stopAnimation = false; // ready for new
395
-
396
- if (typeof opt !== 'object' || opt === null) {
397
- args = arguments;
398
- opt = {
399
- duration: args[2],
400
- easing: args[3],
401
- complete: args[4]
402
- };
403
- }
404
- if (typeof opt.duration !== 'number') {
405
- opt.duration = 400;
406
- }
407
- opt.easing = Math[opt.easing] || Math.easeInOutSine;
408
- opt.curAnim = Highcharts.extend({}, prop);
409
-
410
- for (name in prop) {
411
- fx = new Fx(el, opt, name);
412
- end = null;
413
-
414
- if (name === 'd') {
415
- fx.paths = pathAnim.init(
416
- el,
417
- el.d,
418
- prop.d
419
- );
420
- fx.toD = prop.d;
421
- start = 0;
422
- end = 1;
423
- } else if (el.attr) {
424
- start = el.attr(name);
425
- } else {
426
- start = parseFloat(HighchartsAdapter._getStyle(el, name)) || 0;
427
- if (name !== 'opacity') {
428
- unit = 'px';
429
- }
430
- }
431
-
432
- if (!end) {
433
- end = parseFloat(prop[name]);
434
- }
435
- fx.custom(start, end, unit);
436
- }
437
- };
438
- },
439
-
440
- /**
441
- * Internal method to return CSS value for given element and property
442
- */
443
- _getStyle: function (el, prop) {
444
- return window.getComputedStyle(el).getPropertyValue(prop);
445
- },
446
-
447
- /**
448
- * Downloads a script and executes a callback when done.
449
- * @param {String} scriptLocation
450
- * @param {Function} callback
451
- */
452
- getScript: function (scriptLocation, callback) {
453
- // We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
454
- var head = doc.getElementsByTagName('head')[0],
455
- script = doc.createElement('script');
456
-
457
- script.type = 'text/javascript';
458
- script.src = scriptLocation;
459
- script.onload = callback;
460
-
461
- head.appendChild(script);
462
- },
463
-
464
- /**
465
- * Return the index of an item in an array, or -1 if not found
466
- */
467
- inArray: function (item, arr) {
468
- return arr.indexOf ? arr.indexOf(item) : emptyArray.indexOf.call(arr, item);
469
- },
470
-
471
-
472
- /**
473
- * A direct link to adapter methods
474
- */
475
- adapterRun: function (elem, method) {
476
- return parseInt(HighchartsAdapter._getStyle(elem, method), 10);
477
- },
478
-
479
- /**
480
- * Filter an array
481
- */
482
- grep: function (elements, callback) {
483
- return emptyArray.filter.call(elements, callback);
484
- },
485
-
486
- /**
487
- * Map an array
488
- */
489
- map: function (arr, fn) {
490
- var results = [], i = 0, len = arr.length;
491
-
492
- for (; i < len; i++) {
493
- results[i] = fn.call(arr[i], arr[i], i, arr);
494
- }
495
-
496
- return results;
497
- },
498
-
499
- offset: function (el) {
500
- var left = 0,
501
- top = 0;
502
-
503
- while (el) {
504
- left += el.offsetLeft;
505
- top += el.offsetTop;
506
- el = el.offsetParent;
507
- }
508
-
509
- return {
510
- left: left,
511
- top: top
512
- };
513
- },
514
-
515
- /**
516
- * Add an event listener
517
- */
518
- addEvent: function (el, type, fn) {
519
- augment(el).bind(type, fn);
520
- },
521
-
522
- /**
523
- * Remove event added with addEvent
524
- */
525
- removeEvent: function (el, type, fn) {
526
- augment(el).unbind(type, fn);
527
- },
528
-
529
- /**
530
- * Fire an event on a custom object
531
- */
532
- fireEvent: function (el, type, eventArguments, defaultFunction) {
533
- var e;
534
-
535
- if (doc.createEvent && (el.dispatchEvent || el.fireEvent)) {
536
- e = doc.createEvent('Events');
537
- e.initEvent(type, true, true);
538
- e.target = el;
539
-
540
- Highcharts.extend(e, eventArguments);
541
-
542
- if (el.dispatchEvent) {
543
- el.dispatchEvent(e);
544
- } else {
545
- el.fireEvent(type, e);
546
- }
547
-
548
- } else if (el.HCExtended === true) {
549
- eventArguments = eventArguments || {};
550
- el.trigger(type, eventArguments);
551
- }
552
-
553
- if (eventArguments && eventArguments.defaultPrevented) {
554
- defaultFunction = null;
555
- }
556
-
557
- if (defaultFunction) {
558
- defaultFunction(eventArguments);
559
- }
560
- },
561
-
562
- washMouseEvent: function (e) {
563
- return e;
564
- },
565
-
566
-
567
- /**
568
- * Stop running animation
569
- */
570
- stop: function (el) {
571
- el.stopAnimation = true;
572
- },
573
-
574
- /**
575
- * Utility for iterating over an array. Parameters are reversed compared to jQuery.
576
- * @param {Array} arr
577
- * @param {Function} fn
578
- */
579
- each: function (arr, fn) { // modern browsers
580
- return Array.prototype.forEach.call(arr, fn);
581
- }
582
- };
583
- }());