Author: abelevich
Date: 2007-11-08 14:51:52 -0500 (Thu, 08 Nov 2007)
New Revision: 3836
Modified:
trunk/ui/panelbar/src/main/config/component/panelbar.xml
trunk/ui/panelbar/src/main/java/org/richfaces/renderkit/html/PanelBarRendererBase.java
trunk/ui/panelbar/src/main/resources/org/richfaces/renderkit/html/scripts/panelbar.js
trunk/ui/panelbar/src/main/templates/panelBar.jspx
Log:
add panelbar onitemchange client event (in the context of the RF-256)
Modified: trunk/ui/panelbar/src/main/config/component/panelbar.xml
===================================================================
--- trunk/ui/panelbar/src/main/config/component/panelbar.xml 2007-11-08 19:49:02 UTC (rev
3835)
+++ trunk/ui/panelbar/src/main/config/component/panelbar.xml 2007-11-08 19:51:52 UTC (rev
3836)
@@ -111,12 +111,22 @@
<name>onclick</name>
<classname>java.lang.String</classname>
<description>JavaScript code for call before header
onclick</description>
+ <defaultvalue><![CDATA[""]]></defaultvalue>
</property>
<property>
<name>selectedPanel</name>
<classname>java.lang.Object</classname>
<description>Attribure defines name of selected item</description>
- </property>
+ </property>
+ <property>
+ <name>onitemchange</name>
+ <classname>java.lang.String</classname>
+ <description>
+ Event must occurs on than item has been changed
+ </description>
+ <defaultvalue><![CDATA[""]]></defaultvalue>
+ </property>
+
&ui_component_attributes;
&header_component_attributes;
Modified:
trunk/ui/panelbar/src/main/java/org/richfaces/renderkit/html/PanelBarRendererBase.java
===================================================================
---
trunk/ui/panelbar/src/main/java/org/richfaces/renderkit/html/PanelBarRendererBase.java 2007-11-08
19:49:02 UTC (rev 3835)
+++
trunk/ui/panelbar/src/main/java/org/richfaces/renderkit/html/PanelBarRendererBase.java 2007-11-08
19:51:52 UTC (rev 3836)
@@ -22,22 +22,29 @@
package org.richfaces.renderkit.html;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
import javax.faces.el.ValueBinding;
import org.ajax4jsf.javascript.AjaxScript;
import org.ajax4jsf.javascript.ImageCacheScript;
+import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.javascript.JSReference;
import org.ajax4jsf.javascript.PrototypeScript;
import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
+import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.ajax4jsf.resource.InternetResource;
import org.richfaces.component.UIPanelBar;
import org.richfaces.component.UIPanelBarItem;
import org.richfaces.event.SwitchablePanelSwitchEvent;
+import org.richfaces.renderkit.ScriptOptions;
public abstract class PanelBarRendererBase extends HeaderResourcesRendererBase {
@@ -118,4 +125,40 @@
}*/
}
+ protected List getPanelBarItems(FacesContext context,UIPanelBar panelBar){
+ List items = new ArrayList();
+ List children = panelBar.getChildren();
+ for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+ UIComponent child = (UIComponent) iterator.next();
+ if(child instanceof UIPanelBarItem){
+ items.add(((UIPanelBarItem)child).getClientId(context));
+ }
+ }
+
+ return items;
+ }
+
+ public void encodeScript(FacesContext context, UIComponent component) throws
IOException{
+
+ if(component instanceof UIPanelBar){
+ UIPanelBar panelBar = (UIPanelBar)component;
+
+ ScriptOptions options = new ScriptOptions(component);
+ options.addOption("onitemchange",panelBar.getAttributes().get("onitemchange"));
+ options.addOption("onclick",
panelBar.getAttributes().get("onclick"));
+
+ StringBuffer script = new StringBuffer();
+ JSFunction function = new JSFunction("new Richfaces.PanelBar");
+ function.addParameter(panelBar.getClientId(context));
+ function.addParameter(options);
+ function.appendScript(script);
+
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement(HTML.SCRIPT_ELEM, panelBar);
+ writer.writeAttribute(HTML.TYPE_ATTR, "text/javascript", null);
+ String outerScript = script.append(";").toString();
+ writer.write(outerScript);
+ writer.endElement(HTML.SCRIPT_ELEM);
+ }
+ }
}
Modified:
trunk/ui/panelbar/src/main/resources/org/richfaces/renderkit/html/scripts/panelbar.js
===================================================================
---
trunk/ui/panelbar/src/main/resources/org/richfaces/renderkit/html/scripts/panelbar.js 2007-11-08
19:49:02 UTC (rev 3835)
+++
trunk/ui/panelbar/src/main/resources/org/richfaces/renderkit/html/scripts/panelbar.js 2007-11-08
19:51:52 UTC (rev 3836)
@@ -5,12 +5,12 @@
Richfaces.PanelBar.prototype = {
- initialize: function(panelId, onclick) {
+ initialize: function(panelId, options) {
this.FF = (RichFaces.navigatorType() == RichFaces.FF)?true:false;
this.isIE = ((navigator.userAgent.toLowerCase().indexOf("msie")!=-1) ||
(navigator.userAgent.toLowerCase().indexOf("explorer")!=-1))?true:false;
this.panel=$(panelId); //+"_p"
-
+
if (!this.panel) {
return;
}
@@ -19,14 +19,15 @@
this.STEP=0;
this.slides=new Array();
this.ch=this.panel.clientHeight;
+ this.options = options;
- this.onclick = onclick;
+ this.onclick = options.onclick;
+ this.onitemchange = options.onitemchange;
this._attachBehaviors();
this.input=$(panelId+"_panelBarInput");
-
this.defaultIndex=this.findPanelById($F(panelId+"_panelBarInput"));
-
+
Event.observe(window,'load',this.handleOnLoad.bindAsEventListener(this));
this.showSlide(this.slides[this.defaultIndex]);
@@ -43,7 +44,6 @@
this.timer = setTimeout(this.handleOnLoad.bind(this), 100);
}
-
this.showSlide(this.slides[this.defaultIndex]);
},
@@ -71,6 +71,7 @@
},
showSlide: function(slide) {
+
if (this.current) this.current.hideContent();
var h=this.getContentHeight();
if (this.current) this.current.hideHeader();
@@ -82,10 +83,27 @@
}
slide.showContent();
this.current=slide;
+
+
// this.input.value=this.current.index;
this.input.value=this.current.item.id;
-
+ this.firstLoad = false;
},
+
+ onItemChange: function(event,slide){
+ var onitemchange = this.onitemchange;
+ var changeEvent = event;
+ if(onitemchange && onitemchange != ""){
+ var leftItem_id = this.current.item.id;
+ var enterItem_id = slide.item.id;
+ var panel_id = this.panel.id;
+ var func = new
Function("event","panel_id","leftItem_id","enterItem_id",onitemchange);
+ var result = func(changeEvent,panel_id,leftItem_id,enterItem_id);
+ if (result != undefined && !result) {
+ return;
+ }
+ }
+ },
_attachBehaviors: function() {
var rows=this._getDirectChildrenByTag(this.panel,'DIV');
@@ -176,7 +194,7 @@
this.header.style.display="";
},
- headerOnClick: function() {
+ headerOnClick: function(event) {
if (this.onclickFunction){
var result = this.onclickFunction();
if (result != undefined && !result) {
@@ -187,7 +205,9 @@
if (this.content.style.display=="block") return;
//this.header.style.display="none";
//this.header_act.style.display="";
+ this.slidePanel.onItemChange(event,this);
this.slidePanel.showSlide(this);
+
this.slidePanel.panel.style.maxHeight="";
this.slidePanel.panel.style.minHeight="";
},
Modified: trunk/ui/panelbar/src/main/templates/panelBar.jspx
===================================================================
--- trunk/ui/panelbar/src/main/templates/panelBar.jspx 2007-11-08 19:49:02 UTC (rev 3835)
+++ trunk/ui/panelbar/src/main/templates/panelBar.jspx 2007-11-08 19:51:52 UTC (rev 3836)
@@ -13,14 +13,16 @@
<h:styles>css/panelbar.xcss</h:styles>
<f:clientid var="clientId" />
+
<div id="#{clientId}" class="dr-pnlbar rich-panelbar dr-pnlbar-b
#{component.attributes['styleClass']}" style="padding: 0px;
#{this:height(context, component)} #{this:width(context, component)}
#{component.attributes['style']}">
<vcp:body>
- <f:call name="renderChildren" />
+ <f:call name="renderChildren"/>
</vcp:body>
+
<f:clientid var="clientId" />
<input type="hidden" name="#{clientId}"
id="#{clientId}_panelBarInput"
value="#{this:expanded(context, component)}"/>
- <script type="text/javascript">new
Richfaces.PanelBar("#{clientId}",
"#{component.attributes['onclick']}");</script>
+ <f:call name="encodeScript"/>
</div>
</f:root>