highcharts-rails 4.1.10 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.markdown +17 -0
- data/app/assets/javascripts/highcharts.js +730 -537
- data/app/assets/javascripts/highcharts/adapters/standalone-framework.js +0 -634
- data/app/assets/javascripts/highcharts/highcharts-3d.js +1 -1
- data/app/assets/javascripts/highcharts/highcharts-more.js +14 -2
- data/app/assets/javascripts/highcharts/modules/boost.js +7 -3
- data/app/assets/javascripts/highcharts/modules/broken-axis.js +6 -3
- data/app/assets/javascripts/highcharts/modules/canvas-tools.js +3 -2
- data/app/assets/javascripts/highcharts/modules/data.js +5 -3
- data/app/assets/javascripts/highcharts/modules/drilldown.js +3 -3
- data/app/assets/javascripts/highcharts/modules/exporting.js +6 -6
- data/app/assets/javascripts/highcharts/modules/heatmap.js +4 -4
- data/app/assets/javascripts/highcharts/modules/no-data-to-display.js +1 -1
- data/app/assets/javascripts/highcharts/modules/offline-exporting.js +40 -19
- data/app/assets/javascripts/highcharts/modules/solid-gauge.js +4 -4
- data/app/assets/javascripts/highcharts/modules/treemap.js +1 -1
- data/lib/highcharts/version.rb +1 -1
- metadata +1 -3
- data/app/assets/javascripts/highcharts/adapters/mootools-adapter.js +0 -316
- data/app/assets/javascripts/highcharts/adapters/prototype-adapter.js +0 -316
@@ -1,316 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @license Highcharts JS v3.0.10 (2014-03-10)
|
3
|
-
* MooTools adapter
|
4
|
-
*
|
5
|
-
* (c) 2010-2014 Torstein Honsi
|
6
|
-
*
|
7
|
-
* License: www.highcharts.com/license
|
8
|
-
*/
|
9
|
-
|
10
|
-
// JSLint options:
|
11
|
-
/*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */
|
12
|
-
|
13
|
-
(function () {
|
14
|
-
|
15
|
-
var win = window,
|
16
|
-
doc = document,
|
17
|
-
mooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number
|
18
|
-
legacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.
|
19
|
-
legacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.
|
20
|
-
$extend = win.$extend || function () {
|
21
|
-
return Object.append.apply(Object, arguments);
|
22
|
-
};
|
23
|
-
|
24
|
-
win.HighchartsAdapter = {
|
25
|
-
/**
|
26
|
-
* Initialize the adapter. This is run once as Highcharts is first run.
|
27
|
-
* @param {Object} pathAnim The helper object to do animations across adapters.
|
28
|
-
*/
|
29
|
-
init: function (pathAnim) {
|
30
|
-
var fxProto = Fx.prototype,
|
31
|
-
fxStart = fxProto.start,
|
32
|
-
morphProto = Fx.Morph.prototype,
|
33
|
-
morphCompute = morphProto.compute;
|
34
|
-
|
35
|
-
// override Fx.start to allow animation of SVG element wrappers
|
36
|
-
/*jslint unparam: true*//* allow unused parameters in fx functions */
|
37
|
-
fxProto.start = function (from, to) {
|
38
|
-
var fx = this,
|
39
|
-
elem = fx.element;
|
40
|
-
|
41
|
-
// special for animating paths
|
42
|
-
if (from.d) {
|
43
|
-
//this.fromD = this.element.d.split(' ');
|
44
|
-
fx.paths = pathAnim.init(
|
45
|
-
elem,
|
46
|
-
elem.d,
|
47
|
-
fx.toD
|
48
|
-
);
|
49
|
-
}
|
50
|
-
fxStart.apply(fx, arguments);
|
51
|
-
|
52
|
-
return this; // chainable
|
53
|
-
};
|
54
|
-
|
55
|
-
// override Fx.step to allow animation of SVG element wrappers
|
56
|
-
morphProto.compute = function (from, to, delta) {
|
57
|
-
var fx = this,
|
58
|
-
paths = fx.paths;
|
59
|
-
|
60
|
-
if (paths) {
|
61
|
-
fx.element.attr(
|
62
|
-
'd',
|
63
|
-
pathAnim.step(paths[0], paths[1], delta, fx.toD)
|
64
|
-
);
|
65
|
-
} else {
|
66
|
-
return morphCompute.apply(fx, arguments);
|
67
|
-
}
|
68
|
-
};
|
69
|
-
/*jslint unparam: false*/
|
70
|
-
},
|
71
|
-
|
72
|
-
/**
|
73
|
-
* Run a general method on the framework, following jQuery syntax
|
74
|
-
* @param {Object} el The HTML element
|
75
|
-
* @param {String} method Which method to run on the wrapped element
|
76
|
-
*/
|
77
|
-
adapterRun: function (el, method) {
|
78
|
-
|
79
|
-
// This currently works for getting inner width and height. If adding
|
80
|
-
// more methods later, we need a conditional implementation for each.
|
81
|
-
if (method === 'width' || method === 'height') {
|
82
|
-
return parseInt(document.id(el).getStyle(method), 10);
|
83
|
-
}
|
84
|
-
},
|
85
|
-
|
86
|
-
/**
|
87
|
-
* Downloads a script and executes a callback when done.
|
88
|
-
* @param {String} scriptLocation
|
89
|
-
* @param {Function} callback
|
90
|
-
*/
|
91
|
-
getScript: function (scriptLocation, callback) {
|
92
|
-
// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
|
93
|
-
var head = doc.getElementsByTagName('head')[0];
|
94
|
-
var script = doc.createElement('script');
|
95
|
-
|
96
|
-
script.type = 'text/javascript';
|
97
|
-
script.src = scriptLocation;
|
98
|
-
script.onload = callback;
|
99
|
-
|
100
|
-
head.appendChild(script);
|
101
|
-
},
|
102
|
-
|
103
|
-
/**
|
104
|
-
* Animate a HTML element or SVG element wrapper
|
105
|
-
* @param {Object} el
|
106
|
-
* @param {Object} params
|
107
|
-
* @param {Object} options jQuery-like animation options: duration, easing, callback
|
108
|
-
*/
|
109
|
-
animate: function (el, params, options) {
|
110
|
-
var isSVGElement = el.attr,
|
111
|
-
effect,
|
112
|
-
complete = options && options.complete;
|
113
|
-
|
114
|
-
if (isSVGElement && !el.setStyle) {
|
115
|
-
// add setStyle and getStyle methods for internal use in Moo
|
116
|
-
el.getStyle = el.attr;
|
117
|
-
el.setStyle = function () { // property value is given as array in Moo - break it down
|
118
|
-
var args = arguments;
|
119
|
-
this.attr.call(this, args[0], args[1][0]);
|
120
|
-
};
|
121
|
-
// dirty hack to trick Moo into handling el as an element wrapper
|
122
|
-
el.$family = function () { return true; };
|
123
|
-
el.getComputedStyle = function () {
|
124
|
-
return el.element.getComputedStyle.apply(el.element, arguments);
|
125
|
-
};
|
126
|
-
}
|
127
|
-
|
128
|
-
// stop running animations
|
129
|
-
win.HighchartsAdapter.stop(el);
|
130
|
-
|
131
|
-
// define and run the effect
|
132
|
-
effect = new Fx.Morph(
|
133
|
-
isSVGElement ? el : document.id(el),
|
134
|
-
$extend({
|
135
|
-
transition: Fx.Transitions.Quad.easeInOut
|
136
|
-
}, options)
|
137
|
-
);
|
138
|
-
|
139
|
-
// Make sure that the element reference is set when animating svg elements
|
140
|
-
if (isSVGElement) {
|
141
|
-
effect.element = el;
|
142
|
-
}
|
143
|
-
|
144
|
-
// special treatment for paths
|
145
|
-
if (params.d) {
|
146
|
-
effect.toD = params.d;
|
147
|
-
}
|
148
|
-
|
149
|
-
// jQuery-like events
|
150
|
-
if (complete) {
|
151
|
-
effect.addEvent('complete', complete);
|
152
|
-
}
|
153
|
-
|
154
|
-
// run
|
155
|
-
effect.start(params);
|
156
|
-
|
157
|
-
// record for use in stop method
|
158
|
-
el.fx = effect;
|
159
|
-
},
|
160
|
-
|
161
|
-
/**
|
162
|
-
* MooTool's each function
|
163
|
-
*
|
164
|
-
*/
|
165
|
-
each: function (arr, fn) {
|
166
|
-
return legacy ?
|
167
|
-
$each(arr, fn) :
|
168
|
-
Array.each(arr, fn);
|
169
|
-
},
|
170
|
-
|
171
|
-
/**
|
172
|
-
* Map an array
|
173
|
-
* @param {Array} arr
|
174
|
-
* @param {Function} fn
|
175
|
-
*/
|
176
|
-
map: function (arr, fn) {
|
177
|
-
return arr.map(fn);
|
178
|
-
},
|
179
|
-
|
180
|
-
/**
|
181
|
-
* Grep or filter an array
|
182
|
-
* @param {Array} arr
|
183
|
-
* @param {Function} fn
|
184
|
-
*/
|
185
|
-
grep: function (arr, fn) {
|
186
|
-
return arr.filter(fn);
|
187
|
-
},
|
188
|
-
|
189
|
-
/**
|
190
|
-
* Return the index of an item in an array, or -1 if not matched
|
191
|
-
*/
|
192
|
-
inArray: function (item, arr, from) {
|
193
|
-
return arr ? arr.indexOf(item, from) : -1;
|
194
|
-
},
|
195
|
-
|
196
|
-
/**
|
197
|
-
* Get the offset of an element relative to the top left corner of the web page
|
198
|
-
*/
|
199
|
-
offset: function (el) {
|
200
|
-
var offsets = el.getPosition(); // #1496
|
201
|
-
return {
|
202
|
-
left: offsets.x,
|
203
|
-
top: offsets.y
|
204
|
-
};
|
205
|
-
},
|
206
|
-
|
207
|
-
/**
|
208
|
-
* Extends an object with Events, if its not done
|
209
|
-
*/
|
210
|
-
extendWithEvents: function (el) {
|
211
|
-
// if the addEvent method is not defined, el is a custom Highcharts object
|
212
|
-
// like series or point
|
213
|
-
if (!el.addEvent) {
|
214
|
-
if (el.nodeName) {
|
215
|
-
el = document.id(el); // a dynamically generated node
|
216
|
-
} else {
|
217
|
-
$extend(el, new Events()); // a custom object
|
218
|
-
}
|
219
|
-
}
|
220
|
-
},
|
221
|
-
|
222
|
-
/**
|
223
|
-
* Add an event listener
|
224
|
-
* @param {Object} el HTML element or custom object
|
225
|
-
* @param {String} type Event type
|
226
|
-
* @param {Function} fn Event handler
|
227
|
-
*/
|
228
|
-
addEvent: function (el, type, fn) {
|
229
|
-
if (typeof type === 'string') { // chart broke due to el being string, type function
|
230
|
-
|
231
|
-
if (type === 'unload') { // Moo self destructs before custom unload events
|
232
|
-
type = 'beforeunload';
|
233
|
-
}
|
234
|
-
|
235
|
-
win.HighchartsAdapter.extendWithEvents(el);
|
236
|
-
|
237
|
-
el.addEvent(type, fn);
|
238
|
-
}
|
239
|
-
},
|
240
|
-
|
241
|
-
removeEvent: function (el, type, fn) {
|
242
|
-
if (typeof el === 'string') {
|
243
|
-
// el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.
|
244
|
-
return;
|
245
|
-
}
|
246
|
-
|
247
|
-
if (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove
|
248
|
-
if (type) {
|
249
|
-
if (type === 'unload') { // Moo self destructs before custom unload events
|
250
|
-
type = 'beforeunload';
|
251
|
-
}
|
252
|
-
|
253
|
-
if (fn) {
|
254
|
-
el.removeEvent(type, fn);
|
255
|
-
} else if (el.removeEvents) { // #958
|
256
|
-
el.removeEvents(type);
|
257
|
-
}
|
258
|
-
} else {
|
259
|
-
el.removeEvents();
|
260
|
-
}
|
261
|
-
}
|
262
|
-
},
|
263
|
-
|
264
|
-
fireEvent: function (el, event, eventArguments, defaultFunction) {
|
265
|
-
var eventArgs = {
|
266
|
-
type: event,
|
267
|
-
target: el
|
268
|
-
};
|
269
|
-
// create an event object that keeps all functions
|
270
|
-
event = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs);
|
271
|
-
event = $extend(event, eventArguments);
|
272
|
-
|
273
|
-
// When running an event on the Chart.prototype, MooTools nests the target in event.event
|
274
|
-
if (!event.target && event.event) {
|
275
|
-
event.target = event.event.target;
|
276
|
-
}
|
277
|
-
|
278
|
-
// override the preventDefault function to be able to use
|
279
|
-
// this for custom events
|
280
|
-
event.preventDefault = function () {
|
281
|
-
defaultFunction = null;
|
282
|
-
};
|
283
|
-
// if fireEvent is not available on the object, there hasn't been added
|
284
|
-
// any events to it above
|
285
|
-
if (el.fireEvent) {
|
286
|
-
el.fireEvent(event.type, event);
|
287
|
-
}
|
288
|
-
|
289
|
-
// fire the default if it is passed and it is not prevented above
|
290
|
-
if (defaultFunction) {
|
291
|
-
defaultFunction(event);
|
292
|
-
}
|
293
|
-
},
|
294
|
-
|
295
|
-
/**
|
296
|
-
* Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346.
|
297
|
-
*/
|
298
|
-
washMouseEvent: function (e) {
|
299
|
-
if (e.page) {
|
300
|
-
e.pageX = e.page.x;
|
301
|
-
e.pageY = e.page.y;
|
302
|
-
}
|
303
|
-
return e;
|
304
|
-
},
|
305
|
-
|
306
|
-
/**
|
307
|
-
* Stop running animations on the object
|
308
|
-
*/
|
309
|
-
stop: function (el) {
|
310
|
-
if (el.fx) {
|
311
|
-
el.fx.cancel();
|
312
|
-
}
|
313
|
-
}
|
314
|
-
};
|
315
|
-
|
316
|
-
}());
|
@@ -1,316 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* @license Highcharts JS v3.0.10 (2014-03-10)
|
3
|
-
* Prototype adapter
|
4
|
-
*
|
5
|
-
* @author Michael Nelson, Torstein Honsi.
|
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
|
-
}());
|