X-Git-Url: https://svn.cri.ensmp.fr/git/Plinn.git/blobdiff_plain/a4472c3553470a19942bc35471fcb9f490c534d3..6287eb1fbd3b4f58cfcbb8477cbed96603dd5760:/skins/ajax_scripts/javascript_events_api.js

diff --git a/skins/ajax_scripts/javascript_events_api.js b/skins/ajax_scripts/javascript_events_api.js
index 62ec577..2083018 100644
--- a/skins/ajax_scripts/javascript_events_api.js
+++ b/skins/ajax_scripts/javascript_events_api.js
@@ -1,4 +1,4 @@
-// (c) Benoît PIN 2006-2009
+// (c) Benoît PIN 2006-2014
 // http://plinn.org
 // Licence GPL
 // 
@@ -6,7 +6,7 @@
 // Meta functions for events management.
 
 var addListener; /* (ob, eventName, listenerFunction, group) add event listener eventName without "on" prefix.
-				 *  optionally, listeners can be grouped to make removing convenient.
+				 *	optionally, listeners can be grouped to make removing convenient.
 				 */
 var removeListener; // (ob, eventName, listenerFunction, group) remove event listener.
 var removeGroupListeners; // (group) remove all listeners in group.
@@ -27,6 +27,11 @@ var getCopyOfNode; /* (node) returns a clone of the given node.
 						* to inject HMTL code inside tags where innerHtml is read only (IE)
 					*/
 
+var copyPrototype; // (descendant, parent) lightwheight javascript inheritance
+if (!history.pushState) {
+	history.pushState = function(){};
+}
+
 (function(){
 
 function buildMetaFunctions() {
@@ -40,20 +45,22 @@ function buildMetaFunctions() {
 	disablePropagation = _build_disablePropagation();
 	getWindowWidth = _build_getWindowWidth();
 	getWindowHeight = _build_getWindowHeight();
+	getWindowScrollX = _build_getWindowScrollX();
+	getWindowScrollY = _build_getWindowScrollY();
 	clearSelection = _build_clearSelection();
 }
 
-__groupListeners = {};
+var __groupListeners = {};
 
 function _build_addListener() {
 	var _browserSpecific;
-	if (browser.isIE55 || browser.isIE6up) {
+	if (!browser.isDOM2Event) {
 		_browserSpecific = function(ob, eventName, listenerFunction) {
 			eventName = "on" + eventName;
 			ob.attachEvent(eventName, listenerFunction);
 		};
 	}
-	else if (browser.isDOM2Event) {
+	else {
 		_browserSpecific = function(ob, eventName, listenerFunction) {
 			ob.addEventListener(eventName, listenerFunction, false); // only bubbling events :-(
 		};
@@ -70,14 +77,14 @@ function _build_addListener() {
 }
 
 function _build_removeListener() {
-	if (browser.isIE55 || browser.isIE6up) {
+	if (!browser.isDOM2Event) {
 		var _ie_removeListener = function(ob, eventName, listenerFunction) {
 			eventName = "on" + eventName;
 			ob.detachEvent(eventName, listenerFunction);
 		};
 		return _ie_removeListener;
 	}
-	else if (browser.isDOM2Event) {
+	else {
 		var _dom2_removeListener = function(ob, eventName, listenerFunction) {
 			ob.removeEventListener(eventName, listenerFunction, false); // only bubbling events :-(
 		};
@@ -97,13 +104,13 @@ removeGroupListeners = function(group) {
 };
 
 function  _build_raiseMouseEvent() {
-	if (browser.isIE55 || browser.isIE6up) {
+	if (!browser.isDOM2Event) {
 		var _ie_raiseMouseEvent = function(ob, eventName) {
 			ob.fireEvent("on" + eventName);
 		};
 		return _ie_raiseMouseEvent;
 	}
-	else if (browser.isDOM2Event) {
+	else {
 		var _dom2_raiseMouseEvent = function(ob, eventName) {
 			var event = document.createEvent("MouseEvents");
 			event.initEvent(eventName, true, true);
@@ -114,13 +121,13 @@ function  _build_raiseMouseEvent() {
 }
 
 function _build_getTargetedObject(){
-	if (browser.isIE55 || browser.isIE6up) {
+	if (!browser.isDOM2Event) {
 		var _ie_getTargetedObject = function() {
 			return window.event.srcElement;
 		};
 		return _ie_getTargetedObject;
 	}
-	else if (browser.isDOM2Event) {
+	else {
 		var _appleWebKit_getTargetedeObject = function(evt) {
 			var target = evt.target;
 			// is it really safe ?...
@@ -134,13 +141,13 @@ function _build_getTargetedObject(){
 }
 
 function _build_getEventObject(){
-	if (browser.isIE) {
+	if (!browser.isDOM2Event) {
 		var _ie_getEventObject = function() {
 			return window.event;
 		};
 		return _ie_getEventObject;
 	}
-	else if (browser.isDOM2Event) {
+	else {
 		var _dom2_getEventObject = function(evt) {
 			return evt;
 		};
@@ -150,13 +157,13 @@ function _build_getEventObject(){
 
 
 function _build_disableDefault(){
-	if (browser.isIE55 || browser.isIE6up) {
+	if (!browser.isDOM2Event) {
 		var _ie_disableDefault = function() {
 			window.event.returnValue = false;
 		};
 		return _ie_disableDefault;
 	}
-	else if (browser.isDOM2Event) {
+	else {
 		var _dom2_disableDefault = function(evt) {
 			evt.preventDefault();
 		};
@@ -165,13 +172,13 @@ function _build_disableDefault(){
 }
 
 function _build_disablePropagation() {
-	if (browser.isIE55 || browser.isIE6up) {
+	if (!browser.isDOM2Event) {
 		var _ie_disablePropagation = function() {
 			window.event.cancelBubble = true;
 		};
 		return _ie_disablePropagation;
 	}
-	else if (browser.isDOM2Event) {
+	else {
 		var _dom2_disablePropagation = function(evt) {
 			evt.stopPropagation();
 		};
@@ -205,6 +212,32 @@ function _build_getWindowHeight() {
 	}
 }
 
+function _build_getWindowScrollX() {
+	if (window.scrollX !== undefined) {
+		return function(){
+			return window.scrollX;
+		};
+	}
+	else {
+		return function(){
+			return document.documentElement.scrollLeft;
+		};
+	}
+}
+
+function _build_getWindowScrollY() {
+	if (window.scrollY !== undefined) {
+		return function(){
+			return window.scrollY;
+		};
+	}
+	else {
+		return function(){
+			return document.documentElement.scrollTop;
+		};
+	}
+}
+
 function _build_clearSelection() {
 	if (document.selection) {
 		return function() {
@@ -218,9 +251,22 @@ function _build_clearSelection() {
 	}
 }
 
-
 buildMetaFunctions();
 
+addListener(window, 'load', function(evt) {
+	// html5 facade
+	try {
+		if (!document.body.classList) {
+			var nop = function(){};
+			var fakeDOMTokenList = {'length':0, 'item':nop, 'contains':nop, 'add':nop, 'remove':nop, 'toggle':nop};
+			Element.prototype.classList = fakeDOMTokenList;
+		}
+	}
+	catch (e) {}
+});
+
+
+
 var ELEMENT_NODE = 1;
 var TEXT_NODE = 3;
 var _setAttribute;
@@ -249,7 +295,7 @@ getCopyOfNode = function(node) {
 	}
 };
 
-if (browser.isIE) {
+if (browser.isIE7max) {
 	_setAttribute = function(e, name, value) {
 		// workarround IE lack of dom implementation.
 		switch(name.toLowerCase()) {
@@ -272,9 +318,10 @@ if (browser.isIE) {
 		}
 	};
 	var reCompoundPropName = /^\s*([^\-]+)\-([a-z])([a-z]+)\s*$/;
-	var _capitalizeCssPropName = function (s, g1, g2, g3) { // gN args match above regexp groups 
-		if(g2) {
-			return g1 + g2.toUpperCase() + g3;}
+	var _capitalizeCssPropName = function (s) {
+		var g = reCompoundPropName.exec(s);
+		if(g) {
+			return g[1] + g[2].toUpperCase() + g[3];}
 		else {
 			return s;}
 	};
@@ -297,4 +344,19 @@ else {
 	_setAttribute = function(e, name, value) {e.setAttribute(name, value);};
 }
 
+/* 
+* http://www.sitepoint.com/blogs/2006/01/17/javascript-inheritance/
+*/
+
+copyPrototype = function (descendant, parent) { 
+	var sConstructor = parent.toString(); 
+	var aMatch = sConstructor.match( /\s*function (.*)\(/ );
+	if ( aMatch !== null ) { descendant.prototype[aMatch[1]] = parent; }
+	var m;
+	for (m in parent.prototype) {
+		if (parent.prototype.hasOwnProperty(m)) {
+			descendant.prototype[m] = parent.prototype[m]; }
+	}
+};
+
 }());