Author: abelevich
Date: 2007-11-06 12:12:40 -0500 (Tue, 06 Nov 2007)
New Revision: 3801
Added:
trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelInfoCollector.java
Modified:
trunk/ui/tabPanel/src/main/config/component/tabPanel.xml
trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java
trunk/ui/tabPanel/src/main/resources/org/richfaces/renderkit/html/scripts/tabPanel.js
trunk/ui/tabPanel/src/main/templates/tabPanel.jspx
Log:
add ontabchange event to the tabPanel component in the context of RF-262
Modified: trunk/ui/tabPanel/src/main/config/component/tabPanel.xml
===================================================================
--- trunk/ui/tabPanel/src/main/config/component/tabPanel.xml 2007-11-06 17:11:12 UTC (rev
3800)
+++ trunk/ui/tabPanel/src/main/config/component/tabPanel.xml 2007-11-06 17:12:40 UTC (rev
3801)
@@ -135,6 +135,15 @@
<classname>java.lang.Object</classname>
<description></description>
</property>
+
+ <property>
+ <name>ontabchange</name>
+ <classname>java.lang.String</classname>
+ <description>
+ Event must occurs on than tab has been changed
+ </description>
+ <defaultvalue><![CDATA[""]]></defaultvalue>
+ </property>
&html_attributes;
&html_events;
@@ -230,7 +239,7 @@
</description>
<defaultvalue><![CDATA[""]]></defaultvalue>
</property>
-
+
<property>
<name>onlabelkeypress</name>
<classname>java.lang.String</classname>
Added: trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelInfoCollector.java
===================================================================
--- trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelInfoCollector.java
(rev 0)
+++
trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelInfoCollector.java 2007-11-06
17:12:40 UTC (rev 3801)
@@ -0,0 +1,11 @@
+package org.richfaces.renderkit;
+
+import javax.faces.context.FacesContext;
+
+import org.richfaces.component.UITabPanel;
+
+public interface TabPanelInfoCollector {
+
+ public Object collectTabPanelInfo(FacesContext context, UITabPanel tabPanel);
+
+}
Modified:
trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java
===================================================================
---
trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java 2007-11-06
17:11:12 UTC (rev 3800)
+++
trunk/ui/tabPanel/src/main/java/org/richfaces/renderkit/TabPanelRendererBase.java 2007-11-06
17:12:40 UTC (rev 3801)
@@ -136,7 +136,22 @@
}
};
- /**
+ private static final TabPanelInfoCollector panelInfoCollector = new
TabPanelInfoCollector(){
+
+ private final JSReference JSR_ONTABCHANGE = new
JSReference("ontabchange");
+ private final JSReference JSR_ID = new JSReference("id");
+
+ public Object collectTabPanelInfo(FacesContext context, UITabPanel tabPanel) {
+ Map info = new HashMap();
+ info.put(JSR_ONTABCHANGE,
tabPanel.getAttributes().get("ontabchange"));
+ info.put(JSR_ID, tabPanel.getClientId(context));
+
+ return info;
+ }
+
+ };
+
+ /**
* @param context
* @param component
* @return
@@ -274,6 +289,15 @@
}
}
+
+ protected void preEncodeBegin(FacesContext context, UIComponent component) throws
IOException {
+ if(component instanceof UITabPanel){
+ UITabPanel tabPanel = (UITabPanel)component;
+ ComponentVariables componentVariables =
ComponentsVariableResolver.getVariables(this, tabPanel);
+ componentVariables.setVariable("tabPanel",
getTabPanelInfoCollector().collectTabPanelInfo(context, (UITabPanel)component));
+ }
+ }
+
public void encodeTabs(FacesContext context, UITabPanel tabPanel) throws IOException
{
ComponentVariables componentVariables =
ComponentsVariableResolver.getVariables(this, tabPanel);
@@ -382,11 +406,21 @@
// TODO - create tab control function.
getUtils().writeScript(context, pane, "RichFaces.panelTabs['" +
pane.getClientId(context) + "']=" + ScriptUtils.toScript(tabs) +
";");
}
+
+ public void encodeTabPanelScript(FacesContext context, UITabPanel pane) throws
IOException {
+ ComponentVariables variables = ComponentsVariableResolver.getVariables(this,
pane);
+ Object tabPanel = variables.getVariable("tabPanel");
+ getUtils().writeScript(context, pane, "RichFaces.tabPanel['" +
pane.getClientId(context) + "']=" + ScriptUtils.toScript(tabPanel) +
";");
+ }
protected TabInfoCollector getTabInfoCollector() {
return collector;
}
+ protected TabPanelInfoCollector getTabPanelInfoCollector(){
+ return panelInfoCollector;
+ }
+
public String encodeHeaderSpacing(FacesContext context, UITabPanel pane) throws
IOException {
String headerSpacing = pane.getHeaderSpacing();
Double decoded = HtmlDimensions.decode(headerSpacing);
Modified:
trunk/ui/tabPanel/src/main/resources/org/richfaces/renderkit/html/scripts/tabPanel.js
===================================================================
---
trunk/ui/tabPanel/src/main/resources/org/richfaces/renderkit/html/scripts/tabPanel.js 2007-11-06
17:11:12 UTC (rev 3800)
+++
trunk/ui/tabPanel/src/main/resources/org/richfaces/renderkit/html/scripts/tabPanel.js 2007-11-06
17:12:40 UTC (rev 3801)
@@ -3,6 +3,7 @@
var RichFaces_FF_Loaded = (RichFaces.navigatorType() == RichFaces.FF);
RichFaces.panelTabs={};
+RichFaces.tabPanel={};
RichFaces.createImage =
function (src) {
@@ -171,6 +172,15 @@
var result = func(event, lastActive.name,newActive.name);
if (typeof(result) == 'boolean' && !result) return false;
}
+
+ var tabPanel = RichFaces.tabPanel[pane];
+
+ if (tabPanel.ontabchange && tabPanel.ontabchange != "") {
+ var func = new
Function("event","leftTabName","enteredTabName",tabPanel.ontabchange);
+ var result = func(event, lastActive.name,newActive.name);
+ if (typeof(result) == 'boolean' && !result) return false;
+ }
+
}
return true;
}
Modified: trunk/ui/tabPanel/src/main/templates/tabPanel.jspx
===================================================================
--- trunk/ui/tabPanel/src/main/templates/tabPanel.jspx 2007-11-06 17:11:12 UTC (rev 3800)
+++ trunk/ui/tabPanel/src/main/templates/tabPanel.jspx 2007-11-06 17:12:40 UTC (rev 3801)
@@ -23,7 +23,9 @@
<f:clientid var="clientId" />
<f:resource name="images/spacer.gif" var="spacer" />
-
+
+ <f:call name="encodeTabPanelScript"/>
+
<table border="0" cellpadding="0" cellspacing="0"
id="#{clientId}"
class="rich-tabpanel #{component.attributes['styleClass']}"
style="#{this:encodeStyles(context, component)}">
Show replies by date