You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ef...@apache.org on 2007/07/15 21:59:40 UTC

svn commit: r556441 - /myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js

Author: efastl
Date: Sun Jul 15 12:59:38 2007
New Revision: 556441

URL: http://svn.apache.org/viewvc?view=rev&rev=556441
Log:
fix for TOMAHAWK-1055

Modified:
    myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js

Modified: myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js?view=diff&rev=556441&r1=556440&r2=556441
==============================================================================
--- myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js (original)
+++ myfaces/tomahawk/trunk/sandbox/core/src/main/resources/org/apache/myfaces/custom/ppr/resource/ppr.js Sun Jul 15 12:59:38 2007
@@ -33,9 +33,9 @@
 	{
     	window.oamPartialTriggersToZoneIds = new Array();
     }
-    if(!window.oamZoneIdsToPartialTriggerPatterns)
+    if(!window.oamEventHandlerToInputIds)
 	{
-    	window.oamZoneIdsToPartialTriggerPatterns = new Array();
+    	window.oamEventHandlerToInputIds = new Array();
     }
     if(!window.oamInlineLoadingMessage)
 	{
@@ -43,12 +43,12 @@
     }
     if(!window.oamRefreshTimeoutForZoneId)
 	{
-    	window.oamRefreshTimeoutForZoneId = new Array;
+    	window.oamRefreshTimeoutForZoneId = new Array();
     }
 
     this.replaceFormSubmitFunction(formId);
 
-    this.addElementEventHandler();
+	this.reConnectEventHandlers();
 }
 
 //Method to register individual HTML to be displayed instead of the component during loading
@@ -62,16 +62,31 @@
 
 org.apache.myfaces.PPRCtrl.prototype.addPartialTriggerPattern= function(pattern, refreshZoneId)
 {
-        
-
-        window.oamZoneIdsToPartialTriggerPatterns[refreshZoneId] = pattern;
+	//Register partial triggers for all matching buttons and links
+	for (var f = 0; f < document.forms.length; f++)
+	{
+		var currentForm = document.forms[f];
+		//search all buttons by iterating all inputs
+		for (var i = 0; i < currentForm.elements.length; i++)
+    	{
+	        var formElement = this.form.elements[i];
+	        if(this.isMatchingPattern(pattern,formElement.id) )
+					this.addPartialTrigger(formElement.id , null , refreshZoneId);
+		}
+		//search all links
+		var links = currentForm.getElementsByTagName("a");
+		for (var i = 0; i < links.length; i++) {
+			if(this.isMatchingPattern(pattern,links[i].id) )
+				this.addPartialTrigger(links[i].id , null , refreshZoneId);
+		}
+	}
 };
 
 //Method for ppr-panel-groups to register their partial triggers
 
 org.apache.myfaces.PPRCtrl.prototype.addPartialTrigger= function(inputElementId, eventHookArr, refreshZoneId)
 {
-    this._addEventHandlerForId(inputElementId,eventHookArr,"elementOnEventHandler");
+    this._cachingAddEventHandlerForId(inputElementId,eventHookArr,"elementOnEventHandler");
 
     this._addInputAndZone(window.oamPartialTriggersToZoneIds, inputElementId, refreshZoneId);
 };
@@ -94,7 +109,7 @@
 org.apache.myfaces.PPRCtrl.prototype.addPeriodicalTrigger = function(inputElementId, eventHookArr, refreshZoneId, refreshTimeout)
 {
 
-    this._addEventHandlerForId(inputElementId,eventHookArr,"elementOnPeriodicalEventHandler");
+    this._cachingAddEventHandlerForId(inputElementId,eventHookArr,"elementOnPeriodicalEventHandler");
 
     this._addInputAndZone(window.oamPartialTriggersToZoneIds, inputElementId, refreshZoneId);
 
@@ -159,11 +174,11 @@
 		{
 			componentUpdate = componentUpdates[i];
 			domElement = dojo.byId(componentUpdate.getAttribute("id"));
-			//todo - doesn't work with tables in IE
+			//todo - doesn't work with tables in IE (not used for tables at the moment)
 			domElement.innerHTML = componentUpdate.firstChild.data;
 		}
 	    //ensure that new buttons in the PartialUpdate also have onclick-handlers
-	    this.formNode.myFacesPPRCtrl.addElementEventHandler();
+	    this.formNode.myFacesPPRCtrl.reConnectEventHandlers();
 
         if (this.formNode.myFacesPPRCtrl.stateUpdate)
         {
@@ -354,24 +369,6 @@
     );
 }
 
-//This Method defines joinpoints for all inputs of either type submit or image
-org.apache.myfaces.PPRCtrl.prototype.addElementEventHandler = function()
-{
-    /* TODO: rethink the pattern approach
-    if (typeof this.form == "undefined" || this.form.tagName.toLowerCase() != "form")
-    {
-        return;
-    }
-
-    for (var i = 0; i < this.form.elements.length; i++)
-    {
-        var formElement = this.form.elements[i];
-        if(this._isButton(formElement)) {
-            this._addEventHandler(formElement,null,"elementOnEventHandler");
-        }
-    }            */
-}
-
 org.apache.myfaces.PPRCtrl.prototype._addEventHandlerForId = function (formElementId, connectToEventArr, eventHandler) {
     var formElement = dojo.byId(formElementId);
 
@@ -381,6 +378,45 @@
         log.error("Input element with id : "+formElementId +" not found.");
 }
 
+//Really connect all deffered event handlers
+//Also has to be done after a Response has been processed
+org.apache.myfaces.PPRCtrl.prototype.reConnectEventHandlers= function() {
+	for (var e = 0; e < window.oamEventHandlerToInputIds.length; e++) {
+		var elem = window.oamEventHandlerToInputIds[e];
+		this._addEventHandlerForId(elem['formElementId'],elem['connectToEventArr'],elem['eventHandler']);
+	}
+}
+
+//Store the information about to be connected event-handlers for connecting 
+//them initially and after each PPR Response
+org.apache.myfaces.PPRCtrl.prototype._cachingAddEventHandlerForId = function (formElementId, connectToEventArr, eventHandler) {
+		var element = new Array();
+		element['formElementId'] = formElementId;
+		element['eventHandler'] = eventHandler;
+		element['connectToEventArr'] = connectToEventArr;
+		window.oamEventHandlerToInputIds.push(element);
+		this._addEventHandlerForId(formElementId, connectToEventArr, eventHandler);
+}
+//combine 2 arrays ensuring that every element is only present once
+org.apache.myfaces.PPRCtrl.prototype._combineArrays = function (array1,array2) {
+	var retval = new Array();
+	for (var i = 0; i < array1.length; i++) {
+		retval.push(array1[i]);
+	}
+	for (var i = 0; i < array2.length; i++) {
+		if(!this._contains(retval,array2[i]))
+			retval.push(array2[i]);
+	}
+}
+
+org.apache.myfaces.PPRCtrl.prototype._contains = function (array,element) {
+	for (var i = 0; i < array.length; i++) {
+		if(array[i] == element)
+			return true;
+	}
+	return false;
+}
+
 org.apache.myfaces.PPRCtrl.prototype._addEventHandler = function (formElement, connectToEventArr, eventHandler) {
 
     if(!connectToEventArr || connectToEventArr.length==0) {
@@ -484,19 +520,6 @@
             retval = window.oamPartialTriggersToZoneIds[triggerId];
         }
 
-		for (refreshZoneId in window.oamZoneIdsToPartialTriggerPatterns)
-		{
-			if(this.isMatchingPattern(window.oamZoneIdsToPartialTriggerPatterns[refreshZoneId],triggerId) &&
-				typeof refreshZoneId == "string" )
-				if(retval == null || retval == "")
-				{
-					retval = refreshZoneId;
-				}
-				else
-				{
-					retval += "," + refreshZoneId;
-				}
-		}
 	return retval;
     }
     return null;