[richfaces-svn-commits] JBoss Rich Faces SVN: r1118 - in trunk/richfaces/tabPanel/src/main: java/org/richfaces/renderkit and 2 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Mon Jun 11 09:54:24 EDT 2007


Author: a.izobov
Date: 2007-06-11 09:54:23 -0400 (Mon, 11 Jun 2007)
New Revision: 1118

Modified:
   trunk/richfaces/tabPanel/src/main/config/component/tabPanel.xml
   trunk/richfaces/tabPanel/src/main/java/org/richfaces/renderkit/TabHeaderRendererBase.java
   trunk/richfaces/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java
   trunk/richfaces/tabPanel/src/main/resources/org/richfaces/renderkit/html/scripts/tabPanel.js
   trunk/richfaces/tabPanel/src/main/templates/tabPanel.jspx
Log:
http://jira.jboss.com/jira/browse/RF-49 fixed

Modified: trunk/richfaces/tabPanel/src/main/config/component/tabPanel.xml
===================================================================
--- trunk/richfaces/tabPanel/src/main/config/component/tabPanel.xml	2007-06-11 13:33:51 UTC (rev 1117)
+++ trunk/richfaces/tabPanel/src/main/config/component/tabPanel.xml	2007-06-11 13:54:23 UTC (rev 1118)
@@ -203,6 +203,22 @@
 	    	<name>active</name>
 	    	<classname>boolean</classname>
 	    </property>
+        <property>
+            <name>ontableave</name>
+            <classname>java.lang.String</classname>
+            <description>
+                Event must occurs on the tab which has been left 
+            </description>
+            <defaultvalue><![CDATA[""]]></defaultvalue>
+        </property>
+        <property>
+            <name>ontabenter</name>
+            <classname>java.lang.String</classname>
+            <description>
+                Event must occurs on the tab which has been entered 
+            </description>
+            <defaultvalue><![CDATA[""]]></defaultvalue>
+        </property>
   	</component>
 	<renderer generate="true">
 		<template>tabHeader.jspx</template>

Modified: trunk/richfaces/tabPanel/src/main/java/org/richfaces/renderkit/TabHeaderRendererBase.java
===================================================================
--- trunk/richfaces/tabPanel/src/main/java/org/richfaces/renderkit/TabHeaderRendererBase.java	2007-06-11 13:33:51 UTC (rev 1117)
+++ trunk/richfaces/tabPanel/src/main/java/org/richfaces/renderkit/TabHeaderRendererBase.java	2007-06-11 13:54:23 UTC (rev 1118)
@@ -69,10 +69,11 @@
 
         if (!disabled) {
             if (clientSide) {
-                writer.writeAttribute(HTML.onclick_ATTRIBUTE, "RichFaces.switchTab('" + pane.getClientId(context) + "','" + clientId + "','" + getUtils().formatValue(context, pane, tab.getName()) + "');", "switchScript");
+                writer.writeAttribute(HTML.onclick_ATTRIBUTE, "if (RichFaces.onTabChange('"+pane.getClientId(context)+"','"+clientId+"')) RichFaces.switchTab('" + pane.getClientId(context) + "','" + clientId + "','" + getUtils().formatValue(context, pane, tab.getName()) + "');", "switchScript");
             } else {
                 String activeCheck = "if (RichFaces.isTabActive('" + clientId + LABEL_SUFFIX + "')) return false;";
-
+                String eventCheck = " if (!RichFaces.onTabChange('"+pane.getClientId(context)+"','"+clientId+"')) return false;";
+                
                 if (ajax) {
                     JSFunction function = AjaxRendererUtils.buildAjaxFunction(tab,
                             context);
@@ -84,14 +85,14 @@
                     function.appendScript(buffer);
                     buffer.append("; return false; this.onclick = null;");
                     String script = buffer.toString();
-                    writer.writeAttribute(HTML.onclick_ATTRIBUTE, activeCheck + script, null);
+                    writer.writeAttribute(HTML.onclick_ATTRIBUTE, activeCheck + eventCheck +  script, null);
                 } else {
                     StringBuffer script = new StringBuffer("var _formName = A4J.findForm(this).id; var _paramName = '" + clientId + "_server_submit'; var _params = new Object(); _params[_paramName] = _paramName; _JSFFormSubmit('");
                     script.append(clientId);
                     script.append("', _formName, null, _params);");
                     script.append("this.onclick = null; _clearJSFFormParameters(_formName, null, [_paramName]);");
 
-                    writer.writeAttribute(HTML.onclick_ATTRIBUTE, activeCheck + script.toString()
+                    writer.writeAttribute(HTML.onclick_ATTRIBUTE, activeCheck + eventCheck + script.toString()
                             /* "RichFaces.submitTab(this,'"+clientId + "_inp" +"','"+pane.getClientId(context)+"');"*/, null);
                 }
             }

Modified: trunk/richfaces/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java
===================================================================
--- trunk/richfaces/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java	2007-06-11 13:33:51 UTC (rev 1117)
+++ trunk/richfaces/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java	2007-06-11 13:54:23 UTC (rev 1118)
@@ -109,7 +109,10 @@
         private final JSReference JSR_CELL_ACTIVE_CLASS = new JSReference("cellActiveClass");
         private final JSReference JSR_CELL_INACTIVE_CLASS = new JSReference("cellInactiveClass");
 
-
+        private final JSReference JSR_NAME = new JSReference("name");
+        private final JSReference JSR_ONTABLEAVE = new JSReference("ontableave");
+        private final JSReference JSR_ONTABENTER = new JSReference("ontabenter");
+        
         public Object collectTabInfo(FacesContext context, UITab tab) {
             Map info = new HashMap();
             info.put(JSR_ID, tab.getClientId(context));
@@ -119,6 +122,10 @@
             info.put(JSR_CELL_ACTIVE_CLASS, ACTIVE_CELL_CLASSES);
             info.put(JSR_CELL_INACTIVE_CLASS, INACTIVE_CELL_CLASSES);
 
+            info.put(JSR_NAME, tab.getName());
+            info.put(JSR_ONTABLEAVE, tab.getAttributes().get("ontableave"));
+            info.put(JSR_ONTABENTER, tab.getAttributes().get("ontabenter"));
+
             return info;
         }
     };

Modified: trunk/richfaces/tabPanel/src/main/resources/org/richfaces/renderkit/html/scripts/tabPanel.js
===================================================================
--- trunk/richfaces/tabPanel/src/main/resources/org/richfaces/renderkit/html/scripts/tabPanel.js	2007-06-11 13:33:51 UTC (rev 1117)
+++ trunk/richfaces/tabPanel/src/main/resources/org/richfaces/renderkit/html/scripts/tabPanel.js	2007-06-11 13:54:23 UTC (rev 1118)
@@ -135,3 +135,31 @@
 RichFaces._shouldHoverTab = function(tab) {
 	return (tab.className.indexOf('dr-tbpnl-tb-act') < 0);
 }
+
+RichFaces.onTabChange = function(pane,tab) {
+	var labelSuffix = "_lbl";
+	var tabs = RichFaces.panelTabs[pane];
+	var lastActive, newActive;
+	if (tabs) {
+		for( var i=0; i<tabs.length; i++){
+			if (lastActive && newActive) break;
+			var tabId = tabs[i].id;
+			if (tabId == tab) 
+				newActive = tabs[i];
+			if (RichFaces.isTabActive(tabId +labelSuffix)) 
+				lastActive = tabs[i];
+		}	
+	}
+	if (lastActive && newActive) {
+		if (lastActive.ontableave && lastActive.ontableave != "") {
+			var func = new Function("leftTabName","enteredTabName",lastActive.ontableave);
+			if (!func(lastActive.name,newActive.name)) return false;
+		}
+		if (newActive.ontabenter && newActive.ontabenter != "") {
+			var func = new Function("leftTabName","enteredTabName",newActive.ontabenter);
+			return func(lastActive.name,newActive.name);
+		}
+	}
+	return true;
+}
+

Modified: trunk/richfaces/tabPanel/src/main/templates/tabPanel.jspx
===================================================================
--- trunk/richfaces/tabPanel/src/main/templates/tabPanel.jspx	2007-06-11 13:33:51 UTC (rev 1117)
+++ trunk/richfaces/tabPanel/src/main/templates/tabPanel.jspx	2007-06-11 13:54:23 UTC (rev 1118)
@@ -45,15 +45,15 @@
 							<f:call name="encodeTabs" />
 						</tr>
 					</table>
-					<c:if test="#{clientSide}">
-						<div style="display: none;">
+					<div style="display: none;">
+						<c:if test="#{clientSide}">
 							<input type="hidden"
 							id="#{clientId}_input" 
 							name="#{clientId}"
 							value="#{this:getValueAsString(context, component)}" /> 
-							<f:call	name="encodeTabsScript" />
-						</div>
-					</c:if> 
+						</c:if> 
+						<f:call	name="encodeTabsScript" />
+					</div>
 					<f:call name="utils.encodeEndFormIfNessesary" />
 				</td>
 			</tr>




More information about the richfaces-svn-commits mailing list