You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2007/11/27 23:31:55 UTC

svn commit: r598791 - /wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js

Author: knopp
Date: Tue Nov 27 14:31:54 2007
New Revision: 598791

URL: http://svn.apache.org/viewvc?rev=598791&view=rev
Log:
WICKET-1186

Modified:
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js?rev=598791&r1=598790&r2=598791&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js Tue Nov 27 14:31:54 2007
@@ -169,8 +169,8 @@
 	}
 }
 
-Wicket.replaceOuterHtmlIE = function(element, text) {
-	
+Wicket.replaceOuterHtmlIE = function(element, text) {	
+										
 	if (element.tagName == "SCRIPT") {
 		// we need to get the javascript content, so we create an invalid DOM structure,
 		// (that is necessary for IE to let us see the innerHTML of the script tag	
@@ -193,23 +193,34 @@
 	var scripts = new Array();
 		
 	if (tn != 'TBODY' && tn != 'TR' && tn != "TD" && tn != "THEAD") {
+	
+		element.innerHTML = "";
+	
 		// in case the element is not any of these
-		
+						
+		document.body.appendChild(tempDiv);						
+						
 		// this is not exactly nice, but we need to get invalid markup inside innerHTML,
 		// because otherwise IE just swallows the <script> tags (sometimes) 
 		tempDiv.innerHTML = '<table style="display:none">' + text + '</table>';
-		
+						
 		// now copy the script tags to array (needed later for script execution)
-		var s = tempDiv.getElementsByTagName("script");
-		for (var i = 0; i < s.length; ++i) {
+		var s = tempDiv.getElementsByTagName("script");				
+						
+		for (var i = 0; i < s.length; ++i) {			
 			scripts.push(s[i]);
-		}
+		}						
 		
+		tempDiv.innerHTML = "";
+						
 		// now use regular div so that we won't mess the DOM
 		tempDiv.innerHTML = '<div style="display:none">' + text + '</div>'; 
-		
+
 		// set the outer <div> as parent
 		tempParent = tempDiv.childNodes[0];
+		
+		tempParent.parentNode.removeChild(tempParent);								
+						
 	} else {
 	
 		// same trick as with before, this time we need a div to to create invalid markup
@@ -218,9 +229,12 @@
 	
 		// now copy the script tags to array (needed later for script execution)
 		var s = tempDiv.getElementsByTagName("script");
+						
 		for (var i = 0; i < s.length; ++i) {
 			scripts.push(s[i]);
-		}
+		}		
+		
+		tempDiv.innerHTML = "";	
 	
 		// hack to get around the fact that IE doesn't allow to replace table elements
 		tempDiv.innerHTML = '<table style="display: none">' + text + '</table>';
@@ -232,17 +246,25 @@
 	// place all newly created elements before the old element	
 	while(tempParent.childNodes.length > 0) {
 		var tempElement = tempParent.childNodes[0];
+		tempParent.removeChild(tempElement);
 		parent.insertBefore(tempElement, element);
+		tempElement = null;
 	}
-      
+
     // remove the original element
 	parent.removeChild(element);
-		
-	{
-		for (i = 0; i < scripts.length; ++i) {
-			Wicket.Head.addJavascripts(scripts[i]); 
-		}						
-	} 
+
+	element.outerHTML = "";
+	element = "";
+	tempDiv.outerHTML = "";
+
+	parent = null;
+	tempDiv = null;
+	tempParent = null;
+      		
+	for (i = 0; i < scripts.length; ++i) {
+		Wicket.Head.addJavascripts(scripts[i]); 
+	}								 
 }
 
 Wicket.replaceOuterHtmlSafari = function(element, text) {
@@ -1424,537 +1446,3 @@
 	Wicket.Head.addElement(script);	
 }
 
-// Goes through all script elements contained by the element and add them to head
-Wicket.Head.addJavascripts = function(element) {	
-	function add(element) {
-		var src = element.getAttribute("src");
-		
-		// if it is a reference, just add it to head				
-		if (src != null && src.length > 0) {			
-			var e = document.createElement("script");
-			e.setAttribute("type","text/javascript");
-			e.setAttribute("src", src);
-			Wicket.Head.addElement(e);											
-		} else {	
-			var content = Wicket.DOM.serializeNodeChildren(element);		
-			if (content == null || content == "")
-				content = element.text;
-			
-			Wicket.Head.addJavascript(content);
-		}		
-	}
-	if (typeof(element) != "undefined" &&
-	    typeof(element.tagName) != "undefined" &&
-	    element.tagName.toLowerCase() == "script") {
-		add(element);
-	} else {
-		// we need to check if there are any children, becase Safari
-		// aborts when the element is a text node			
-		if (element.childNodes.length > 0) {			
-			var scripts = element.getElementsByTagName("script");
-			for (var i = 0; i < scripts.length; ++i) {
-				add(scripts[i]);
-			}
-		}
-	}
-}
-
-/**
- * Throttler's purpose is to make sure that ajax requests wont be fired too often.
- */
-
-Wicket.ThrottlerEntry = Wicket.Class.create();
-Wicket.ThrottlerEntry.prototype = {
-	initialize: function(func) {
-		this.func = func;
-		this.timestamp = new Date().getTime();
-	},
-	
-	getTimestamp: function() {
-		return this.timestamp;
-	},
-	
-	getFunc: function() {
-		return this.func;
-	},
-	
-	setFunc: function(func) {
-		this.func = func;
-	}
-};
-
-Wicket.Throttler = Wicket.Class.create();
-Wicket.Throttler.prototype = {
-	initialize: function() {
-		this.entries = new Array();
-	},
-	
-	throttle: function(id, millis, func) {
-		var entry = this.entries[id];
-		var me = this;
-		if (entry == undefined) {
-			entry = new Wicket.ThrottlerEntry(func);
-			this.entries[id] = entry;
-			window.setTimeout(function() { me.execute(id); }, millis);
-		} else {
-			entry.setFunc(func);
-		}	
-	},
-	
-	execute: function(id) {
-		var entry = this.entries[id];
-		if (entry != undefined) {
-			var func = entry.getFunc();
-			var tmp = func();
-		}
-		
-		this.entries[id] = undefined;	
-	}
-};
-
-Wicket.throttler = new Wicket.Throttler();
-
-/**
- * Prevent event from bubbling up in the element hierarchy.
- */
-Wicket.stopEvent = function(e) {
-	e=Wicket.fixEvent(e);		
-	e.cancelBubble = true;
-	if (e.stopPropagation)
-		e.stopPropagation();
-}
-
-/**
- * If no event is given as argument (IE), window.event is returned. 
- */
-Wicket.fixEvent = function(e) {
-	if (typeof e == 'undefined') 
-		e = window.event;
-	return e;		
-}
-
-/**
- * Flexible dragging support.
- */
-Wicket.Drag = {
-	
-	/**
-	 * Initializes the dragging on the specified element.
-	 * Element's onmousedown will be replaced by generated handler.
-	 *
-	 * @param {Element} element - element clicking on which the drag should begin 
-	 * @param {Function} onDragBegin - handler called at the begin on dragging - passed element as first parameter
-	 * @param {Function} onDragEnd - handler called at the end of dragging - passed element as first parameter
-	 * @param {Function} onDrag - handler called during dragging - passed element and mouse deltas	 
-	 */
-	init: function(element, onDragBegin, onDragEnd, onDrag) {		
-		
-		if (typeof(onDragBegin) == "undefined")
-			onDragBegin = Wicket.emptyFunction;
-		if (typeof(onDragEnd) == "undefined")
-			onDragEnd = Wicket.emptyFunction;
-		if (typeof(onDrag) == "undefined")
-			onDrag = Wicket.emptyFunction;
-		
-		// set the mousedown handler 
-		element.onmousedown = function(e) {			
-			
-			e = Wicket.fixEvent(e);
-	
-			// HACK - for safari stopPropagation doesn't work well because
-			// it also prevents scrollbars and form components getting the
-			// event. Therefore for safari the 'ignore' flag is set on event. 
-			if (typeof(e.ignore) == "undefined") {
-				
-				Wicket.stopEvent(e);
-	
-				onDragBegin(element);
-			
-				element.onDrag = onDrag;
-				element.onDragEnd = onDragEnd;
-				
-				element.lastMouseX = e.clientX;
-				element.lastMouseY = e.clientY;
-				
-				element.old_onmousemove = document.onmousemove;
-				element.old_onmouseup = document.onmouseup;
-				element.old_onselectstart = document.onselectstart;	
-				element.old_onmouseout = document.onmouseout;		
-				
-				document.onselectstart = function() { return false; }
-				document.onmousemove = Wicket.Drag.mouseMove;
-				document.onmouseup = Wicket.Drag.mouseUp;
-				document.onmouseout = Wicket.Drag.mouseOut;				
-							
-				Wicket.Drag.current = element;
-							
-				return false;
-			} 			
-		};		
-	},
-	
-	/**
-	 * Deinitializes the dragging support on given element. 
-	 */
-	clean: function(element) {
-		element.onmousedown = null;
-	},
-
-	/**
-	 * Called when mouse is moved. This method fires the onDrag event
-	 * with element instance, deltaX and deltaY (the distance
-	 * between this call and the previous one).
-	 
-	 * The onDrag handler can optionally return an array of two integers 
-	 * - the delta correction. This is used, for example, if there is
-	 * element being resized and the size limit has been reached (but the
-	 * mouse can still move).
-	 * 
-	 * @param {Event} e
-	 */	
-	mouseMove: function(e) {
-		e = Wicket.fixEvent(e);
-		var o = Wicket.Drag.current;
-
-		// this happens sometimes in Safari 
-		if (e.clientX < 0 || e.clientY < 0) {
-			return;
-		}		
-
-		if (o != null) {		
-			var deltaX = e.clientX - o.lastMouseX;
-			var deltaY = e.clientY - o.lastMouseY;
-				
-			var res = o.onDrag(o, deltaX, deltaY, e);
-			
-			if (res == null)
-				res = [0, 0];
-			
-			o.lastMouseX = e.clientX + res[0];
-			o.lastMouseY = e.clientY + res[1];
-		}
-		
-		return false;
-	},
-
-	/**
-	 * Called when the mouse button is released.
-	 * Cleans all temporary variables and callback methods.
-	 * 
-	 * @param {Event} e
-	 */	
-	mouseUp: function(e) {		
-		e = Wicket.fixEvent(e);
-		var o = Wicket.Drag.current;
-		
-		if (o != null && typeof(o) != "undefined") {
-			o.onDragEnd(o);		
-			
-			o.onDrag = null;
-			o.onDragEnd = null;
-			o.lastMouseX = null;
-			o.lastMouseY = null;
-			
-			document.onmousemove = o.old_onmousemove;
-			document.onmouseup = o.old_onmouseup;		
-			document.onselectstart = o.old_onselectstart;
-					
-			document.onmouseout = o.old_onmouseout;
-			
-			o.old_mousemove = null;		
-			o.old_mouseup = null;
-			o.old_onselectstart = null;
-			o.old_onmouseout = null;
-			
-			Wicket.Drag.current = null;
-		}
-	},
-	
-	/**
-	 * Called when mouse leaves an element. We need this for firefox, as otherwise
-	 * the dragging would continue after mouse leaves the document.
-	 * Unfortunately this break dragging in firefox immediately after the mouse leaves
-	 * page. 
-	 */
-	mouseOut: function(e) {
-		if (false && Wicket.Browser.isGecko()) {
-			// other browsers handle this more gracefully		
-			e = Wicket.fixEvent(e);
-			
-			if (e.target.tagName == "HTML") {
-				Wicket.Drag.mouseUp(e);				
-			}
-		}
-	}
-	
-	
-};
-
-Wicket.ChangeHandler=function(elementId){
-    var KEY_BACKSPACE=8;
-    var KEY_TAB=9;
-    var KEY_ENTER=13;
-    var KEY_ESC=27;
-    var KEY_LEFT=37;
-    var KEY_UP=38;
-    var KEY_RIGHT=39;
-    var KEY_DOWN=40;
-    var KEY_SHIFT=16;
-    var KEY_CTRL=17;
-    var KEY_ALT=18;
-
-	var obj = Wicket.$(elementId);
-	obj.setAttribute("autocomplete", "off");
-	if (Wicket.Browser.isIE() || Wicket.Browser.isKHTML() || Wicket.Browser.isSafari()) {
-	
-		var objonchange = obj.onchange;
-
-		obj.onkeyup = function(event) {		
-			switch (wicketKeyCode(Wicket.fixEvent(event))) {
-				case KEY_ENTER:
-				case KEY_UP:
-				case KEY_DOWN:
-				case KEY_ESC:
-				case KEY_TAB:
-				case KEY_RIGHT:
-				case KEY_LEFT:
-				case KEY_SHIFT:
-				case KEY_ALT:
-				case KEY_CTRL:
-					return Wicket.stopEvent(event);
-					break;
-				default:
-					if (typeof objonchange == "function")objonchange();
-			}
-			return null;
-		}
-		
-		obj.onpaste = function(event) {
-			if (typeof objonchange == "function"){
-				setTimeout(function() {
-	   			  objonchange();
-			     }, 10);
-			}
-			return null;
-		}
-		
-		obj.oncut = function(event) {
-			if (typeof objonchange == "function"){
-				setTimeout(function() {
-	   			  objonchange();
-			     }, 10);
-			}
-			return null;
-		}
-	} else {
-		obj.addEventListener('input', obj.onchange, true);
-	}
-
-	obj.onchange = function(event) {
-		Wicket.stopEvent(event);
-	}
-} 
-
-/*
- * Compatibility layer to maintain the original wicket-ajax API.
- */
-
-var wicketThrottler = Wicket.throttler;
-
-function wicketAjaxGet(url, successHandler, failureHandler, precondition, channel) {
-
-	var call = new Wicket.Ajax.Call(url, successHandler, failureHandler, channel);
-	
-	if (typeof(precondition) != "undefined" && precondition != null) {
-		call.request.precondition = precondition;
-	}
-	
-	return call.call();
-}
-
-function wicketAjaxPost(url, body, successHandler, failureHandler, precondition, channel) {
-	var call = new Wicket.Ajax.Call(url, successHandler, failureHandler, channel);
-	
-	if (typeof(precondition) != "undefined" && precondition != null) {		
-		call.request.precondition = precondition;
-	}
-	
-	return call.post(body);
-}
-
-function wicketSubmitForm(form, url, submitButton, successHandler, failureHandler, precondition, channel) {
-	var call = new Wicket.Ajax.Call(url, successHandler, failureHandler, channel);
-	
-	if (typeof(precondition) != "undefined" && precondition != null) {
-		call.request.precondition = precondition;
-	}
-	
-	return call.submitForm(form, submitButton);
-}
-
-function wicketSubmitFormById(formId, url, submitButton, successHandler, failureHandler, precondition, channel) {
-	var call = new Wicket.Ajax.Call(url, successHandler, failureHandler, channel);
-	
-	if (typeof(precondition) != "undefined" && precondition != null) {
-		call.request.precondition = precondition;
-	}
-	
-	return call.submitFormById(formId, submitButton);
-}
-
-wicketSerialize = Wicket.Form.serializeElement;
-
-wicketSerializeForm = Wicket.Form.serialize;
-
-wicketEncode = Wicket.Form.encode;
-
-wicketDecode = Wicket.decode;
-
-wicketAjaxGetTransport = Wicket.Ajax.getTransport;
-
-// Global handlers stubs
-
-Wicket.Ajax.registerPreCallHandler(function() {
-	if (typeof(window.wicketGlobalPreCallHandler) != "undefined") {
-	    var global=wicketGlobalPreCallHandler;
-	    if (global!=null) {
-	    	global();
-	    }
-	}    
-});
-
-Wicket.Ajax.registerPostCallHandler(function() {
-	if (typeof(window.wicketGlobalPostCallHandler) != "undefined") {
-	    var global=wicketGlobalPostCallHandler;
-	    if (global!=null) {
-	    	global();
-	    }
-	}    
-});
-
-Wicket.Ajax.registerFailureHandler(function() {
-	if (typeof(window.wicketGlobalFailureHandler) != "undefined") {
-	    var global=wicketGlobalFailureHandler;
-	    if (global!=null) {
-	    	global();
-	    }
-	}    
-});
-
-// FOCUS FUNCTIONS
-
-Wicket.Focus = {
-	lastFocusId : "",
-
-	setFocus: function(event)
-	{ 
-		event = Wicket.fixEvent(event);
-	
-	    // IE doesn't have the property "target".
-	    // Use "srcElement" instead.
-	    var target = event.target ? event.target : event.srcElement;
-	    if (target) {
-			lastFocusId=target.id;
-			Wicket.Log.info("focus set on " + lastFocusId);
-		}
-	},
-	
-	setFocusOnId: function(id)
-	{
-		lastFocusId=id;
-		Wicket.Log.info("focus set on " + lastFocusId + " from serverside");
-	},
-	
-	getFocusedElement: function()
-	{
-		if (typeof(lastFocusId) != "undefined" && lastFocusId != "" && lastFocusId != null)
-		{
-			Wicket.Log.info("returned focused element: " + Wicket.$(lastFocusId)); 
-			return Wicket.$(lastFocusId);
-		}
-		return;
-	},
-	
-	requestFocus: function()
-	{
-		if (typeof(lastFocusId) != "undefined" && lastFocusId != "" && lastFocusId != null)
-		{ 
-			var toFocus = Wicket.$(lastFocusId);
-			if (toFocus != null && typeof(toFocus) != "undefined") {
-				Wicket.Log.info("Calling focus on " + lastFocusId);
-				try {
-					toFocus.focus();
-				} catch (ignore) {
-				}
-			}
-			else
-			{
-				lastFocusId = "";
-				Wicket.Log.info("Couldn't set focus on " + lastFocusId + " not on the page anymore");
-			}
-		}
-		else
-		{
-			Wicket.Log.info("last focus id was not set");
-		}
-	},
-	
-	setFocusOnElements: function (elements)
-	{
-		for (var i=0; i< elements.length; i++)
-		{
-		    if ( typeof(elements[i].focusSet) == "undefined")
-		    {
-		         Wicket.Event.add(elements[i],'focus',Wicket.Focus.setFocus);
-		         elements[i].focusSet = true;
-		    }
-		}
-	},
-	
-	attachFocusEvent: function()
-	{
-		Wicket.Focus.setFocusOnElements(document.getElementsByTagName("input"));
-		Wicket.Focus.setFocusOnElements(document.getElementsByTagName("select"));
-		Wicket.Focus.setFocusOnElements(document.getElementsByTagName("textarea"));
-		Wicket.Focus.setFocusOnElements(document.getElementsByTagName("button"));
-		Wicket.Focus.setFocusOnElements(document.getElementsByTagName("a"));
-	}
-}
-Wicket.Event.addDomReadyEvent(Wicket.Focus.attachFocusEvent);
-
-
-// DEBUG FUNCTIONS
-function wicketAjaxDebugEnabled() {
-    if (typeof(wicketAjaxDebugEnable)=="undefined") {
-        return false;
-    } else {
-        return wicketAjaxDebugEnable==true;
-    }
-}
-
-// MISC FUNCTIONS
-function wicketKeyCode(event) {
-    if (typeof(event.keyCode)=="undefined") {
-        return event.which;
-    } else {
-        return event.keyCode;
-    }
-}
-
-function wicketGet(id) {
-    return Wicket.$(id);
-}
-
-function wicketShow(id) {
-    var e=wicketGet(id);
-    if (e!=null) {
-	    e.style.display = "";
-	}
-}
-
-function wicketHide(id) {
-    var e=wicketGet(id);
-	if (e!=null) {
-	    e.style.display = "none";
-	}
-}