Author: abelevich
Date: 2007-11-22 10:49:48 -0500 (Thu, 22 Nov 2007)
New Revision: 4189
Modified:
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
Log:
change behavior of onitemchange,onenter, onleave events
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-22
15:32:14 UTC (rev 4188)
+++
trunk/ui/panelbar/src/main/java/org/richfaces/renderkit/html/PanelBarRendererBase.java 2007-11-22
15:49:48 UTC (rev 4189)
@@ -36,6 +36,7 @@
import org.ajax4jsf.javascript.AjaxScript;
import org.ajax4jsf.javascript.ImageCacheScript;
import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSReference;
import org.ajax4jsf.javascript.PrototypeScript;
import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
@@ -128,18 +129,38 @@
protected List getScriptPanelBarItems(FacesContext context,UIPanelBar panelBar){
List items = new ArrayList();
JSReference id_ref = new JSReference("id");
- JSReference onenter = new JSReference("onenter");
- JSReference onleave = new JSReference("onleave");
List children = panelBar.getChildren();
for (Iterator iterator = children.iterator(); iterator.hasNext();) {
UIComponent child = (UIComponent) iterator.next();
+
if(child instanceof UIPanelBarItem){
+
Map item = new HashMap();
UIPanelBarItem panelBarItem = (UIPanelBarItem) child;
item.put(id_ref, panelBarItem.getClientId(context));
- item.put(onenter, panelBarItem.getAttributes().get("onenter"));
- item.put(onleave, panelBarItem.getAttributes().get("onleave"));
+
+ Object enterScript = panelBarItem.getAttributes().get("onenter");
+ Object leaveScript = panelBarItem.getAttributes().get("onleave");
+
+ if (enterScript != null && !enterScript.equals("")) {
+ JSFunctionDefinition onenter = new JSFunctionDefinition();
+ onenter.addParameter("event");
+ onenter.addToBody(enterScript);
+ item.put("onenter", onenter);
+ } else {
+ item.put("onenter", "");
+ }
+
+ if (leaveScript != null && !leaveScript.equals("")) {
+ JSFunctionDefinition onleave = new JSFunctionDefinition();
+ onleave.addParameter("event");
+ onleave.addToBody(leaveScript);
+ item.put("onleave", onleave);
+ } else {
+ item.put("onleave", "");
+ }
+
items.add(item);
}
}
@@ -155,7 +176,19 @@
List items = getScriptPanelBarItems(context, panelBar);
ScriptOptions options = new ScriptOptions(component);
- options.addOption("onitemchange",panelBar.getAttributes().get("onitemchange"));
+
+
+ Object changeScript = panelBar.getAttributes().get("onitemchange");
+
+ if (changeScript != null && !changeScript.equals("")) {
+ JSFunctionDefinition function = new JSFunctionDefinition();
+ function.addParameter("event");
+ function.addToBody(changeScript);
+ options.addOption("onitemchange",function);
+ } else {
+ options.addOption("onitemchange","");
+ }
+
options.addOption("onclick",
panelBar.getAttributes().get("onclick"));
options.addOption("mouseouver",
panelBar.getAttributes().get("mouseouver"));
options.addOption("mouseout",
panelBar.getAttributes().get("mouseout"));
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-22
15:32:14 UTC (rev 4188)
+++
trunk/ui/panelbar/src/main/resources/org/richfaces/renderkit/html/scripts/panelbar.js 2007-11-22
15:49:48 UTC (rev 4189)
@@ -105,51 +105,6 @@
this.firstLoad = false;
},
- onItemChange: function(event,slide){
- var onitemchange = this.onitemchange;
- var changeEvent = event;
- var leaveItem_id = this.current.item.id;
- var enterItem_id = slide.item.id;
- var panel_id = this.panel.id;
-
- if (onitemchange && onitemchange != "") {
- var func = new
Function("event","panel_id","leaveItem_id","enterItem_id",onitemchange);
- var result = func(changeEvent,panel_id,leaveItem_id,enterItem_id);
- if (result != undefined && !result) {
- return;
- }
- }
-
- var items = this.items;
- var leaveItem;
- var enterItem;
-
- for (var i = 0; i < items.length; i++) {
- if (leaveItem_id == items[i].id) {
- leaveItem = items[i];
- }
- if (enterItem_id == items[i].id) {
- enterItem = items[i];
- }
- }
-
- if (leaveItem && leaveItem.onleave) {
- var func = new
Function("event","leaveItem_id","enterItem_id",leaveItem.onleave);
- var result = func(changeEvent,leaveItem_id,enterItem_id);
- if (result != undefined && !result) {
- return;
- }
- }
-
- if (enterItem && enterItem.onenter) {
- var func = new
Function("event","leaveItem_id","enterItem_id",enterItem.onenter);
- var result = func(changeEvent,leaveItem_id,enterItem_id);
- if (result != undefined && !result) {
- return;
- }
- }
- },
-
_attachBehaviors: function() {
var rows=this._getDirectChildrenByTag(this.panel,'DIV');
for(var i=0; i<rows.length; i++) {
@@ -178,8 +133,44 @@
if (this.slides[i].item.id==value) return i;
}
return 0;
- }
+ },
+
+ invokeEvent: function(eventName, event, value, element, eventFunction) {
+ var result;
+ if (eventFunction) {
+
+ var eventObj;
+ if (event)
+ {
+ eventObj = event;
+ }
+ else if( document.createEventObject )
+ {
+ eventObj = document.createEventObject();
+ }
+ else if( document.createEvent )
+ {
+ eventObj = document.createEvent('Events');
+ eventObj.initEvent( eventName, true, false );
+ }
+
+ eventObj.rich = {component:this};
+ eventObj.rich.value = value;
+
+ try
+ {
+ result = eventFunction.call(element, eventObj);
+ }
+ catch (e) { LOG.warn("Exception: "+e.Message + "\n[on"+eventName +
"]"); }
+
+ }
+
+ if (result!=false) result = true;
+
+ return result;
+ }
+
}
Richfaces.PanelBar.Slide = Class.create();
@@ -251,9 +242,28 @@
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);
+ var enterElement = this.item;
+ var leaveElement = this.slidePanel.current.item;
+ var enterItem = this.slidePanel.items[this.index];
+ var leaveItem;
+ var items = this.slidePanel.items;
+
+ for (var i = 0; i < items.length; i++) {
+ if (this.slidePanel.items[i].id == leaveElement.id) {
+ leaveItem = this.slidePanel.items[i];
+ }
+ }
+
+ var ret;
+ ret =
this.slidePanel.invokeEvent("enter",event,enterItem,enterElement,enterItem.onenter);
+ ret =
this.slidePanel.invokeEvent("leave",event,leaveItem,leaveElement,leaveItem.onleave);
+ ret =
this.slidePanel.invokeEvent("change",event,this.slidePanel,this.slidePanel.panel,this.slidePanel.onitemchange);
+
+ if (ret) {
+ this.slidePanel.showSlide(this);
+ }
+
this.slidePanel.panel.style.maxHeight="";
this.slidePanel.panel.style.minHeight="";
},