ishealth-monitor-widget/src/main/java/org/gcube/portlets/admin/ishealthmonitor/public/highcharts/js/adapters/mootools-adapter.src.js

214 lines
4.8 KiB
JavaScript

/**
* @license Highcharts JS v2.1.2 (2011-01-12)
* MooTools adapter
*
* (c) 2010 Torstein Hønsi
*
* License: www.highcharts.com/license
*/
// JSLint options:
/*global Highcharts, Fx, $, $extend, $each, $merge, Events, Event */
var HighchartsAdapter = {
/**
* Initialize the adapter. This is run once as Highcharts is first run.
*/
init: function() {
var fxProto = Fx.prototype,
fxStart = fxProto.start,
morphProto = Fx.Morph.prototype,
morphCompute = morphProto.compute;
// override Fx.start to allow animation of SVG element wrappers
fxProto.start = function(from, to) {
var fx = this,
elem = fx.element;
// special for animating paths
if (from.d) {
//this.fromD = this.element.d.split(' ');
fx.paths = Highcharts.pathAnim.init(
elem,
elem.d,
fx.toD
);
}
fxStart.apply(fx, arguments);
};
// override Fx.step to allow animation of SVG element wrappers
morphProto.compute = function(from, to, delta) {
var fx = this,
paths = fx.paths;
if (paths) {
fx.element.attr(
'd',
Highcharts.pathAnim.step(paths[0], paths[1], delta, fx.toD)
);
} else {
return morphCompute.apply(fx, arguments);
}
};
},
/**
* Animate a HTML element or SVG element wrapper
* @param {Object} el
* @param {Object} params
* @param {Object} options jQuery-like animation options: duration, easing, callback
*/
animate: function (el, params, options) {
var isSVGElement = el.attr,
effect,
complete = options && options.complete;
if (isSVGElement && !el.setStyle) {
// add setStyle and getStyle methods for internal use in Moo
el.getStyle = el.attr;
el.setStyle = function() { // property value is given as array in Moo - break it down
var args = arguments;
el.attr.call(el, args[0], args[1][0]);
}
// dirty hack to trick Moo into handling el as an element wrapper
el.$family = el.uid = true;
}
// stop running animations
HighchartsAdapter.stop(el);
// define and run the effect
effect = new Fx.Morph(
isSVGElement ? el : $(el),
$extend({
transition: Fx.Transitions.Quad.easeInOut
}, options)
);
// special treatment for paths
if (params.d) {
effect.toD = params.d;
}
// jQuery-like events
if (complete) {
effect.addEvent('complete', complete);
}
// run
effect.start(params);
// record for use in stop method
el.fx = effect;
},
/**
* MooTool's each function
*
*/
each: $each,
/**
* Map an array
* @param {Array} arr
* @param {Function} fn
*/
map: function (arr, fn){
return arr.map(fn);
},
/**
* Grep or filter an array
* @param {Array} arr
* @param {Function} fn
*/
grep: function(arr, fn) {
return arr.filter(fn);
},
/**
* Deep merge two objects and return a third
*/
merge: $merge,
/**
* Hyphenate a string, like minWidth becomes min-width
* @param {Object} str
*/
hyphenate: function (str){
return str.hyphenate();
},
/**
* Add an event listener
* @param {Object} el HTML element or custom object
* @param {String} type Event type
* @param {Function} fn Event handler
*/
addEvent: function (el, type, fn) {
if (typeof type == 'string') { // chart broke due to el being string, type function
if (type == 'unload') { // Moo self destructs before custom unload events
type = 'beforeunload';
}
// if the addEvent method is not defined, el is a custom Highcharts object
// like series or point
if (!el.addEvent) {
if (el.nodeName) {
el = $(el); // a dynamically generated node
} else {
$extend(el, new Events()); // a custom object
}
}
el.addEvent(type, fn);
}
},
removeEvent: function(el, type, fn) {
if (type) {
if (type == 'unload') { // Moo self destructs before custom unload events
type = 'beforeunload';
}
el.removeEvent(type, fn);
}
},
fireEvent: function(el, event, eventArguments, defaultFunction) {
// create an event object that keeps all functions
event = new Event({
type: event,
target: el
});
event = $extend(event, eventArguments);
// override the preventDefault function to be able to use
// this for custom events
event.preventDefault = function() {
defaultFunction = null;
};
// if fireEvent is not available on the object, there hasn't been added
// any events to it above
if (el.fireEvent) {
el.fireEvent(event.type, event);
}
// fire the default if it is passed and it is not prevented above
if (defaultFunction) {
defaultFunction(event);
}
},
/**
* Stop running animations on the object
*/
stop: function (el) {
if (el.fx) {
el.fx.cancel();
}
}
};