Author: abelevich
Date: 2007-11-21 10:09:43 -0500 (Wed, 21 Nov 2007)
New Revision: 4137
Modified:
trunk/ui/simpleTogglePanel/src/main/java/org/richfaces/renderkit/html/SimpleTogglePanelRenderer.java
trunk/ui/simpleTogglePanel/src/main/resources/org/richfaces/renderkit/html/scripts/simpleTogglePanel.js
trunk/ui/simpleTogglePanel/src/main/templates/simpleTogglePanel.jspx
Log:
improve onexpand oncollapse events creation
Modified:
trunk/ui/simpleTogglePanel/src/main/java/org/richfaces/renderkit/html/SimpleTogglePanelRenderer.java
===================================================================
---
trunk/ui/simpleTogglePanel/src/main/java/org/richfaces/renderkit/html/SimpleTogglePanelRenderer.java 2007-11-21
14:31:23 UTC (rev 4136)
+++
trunk/ui/simpleTogglePanel/src/main/java/org/richfaces/renderkit/html/SimpleTogglePanelRenderer.java 2007-11-21
15:09:43 UTC (rev 4137)
@@ -26,6 +26,7 @@
import org.ajax4jsf.component.AjaxSupport;
import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.javascript.JSReference;
import org.ajax4jsf.renderkit.AjaxRendererUtils;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
@@ -35,6 +36,7 @@
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
import javax.faces.event.ActionEvent;
import javax.faces.event.PhaseId;
import java.io.IOException;
@@ -63,6 +65,20 @@
return true;
}
+ public void writeEventHandlerFunction(FacesContext context,
+ UIComponent component, String eventName) throws IOException {
+
+ ResponseWriter writer = context.getResponseWriter();
+ Object script = component.getAttributes().get(eventName);
+ if (script != null && !script.equals("")) {
+ JSFunctionDefinition onEventDefinition = new JSFunctionDefinition();
+ onEventDefinition.addParameter("event");
+ onEventDefinition.addToBody(script);
+ writer.writeText(eventName + ": "
+ + onEventDefinition.toScript(), null);
+ }
+ }
+
public void doDecode(FacesContext context, UIComponent component) {
super.doDecode(context, component);
Modified:
trunk/ui/simpleTogglePanel/src/main/resources/org/richfaces/renderkit/html/scripts/simpleTogglePanel.js
===================================================================
---
trunk/ui/simpleTogglePanel/src/main/resources/org/richfaces/renderkit/html/scripts/simpleTogglePanel.js 2007-11-21
14:31:23 UTC (rev 4136)
+++
trunk/ui/simpleTogglePanel/src/main/resources/org/richfaces/renderkit/html/scripts/simpleTogglePanel.js 2007-11-21
15:09:43 UTC (rev 4137)
@@ -12,18 +12,7 @@
if (!this.status) {
this.status="true";
}
-
- var onexpand = this.options.onexpand;
- var oncollapse = this.options.oncollapse
-
- if (oncollapse) {
- this.onCollapseEvent = new
Function("event",oncollapse).bindAsEventListener(this);
- }
-
- if (onexpand) {
- this.onExpandEvent = new
Function("event",onexpand).bindAsEventListener(this);
- }
-
+
// this.timer = setTimeout(this.windowOnLoad.bind(this), 100);
},
@@ -46,29 +35,68 @@
var switch_on = $(this.panelId+"_switch_on");
var switch_off = $(this.panelId+"_switch_off");
if (this.status=="false"){
- Element.show(body);
- this.status="true";
- this.onExpandEvent(event);
- switch_off.style.display="none";
- switch_on.style.display="";
+ if (this.invokeEvent("expand",event,this.status,body)) {
+ Element.show(body);
+ this.status="true";
+ switch_off.style.display="none";
+ switch_on.style.display="";
+ }
// this.timer = setTimeout(this.windowOnLoad.bind(this), 100);
// body.firstChild.style.width=body.clientWidth;
- } else {
- Element.hide(body);
+ } else if (this.invokeEvent("collapse",event,this.status,body)) {
+ Element.hide(body);
body.firstChild.style.width="100%";
this.status="false";
- this.onCollapseEvent(event);
- switch_on.style.display="none";
+ switch_on.style.display="none";
switch_off.style.display="";
-
- }
+ }
+
if (RichFaces.navigatorType() == RichFaces.MSIE){
/* if ($(this.panelId_head).clientWidth<$(this.panelId).clientWidth){
$(this.panelId_head).style.width=$(this.panelId).clientWidth-2+"px";
}*/
}
$(this.panelId+"_input").value=this.status;
- }
+ },
+
+ invokeEvent: function(eventName, event, value, element) {
+
+ var eventFunction = this.options['on'+eventName];
+ 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;
+ }
}
SimpleTogglePanelManager = Class.create();
@@ -92,20 +120,17 @@
fInput.name = clientId;
parentForm.appendChild(fInput);
}
-
- if (this.panels[clientId].status == "true"){
+
+ if (this.panels[clientId].status == "true") {
+ if (this.panels[clientId].invokeEvent("collapse",event,fInput.value,fInput))
{
this.panels[clientId].status="false";
- if(this.panels[clientId].options.oncollapse){
- this.panels[clientId].onCollapseEvent(event);
- }
-
-
- } else {
+ }
+
+ } else {
+ if (this.panels[clientId].invokeEvent("expand",event,fInput.value,fInput)) {
this.panels[clientId].status="true";
- if(this.panels[clientId].options.onexpand){
- this.panels[clientId].onExpandEvent(event);
- }
}
+ }
fInput.value = this.panels[clientId].status;
parentForm.submit();
@@ -120,11 +145,11 @@
SimpleTogglePanelManager.toggleOnAjax = function(event,panelId) {
if (this.panels[panelId].status == "true") {
if(this.panels[panelId].options.oncollapse){
- this.panels[panelId].onCollapseEvent(event);
+ //this.panels[panelId].onCollapseEvent(event);
}
} else {
if (this.panels[panelId].options.onexpand) {
- this.panels[panelId].onExpandEvent(event);
+ //this.panels[panelId].onExpandEvent(event);
}
}
}
Modified: trunk/ui/simpleTogglePanel/src/main/templates/simpleTogglePanel.jspx
===================================================================
--- trunk/ui/simpleTogglePanel/src/main/templates/simpleTogglePanel.jspx 2007-11-21
14:31:23 UTC (rev 4136)
+++ trunk/ui/simpleTogglePanel/src/main/templates/simpleTogglePanel.jspx 2007-11-21
15:09:43 UTC (rev 4137)
@@ -25,7 +25,13 @@
style="width: #{component.attributes['width']};
#{component.attributes['style']};">
<script type="text/javascript">
- SimpleTogglePanelManager.add(new SimpleTogglePanel("#{clientId}",
"#{component.attributes['opened']}", {onexpand:
"#{component.attributes['onexpand']}",oncollapse:
"#{component.attributes['oncollapse']}"}));
+ SimpleTogglePanelManager.add(new SimpleTogglePanel("#{clientId}",
+ "#{component.attributes['opened']}",{
+ <f:call
name="writeEventHandlerFunction"><f:parameter value="onexpand"
/></f:call>,
+ <f:call
name="writeEventHandlerFunction"><f:parameter value="oncollapse"
/></f:call>
+ }
+
+ ));
</script>
<f:call name="utils.encodeBeginFormIfNessesary"/>