JBoss Rich Faces SVN: r4137 - in trunk/ui/simpleTogglePanel/src/main: resources/org/richfaces/renderkit/html/scripts and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
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"/>
18 years, 5 months
JBoss Rich Faces SVN: r4136 - in branches/3.1.x/test-applications/facelets/src/main: webapp/RichPanels/Panel and 4 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: viktor_volkov
Date: 2007-11-21 09:31:23 -0500 (Wed, 21 Nov 2007)
New Revision: 4136
Added:
branches/3.1.x/test-applications/facelets/src/main/java/richPanels/MapComponent.java
Modified:
branches/3.1.x/test-applications/facelets/src/main/java/richPanels/RichPanelsBean.java
branches/3.1.x/test-applications/facelets/src/main/webapp/RichPanels/Panel/Panel.xhtml
branches/3.1.x/test-applications/facelets/src/main/webapp/WEB-INF/faces-config.xml
branches/3.1.x/test-applications/facelets/src/main/webapp/pages/RichPanels/RichPanels.xhtml
branches/3.1.x/test-applications/facelets/src/main/webapp/pages/RichPanelsMenu/RichPanelsMenu.xhtml
branches/3.1.x/test-applications/facelets/src/main/webapp/pages/main.xhtml
Log:
Refactoring RichPanels application
Added: branches/3.1.x/test-applications/facelets/src/main/java/richPanels/MapComponent.java
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/java/richPanels/MapComponent.java (rev 0)
+++ branches/3.1.x/test-applications/facelets/src/main/java/richPanels/MapComponent.java 2007-11-21 14:31:23 UTC (rev 4136)
@@ -0,0 +1,21 @@
+package richPanels;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+public class MapComponent {
+ private Map<String, ArrayList<String>> m;
+
+ public MapComponent() {
+ m = new HashMap<String, ArrayList<String>>();
+ }
+
+ public void add(String component, ArrayList<String> path) {
+ m.put(component, path);
+ }
+
+ public ArrayList<String> get(String key){
+ return m.get(key);
+ }
+}
Modified: branches/3.1.x/test-applications/facelets/src/main/java/richPanels/RichPanelsBean.java
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/java/richPanels/RichPanelsBean.java 2007-11-21 13:54:42 UTC (rev 4135)
+++ branches/3.1.x/test-applications/facelets/src/main/java/richPanels/RichPanelsBean.java 2007-11-21 14:31:23 UTC (rev 4136)
@@ -1,17 +1,75 @@
package richPanels;
+import java.util.ArrayList;
+
public class RichPanelsBean {
private String src;
-
+ private MapComponent map;
+
public RichPanelsBean() {
- src = "/RichPanels/Panel/Panel.xhtml";
+ src = "Blank";
+ map = new MapComponent();
+ // map.add( value, add( pages_path/name_pages, array<boolean>(Property, Straightforward) );
+ map.add("Blank", add("/pages/Blank/Blank", new boolean [] {true, true}));
+ map.add("Calendar", add("/Calendar/Calendar", new boolean [] {true, true}));
+ map.add("DataFilterSlider", add("/DataFilterSlider/DataFilterSlider", new boolean [] {true, false}));
+ map.add("DataScroller", add("/DataScroller/DataScroller", new boolean [] {true, true}));
+ map.add("DataTable", add("/DataTable/DataTable", new boolean [] {true, true}));
+ map.add("DragAndDrop", add("/DragAndDrop/DragAndDrop", new boolean [] {false, false}));
+ map.add("DropDownMenu", add("/DropDownMenu/DropDownMenu", new boolean [] {true, true}));
+ map.add("Effect", add("/Effect/Effect", new boolean [] {false, false}));
+ map.add("Gmap", add("/Gmap/Gmap", new boolean [] {true, false}));
+ map.add("InputNumberSlider", add("/InputNumberSlider/InputNumberSlider", new boolean [] {true, true}));
+ map.add("InputNumberSpinner", add("/InputNumberSpinner/InputNumberSpinner", new boolean [] {true, true}));
+ map.add("Insert", add("/Insert/Insert", new boolean [] {true, false}));
+ map.add("Message", add("/Message/Message", new boolean [] {true, true}));
+ map.add("ModalPanel", add("/RichPanels/ModalPanel/ModalPanel", new boolean [] {false, false}));
+ map.add("Paint2D", add("/Paint2D/Paint2D", new boolean [] {true, true}));
+ map.add("Panel", add("/RichPanels/Panel/Panel", new boolean [] {false, false}));
+ map.add("Panel2", add("/Panel/Panel2", new boolean [] {false, false}));
+ map.add("PanelBar", add("/RichPanels/PanelBar/PanelBar", new boolean [] {false, false}));
+ map.add("PanelMenu", add("/PanelMenu/PanelMenu", new boolean [] {true, true}));
+ map.add("Separator", add("/Separator/Separator", new boolean [] {true, true}));
+ map.add("SimpleTogglePanel", add("/RichPanels/SimpleTogglePanel/SimpleTogglePanel", new boolean [] {false, false}));
+ map.add("Spacer", add("/Spacer/Spacer", new boolean [] {true, true}));
+ map.add("SuggestionBox", add("/SuggestionBox/SuggestionBox", new boolean [] {true, true}));
+ map.add("TabPanel", add("/RichPanels/TabPanel/TabPanel", new boolean [] {false, false}));
+ map.add("TogglePanel", add("/RichPanels/TogglePanel/TogglePanel", new boolean [] {false, false}));
+ map.add("ToolBar", add("/ToolBar/ToolBar", new boolean [] {true, false}));
+ map.add("Tooltip", add("/Tooltip/Tooltip", new boolean [] {true, true}));
+ map.add("Tree", add("/Tree/Tree", new boolean [] {true, false}));
+ map.add("VirtualEarth", add("/VirtualEarth/VirtualEarth", new boolean [] {true, true}));
+ map.add("ScrollableDataTable", add("/ScrollableDataTable/ScrollableDataTable", new boolean [] {true, false}));
+ map.add("jQuery", add("/jQuery/jQuery", new boolean [] {false, false}));
+ map.add("OrderingList", add("/OrderingList/OrderingList", new boolean [] {true, false}));
}
public String getSrc() {
return src;
}
+ public String getPathComponent() {
+ return map.get(src).get(0);
+ }
+
+ public String getPathProperty() {
+ return map.get(src).get(1);
+ }
+
+ public String getPathStraightforward() {
+ return map.get(src).get(2);
+ }
+
public void setSrc(String src) {
this.src = src;
}
+
+ private ArrayList<String> add(String path, boolean [] arr){
+ ArrayList<String> list = new ArrayList<String>();
+ list.add(path + ".xhtml");
+ if(arr[0]) list.add(path + "Property.xhtml"); else list.add("/pages/Blank/BlankProperty.xhtml");
+ if(arr[1]) list.add(path + "Straightforward.xhtml"); else list.add("/pages/Blank/BlankStraightforward.xhtml");
+ return list;
+ }
}
+
Modified: branches/3.1.x/test-applications/facelets/src/main/webapp/RichPanels/Panel/Panel.xhtml
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/webapp/RichPanels/Panel/Panel.xhtml 2007-11-21 13:54:42 UTC (rev 4135)
+++ branches/3.1.x/test-applications/facelets/src/main/webapp/RichPanels/Panel/Panel.xhtml 2007-11-21 14:31:23 UTC (rev 4136)
@@ -1,20 +1,11 @@
-<h:form xmlns:rich="http://richfaces.org/rich"
+<f:subview id="PanelsModalPanelSubviewID" xmlns:rich="http://richfaces.org/rich"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
-
- <rich:panel rendered="true" id="Panel"
- style="width:500px;height:700px;overflow:auto;">
- <f:facet name="header">
- <h:outputText value="rich:panel"></h:outputText>
- </f:facet>
- <ui:include src="/Panel/Panel.xhtml" />
- </rich:panel>
-
- <rich:spacer width="10" height="50"></rich:spacer>
-
+<h:messages showDetail="true"></h:messages>
+
<rich:panel rendered="true" id="Calendar"
style="width:900px;height:850px;overflow:auto;">
<f:facet name="header">
@@ -40,7 +31,7 @@
<f:facet name="header">
<h:outputText value="rich:datascroller"></h:outputText>
</f:facet>
- <ui:include src="/DataScroller/DS.xhtml" />
+ <ui:include src="/DataScroller/DataScroller.xhtml" />
</rich:panel>
<rich:spacer width="10" height="50"></rich:spacer>
@@ -50,7 +41,7 @@
<f:facet name="header">
<h:outputText value="rich:dataTable"></h:outputText>
</f:facet>
- <ui:include src="/DataTable/DT.xhtml" />
+ <ui:include src="/DataTable/DataTable.xhtml" />
</rich:panel>
<rich:spacer width="10" height="50"></rich:spacer>
@@ -70,7 +61,7 @@
<f:facet name="header">
<h:outputText value="rich:dropDownMenu"></h:outputText>
</f:facet>
- <ui:include src="/DropDownMenu/DDMenu.xhtml" />
+ <ui:include src="/DropDownMenu/DropDownMenu.xhtml" />
</rich:panel>
<rich:spacer width="10" height="50"></rich:spacer>
@@ -100,7 +91,7 @@
<f:facet name="header">
<h:outputText value="rich:inputNumberSlider"></h:outputText>
</f:facet>
- <ui:include src="/inputNumberSlider/inputNumberSlider.xhtml" />
+ <ui:include src="/InputNumberSlider/InputNumberSlider.xhtml" />
</rich:panel>
<rich:spacer width="10" height="50"></rich:spacer>
@@ -110,7 +101,7 @@
<f:facet name="header">
<h:outputText value="rich:inputNumberSpinner"></h:outputText>
</f:facet>
- <ui:include src="/inputNumberSpinner/inputNumberSpinner.xhtml" />
+ <ui:include src="/InputNumberSpinner/InputNumberSpinner.xhtml" />
</rich:panel>
<rich:spacer width="10" height="50"></rich:spacer>
@@ -293,6 +284,6 @@
<ui:include src="/VirtualEarth/VirtualEarth.xhtml" />
</rich:panel>
-</h:form>
+</f:subview>
Modified: branches/3.1.x/test-applications/facelets/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/webapp/WEB-INF/faces-config.xml 2007-11-21 13:54:42 UTC (rev 4135)
+++ branches/3.1.x/test-applications/facelets/src/main/webapp/WEB-INF/faces-config.xml 2007-11-21 14:31:23 UTC (rev 4136)
@@ -133,6 +133,10 @@
<to-view-id>/CustomizePage/CustomizePage.xhtml</to-view-id>
</navigation-case>
<navigation-case>
+ <from-outcome>RichPanels</from-outcome>
+ <to-view-id>/pages/RichPanels/RichPanels.xhtml</to-view-id>
+ </navigation-case>
+ <navigation-case>
<from-outcome>jQuery</from-outcome>
<to-view-id>/jQuery/jQuery.xhtml</to-view-id>
</navigation-case>
Modified: branches/3.1.x/test-applications/facelets/src/main/webapp/pages/RichPanels/RichPanels.xhtml
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/webapp/pages/RichPanels/RichPanels.xhtml 2007-11-21 13:54:42 UTC (rev 4135)
+++ branches/3.1.x/test-applications/facelets/src/main/webapp/pages/RichPanels/RichPanels.xhtml 2007-11-21 14:31:23 UTC (rev 4136)
@@ -8,6 +8,23 @@
<f:view>
<head>
<title></title>
+
+ <script type="text/javascript">
+ function print(elementID, value) {
+ var oldObject = window.document.getElementById(elementID);
+ var newObject = window.document.createElement('input');
+ newObject.type = "text";
+ newObject.size = oldObject.size;
+ newObject.value = value;
+ newObject.id = oldObject.id;
+ //if(oldObject.size) newObject.size = oldObject.size;
+ //if(oldObject.value) newObject.value = value;
+ //if(oldObject.id) newObject.id = oldObject.id;
+ //if(oldObject.name) newObject.name = oldObject.name;
+ //if(oldObject.className) newObject.className = oldObject.className;
+ oldObject.parentNode.replaceChild(newObject,oldObject);
+ }
+ </script>
<link rel="stylesheet"
href="#{facesContext.externalContext.requestContextPath}/styles/styles.css"
type="text/css" />
@@ -16,13 +33,23 @@
<div id="divOpthID" align="right" style="z-index: 200">
<ui:include src="/pages/RichPanelsMenu/RichPanelsMenu.xhtml"/>
</div>
-
- <ui:include src="${richPanelsBean.src}" />
+ <h:form>
+ <ui:include src="${richPanelsBean.pathComponent}" />
+ <ui:include src="${richPanelsBean.pathStraightforward}" />
+ <ui:include src="${richPanelsBean.pathProperty}" />
+ </h:form>
+ <rich:modalPanel id="eventInfoID" autosize="true" minHeight="550" minWidth="200" moveable="true" resizeable="true" style="overflow: true;">
+ <f:facet name="header">
+ <h:outputText value="Events ..." />
+ </f:facet>
+ <f:facet name="controls">
+ <h:graphicImage value="/pics/error.gif" onclick="Richfaces.hideModalPanel('eventInfoID');"/>
+ </f:facet>
+
+ <ui:include src="/pages/Action/EventInfo.xhtml" />
+
+ </rich:modalPanel>
+ <a4j:commandButton value="Show event" onclick="Richfaces.showModalPanel('eventInfoID');return false;"></a4j:commandButton>
</body>
</f:view>
-</html>
-
-
-
-
-
+</html>
\ No newline at end of file
Modified: branches/3.1.x/test-applications/facelets/src/main/webapp/pages/RichPanelsMenu/RichPanelsMenu.xhtml
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/webapp/pages/RichPanelsMenu/RichPanelsMenu.xhtml 2007-11-21 13:54:42 UTC (rev 4135)
+++ branches/3.1.x/test-applications/facelets/src/main/webapp/pages/RichPanelsMenu/RichPanelsMenu.xhtml 2007-11-21 14:31:23 UTC (rev 4136)
@@ -1,23 +1,30 @@
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:f="http://java.sun.com/jsf/core"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:rich="http://richfaces.org/rich">
+<h:form id="forvDivOpthID" xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j">
+ <rich:toolBar itemSeparator="none" >
+ <rich:toolBarGroup location="right">
+ <h:panelGrid columns="1">
+ <h:outputText value="Select skin: " />
+ <h:selectOneMenu binding="#{skinBean.component}" onblur="submit();">
+ <a4j:support action="#{skinBean.change}" event="onchange"/>
+ </h:selectOneMenu>
+ </h:panelGrid>
+ </rich:toolBarGroup>
-<h:form id="forvDivOpthID2">
- <h:panelGrid columns="2">
- <h:selectOneMenu binding="#{skinBean.component}"></h:selectOneMenu>
- <h:commandLink action="#{skinBean.change}" value="set skin" />
-
- <h:outputText value="Select component:" />
- <h:selectOneMenu value="#{richPanelsBean.src}" onchange="submit();">
- <f:selectItem itemValue="/RichPanels/Panel/Panel.xhtml" itemLabel="Panel" />
- <f:selectItem itemValue="/RichPanels/ModalPanel/ModalPanel.xhtml" itemLabel="Modal Panel" />
- <f:selectItem itemValue="/RichPanels/PanelBar/PanelBar.xhtml" itemLabel="Panel Bar" />
- <f:selectItem itemValue="/RichPanels/SimpleTogglePanel/SimpleTogglePanel.xhtml" itemLabel="Simple Toggle Panel" />
- <f:selectItem itemValue="/RichPanels/TogglePanel/TogglePanel.xhtml" itemLabel="Toggle Panel" />
- <f:selectItem itemValue="/RichPanels/TabPanel/TabPanel.xhtml" itemLabel="Tab Panel" />
- </h:selectOneMenu>
- </h:panelGrid>
+ <rich:toolBarGroup location="right">
+ <h:panelGrid columns="1">
+ <h:outputText value="Select component:" />
+ <h:selectOneMenu value="#{richPanelsBean.src}" onchange="submit();">
+ <f:selectItem itemValue="Blank" itemLabel="Blank" />
+ <f:selectItem itemValue="ModalPanel" itemLabel="Modal Panel" />
+ <f:selectItem itemValue="Panel" itemLabel="Panel" />
+ <f:selectItem itemValue="PanelBar" itemLabel="Panel Bar" />
+ <f:selectItem itemValue="SimpleTogglePanel" itemLabel="Simple Toggle Panel" />
+ <f:selectItem itemValue="TabPanel" itemLabel="Tab Panel" />
+ <f:selectItem itemValue="TogglePanel" itemLabel="Toggle Panel" />
+ </h:selectOneMenu>
+ </h:panelGrid>
+ </rich:toolBarGroup>
+ </rich:toolBar>
<h:commandLink value="Back" action="main"></h:commandLink>
</h:form>
-</html>
\ No newline at end of file
+
Modified: branches/3.1.x/test-applications/facelets/src/main/webapp/pages/main.xhtml
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/webapp/pages/main.xhtml 2007-11-21 13:54:42 UTC (rev 4135)
+++ branches/3.1.x/test-applications/facelets/src/main/webapp/pages/main.xhtml 2007-11-21 14:31:23 UTC (rev 4136)
@@ -20,6 +20,7 @@
<h:commandLink value="Div" action="TestDiv"></h:commandLink>
<h:commandLink value="Select" action="Map"></h:commandLink>
<h:commandLink value="Customize page" action="CustomizePage"></h:commandLink>
+ <h:commandLink value="RichPanels" action="RichPanels"></h:commandLink>
</h:panelGrid>
</rich:panel>
<rich:spacer></rich:spacer>
18 years, 5 months
JBoss Rich Faces SVN: r4135 - in trunk/ui/calendar/src/main: java/org/richfaces/component and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: akushunin
Date: 2007-11-21 08:54:42 -0500 (Wed, 21 Nov 2007)
New Revision: 4135
Modified:
trunk/ui/calendar/src/main/config/component/calendar.xml
trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
trunk/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js
trunk/ui/calendar/src/main/templates/org/richfaces/htmlCalendar.jspx
Log:
RF-1391
Modified: trunk/ui/calendar/src/main/config/component/calendar.xml
===================================================================
--- trunk/ui/calendar/src/main/config/component/calendar.xml 2007-11-21 13:35:25 UTC (rev 4134)
+++ trunk/ui/calendar/src/main/config/component/calendar.xml 2007-11-21 13:54:42 UTC (rev 4135)
@@ -492,8 +492,39 @@
<description>
Should be binded to some JS function that returns day state.
</description>
- </property>
-
+ </property>
+ <property>
+ <name>showWeeksDayBar</name>
+ <classname>boolean</classname>
+ <description>
+ If false this bar should not be shown
+ </description>
+ <defaultvalue>true</defaultvalue>
+ </property>
+ <property>
+ <name>showWeeksBar</name>
+ <classname>boolean</classname>
+ <description>
+ If false this bar should not be shown
+ </description>
+ <defaultvalue>true</defaultvalue>
+ </property>
+ <property>
+ <name>showScrollerBar</name>
+ <classname>boolean</classname>
+ <description>
+ If false this bar should not be shown
+ </description>
+ <defaultvalue>true</defaultvalue>
+ </property>
+ <property>
+ <name>showToday</name>
+ <classname>boolean</classname>
+ <description>
+ If false this bar should not be shown
+ </description>
+ <defaultvalue>true</defaultvalue>
+ </property>
</component>
&listeners;
</components>
Modified: trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
===================================================================
--- trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java 2007-11-21 13:35:25 UTC (rev 4134)
+++ trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java 2007-11-21 13:54:42 UTC (rev 4135)
@@ -178,7 +178,23 @@
public abstract String getCellWidth();
public abstract void setCellWidth(String cellWidth);
-
+
+ public abstract boolean isShowWeeksDaysBar();
+
+ public abstract void setShowWeeksDaysBar(boolean showWeekDaysBar);
+
+ public abstract boolean isShowWeeksBar();
+
+ public abstract void setShowWeeksBar(boolean showWeeksBar);
+
+ public abstract boolean isShowScrollerBar();
+
+ public abstract void setShowScrollerBar(boolean showScrollerBar);
+
+ public abstract boolean isShowToday();
+
+ public abstract void setShowToday(boolean showToday);
+
// TODO onclick add users onclick
// currentDate processing -------------------------------------------------
Modified: trunk/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js
===================================================================
--- trunk/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js 2007-11-21 13:35:25 UTC (rev 4134)
+++ trunk/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js 2007-11-21 13:54:42 UTC (rev 4135)
@@ -432,8 +432,8 @@
this.id = id;
this.params = parameters;
- if (!this.params.showWeekDaysBar) this.params.showWeekDaysBar = true;
- if (!this.params.showWeeksBar) this.params.showWeeksBar = true;
+ if (this.params.showWeekDaysBar==undefined) this.params.showWeekDaysBar = true;
+ if (this.params.showWeeksBar==undefined) this.params.showWeeksBar = true;
if (!this.params.datePattern) this.params.datePattern = "MMM d, y";
// markups initialization
Modified: trunk/ui/calendar/src/main/templates/org/richfaces/htmlCalendar.jspx
===================================================================
--- trunk/ui/calendar/src/main/templates/org/richfaces/htmlCalendar.jspx 2007-11-21 13:35:25 UTC (rev 4134)
+++ trunk/ui/calendar/src/main/templates/org/richfaces/htmlCalendar.jspx 2007-11-21 13:54:42 UTC (rev 4135)
@@ -149,10 +149,15 @@
horizontalOffset: #{component.horizontalOffset},
style:'z-index: #{component.attributes["zindex"]}; #{component.attributes["style"]}',
firstWeekDay: #{this:getFirstWeekDay(context, component)},
- minDaysInFirstWeek: #{this:getMinDaysInFirstWeek(context, component)}
+ minDaysInFirstWeek: #{this:getMinDaysInFirstWeek(context, component)},
+ showToday:#{component.attributes['showToday']},
+ showScrollerBar:#{component.attributes['showScrollerBar']},
+ showWeeksBar:#{component.attributes['showWeeksBar']},
+ showWeeksDayBar:#{component.attributes['showWeeksDayBar']}
+
<f:call name="writeClass"/>
<f:call name="writeDayCellClass"/>
<f:call name="writeDayStyleClass"/>
18 years, 5 months
JBoss Rich Faces SVN: r4134 - in trunk/ui/dataFilterSlider/src/main: java/org/richfaces/component and 3 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2007-11-21 08:35:25 -0500 (Wed, 21 Nov 2007)
New Revision: 4134
Modified:
trunk/ui/dataFilterSlider/src/main/config/component/dataFilterSlider.xml
trunk/ui/dataFilterSlider/src/main/java/org/richfaces/component/UIDataFltrSlider.java
trunk/ui/dataFilterSlider/src/main/java/org/richfaces/renderkit/DataFilterSliderRendererBase.java
trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculous-js-1.6.5/src/slider.js
trunk/ui/dataFilterSlider/src/main/templates/dataFilterSlider.jspx
Log:
add onslide, onchange client events, add onSlideSubmit attribute (in the context of RF-256)
Modified: trunk/ui/dataFilterSlider/src/main/config/component/dataFilterSlider.xml
===================================================================
--- trunk/ui/dataFilterSlider/src/main/config/component/dataFilterSlider.xml 2007-11-21 12:26:40 UTC (rev 4133)
+++ trunk/ui/dataFilterSlider/src/main/config/component/dataFilterSlider.xml 2007-11-21 13:35:25 UTC (rev 4134)
@@ -157,23 +157,33 @@
MethodBinding representing an action listener method that will be notified after changing of slider control position
</description>
</property>
+
<property>
- <name>onSlide</name>
- <classname>boolean</classname>
+ <name>onslide</name>
+ <classname>java.lang.String</classname>
<description>
- If the slider value changes must submit a form, onSlide or OnChange can be true
+ Event occur on sliding
</description>
- <defaultvalue>true</defaultvalue>
+ <defaultvalue><![CDATA[""]]></defaultvalue>
</property>
+
<property>
- <name>onChange</name>
- <classname>boolean</classname>
+ <name>onchange</name>
+ <classname>java.lang.String</classname>
<description>
- If the slider value changes must submit a form, onSlide or OnChange can be true
+ Event occur on chage
</description>
- <defaultvalue>true</defaultvalue>
+ <defaultvalue><![CDATA[""]]></defaultvalue>
</property>
+
<property>
+ <name>onSlideSubmit</name>
+ <classname>boolean</classname>
+ <description>If the slider value changes must submit a form, onSlideSubmit can be true</description>
+ <defaultvalue>true</defaultvalue>
+ </property>
+
+ <property>
<name>storeResults</name>
<classname>boolean</classname>
<description>
Modified: trunk/ui/dataFilterSlider/src/main/java/org/richfaces/component/UIDataFltrSlider.java
===================================================================
--- trunk/ui/dataFilterSlider/src/main/java/org/richfaces/component/UIDataFltrSlider.java 2007-11-21 12:26:40 UTC (rev 4133)
+++ trunk/ui/dataFilterSlider/src/main/java/org/richfaces/component/UIDataFltrSlider.java 2007-11-21 13:35:25 UTC (rev 4134)
@@ -248,14 +248,10 @@
public abstract void setTrackStyleClass(String trackStyleClass);
- public abstract boolean isOnSlide();
-
- public abstract void setOnSlide(boolean onSlide);
-
- public abstract boolean isOnChange();
-
- public abstract void setOnChange(boolean onChange);
-
+ public abstract boolean isOnSlideSubmit();
+
+ public abstract void setOnSlideSubmit(boolean value);
+
public abstract boolean isStoreResults();
public abstract void setStoreResults(boolean storeResults);
Modified: trunk/ui/dataFilterSlider/src/main/java/org/richfaces/renderkit/DataFilterSliderRendererBase.java
===================================================================
--- trunk/ui/dataFilterSlider/src/main/java/org/richfaces/renderkit/DataFilterSliderRendererBase.java 2007-11-21 12:26:40 UTC (rev 4133)
+++ trunk/ui/dataFilterSlider/src/main/java/org/richfaces/renderkit/DataFilterSliderRendererBase.java 2007-11-21 13:35:25 UTC (rev 4134)
@@ -21,9 +21,8 @@
package org.richfaces.renderkit;
-import org.ajax4jsf.util.SelectUtils;
-import org.richfaces.component.UIDataFltrSlider;
-import org.richfaces.event.DataFilterSliderEvent;
+import java.io.IOException;
+import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.component.UIForm;
@@ -31,9 +30,14 @@
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.convert.ConverterException;
-import java.io.IOException;
-import java.util.Map;
+import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.javascript.JSFunctionDefinition;
+import org.ajax4jsf.javascript.JSReference;
+import org.ajax4jsf.util.SelectUtils;
+import org.richfaces.component.UIDataFltrSlider;
+import org.richfaces.event.DataFilterSliderEvent;
+
/**
* @author Wesley Hales
*/
@@ -50,32 +54,64 @@
public Map getRequestMap() {
return FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
}
+
+ public String getEventHandlerFunction(UIDataFltrSlider slider,String eventName){
+
+ String returnScript = null;
+ Object script = (String) slider.getAttributes().get(eventName);
+ if(script != null && !script.equals("")){
+ JSFunctionDefinition jsFunctionDefinition = new JSFunctionDefinition();
+ jsFunctionDefinition.addParameter("event");
+ jsFunctionDefinition.addToBody(script);
+ returnScript = jsFunctionDefinition.toScript();
+ }
+
+ return returnScript;
+ }
public String renderSliderJs1(FacesContext context, UIDataFltrSlider slider) throws IOException {
-
- String clientId = slider.getClientId(context);
-
- String sliderScript = "var dataFilterSlider = new Control.Slider('"+ clientId +"slider-handle', '"+ clientId +"slider-track', {\n" +
- "range: $R(" + slider.getStartRange() + "," + slider.getEndRange() + "),\n" +
- "values: [" + slider.getSliderRange() + "],\n" +
- "startSpan: '"+ clientId +"slider-trailer',\n" +
- "sliderValue:$('"+ clientId +"slider_val').value";
-
- if (slider.isOnSlide()) {
- sliderScript = sliderScript +
- ",\nonSlide: function(v) { updateSlider1(v);}";
+
+ StringBuffer script = new StringBuffer();
+ String clientId = slider.getClientId(context);
+ script.append("var dataFilterSlider = ");
+ script.append("new ");
+
+ StringBuffer options = new StringBuffer();
+ options.append("{");
+ options.append("range: $R(" + slider.getStartRange() + "," + slider.getEndRange() + ")");
+ options.append(",values: [" + slider.getSliderRange() + "]");
+ options.append(",startSpan: '"+ clientId +"slider-trailer'");
+ options.append(",sliderInputId: '" + clientId + "slider_val'");
+ options.append(",sliderValue:$('"+ clientId +"slider_val').value");
+
+ String onslide = getEventHandlerFunction(slider, "onslide");
+ if(onslide != null){
+ options.append(", onslide: " + onslide);
+ }
+
+ String onchange = getEventHandlerFunction(slider, "onchange");
+ if(onchange != null){
+ options.append(", onchange: " + onchange);
+ }
+
+ if(slider.isOnSlideSubmit()){
+ options.append(",onSlideSubmit: function(v) { updateSlider1(v);}");
}
+ options.append("}");
+
+ JSReference reference = new JSReference(options.toString());
+
+ JSFunction function = new JSFunction("Control.Slider");
+ function.addParameter(clientId + "slider-handle");
+ function.addParameter(clientId + "slider-track");
+ function.addParameter(reference);
+ function.appendScript(script);
+ script.append(";");
+
+ return script.toString();
+ }
+
- if (slider.isOnChange()) {
- sliderScript = sliderScript +
- ",\nonChange: function(v) { updateSlider1(v);}\n";
- }
-
- sliderScript = sliderScript + " });\n";
-
- return sliderScript;
- }
-
public String renderSliderJs2(FacesContext context, UIDataFltrSlider slider) throws IOException {
String clientId = slider.getClientId(context);
Modified: trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculous-js-1.6.5/src/slider.js
===================================================================
--- trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculous-js-1.6.5/src/slider.js 2007-11-21 12:26:40 UTC (rev 4133)
+++ trunk/ui/dataFilterSlider/src/main/resources/org/richfaces/renderkit/html/scripts/scriptaculous-js-1.6.5/src/slider.js 2007-11-21 13:35:25 UTC (rev 4134)
@@ -37,6 +37,7 @@
this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
this.options.startSpan = $(this.options.startSpan || null);
this.options.endSpan = $(this.options.endSpan || null);
+ this.sliderInput = $(this.options.sliderInputId);
this.restricted = this.options.restricted || false;
@@ -74,6 +75,7 @@
this.handles[0].style.visibility="hidden";
setTimeout(this.initHandles.bind(this), 100);
this.initialized = true;
+
},
initHandles: function() {
this.handleLength = this.isVertical() ?
@@ -256,7 +258,8 @@
update: function(event) {
if(this.active) {
if(!this.dragging) this.dragging = true;
- this.draw(event);
+ this.draw(event);
+
// fix AppleWebKit rendering
if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
Event.stop(event);
@@ -268,18 +271,19 @@
pointer[0] -= this.offsetX + offsets[0];
pointer[1] -= this.offsetY + offsets[1];
this.event = event;
- this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+ var value = this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] );
+ if(this.invokeEvent("slide",event,value,this.sliderInput)){
+ this.setValue(value);
+ }
if(this.initialized) {
- if (this.options.onSlide) {
- this.options.onSlide(this.values.length>1 ? this.values : this.values[0], this);
- } else if (this.options.onChange) {
- this.options.onChange(this.values.length>1 ? this.values : this.values[0], this);
- }
+ if (this.options.onSlideSubmit) {
+ this.options.onSlideSubmit(this.values.length>1 ? this.values : this.values[0], this);
+ }
}
},
endDrag: function(event) {
if(this.active && this.dragging) {
- this.finishDrag(event, true);
+ this.finishDrag(event, true);
Event.stop(event);
}
this.active = false;
@@ -288,16 +292,63 @@
finishDrag: function(event, success) {
this.active = false;
this.dragging = false;
- this.updateFinished();
+
+ this.updateFinished(event);
},
updateFinished: function() {
if(this.initialized) {
- if (this.options.onSlide) {
- this.options.onSlide(this.values.length>1 ? this.values : this.values[0], this);
- } else if (this.options.onChange) {
- this.options.onChange(this.values.length>1 ? this.values : this.values[0], this);
+ var value = this.values.length>1 ? this.values : this.values[0];
+ if (this.options.onSlideSubmit) {
+ this.options.onSlideSubmit(value, this);
+ }
+ }
+
+ this.event = null;
+ },
+
+ valueChanged: function(event,value){
+ if(this.invokeEvent("change",event,value,this.sliderInput)){
+ this.setValue(value);
+ }
+ },
+
+ 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;
}
- this.event = null;
- }
+
}
\ No newline at end of file
Modified: trunk/ui/dataFilterSlider/src/main/templates/dataFilterSlider.jspx
===================================================================
--- trunk/ui/dataFilterSlider/src/main/templates/dataFilterSlider.jspx 2007-11-21 12:26:40 UTC (rev 4133)
+++ trunk/ui/dataFilterSlider/src/main/templates/dataFilterSlider.jspx 2007-11-21 13:35:25 UTC (rev 4134)
@@ -63,7 +63,7 @@
]]>
</jsp:scriptlet>
- <input type="text" onchange="dataFilterSlider.setValue(this.value);" class="slider-input-field #{component.fieldStyleClass}" name="#{clientId}slider_val" id="#{clientId}slider_val" value="#{component.handleValue}"/>
+ <input type="text" onchange="dataFilterSlider.valueChanged(event,this.value);" class="slider-input-field #{component.fieldStyleClass}" name="#{clientId}slider_val" id="#{clientId}slider_val" value="#{component.handleValue}"/>
<jsp:scriptlet>
<![CDATA[
18 years, 5 months
JBoss Rich Faces SVN: r4133 - in trunk/framework/impl/src: main/java/org/ajax4jsf/css and 3 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: andrei_exadel
Date: 2007-11-21 07:26:40 -0500 (Wed, 21 Nov 2007)
New Revision: 4133
Added:
trunk/framework/impl/src/main/java/org/ajax4jsf/css/
trunk/framework/impl/src/main/java/org/ajax4jsf/css/CssCompressor.java
trunk/framework/impl/src/main/java/org/ajax4jsf/resource/CountingOutputWriter.java
trunk/framework/impl/src/test/java/org/ajax4jsf/css/
trunk/framework/impl/src/test/java/org/ajax4jsf/css/CssCompressorTest.java
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/resource/TemplateCSSRenderer.java
Log:
Css compressor
Added: trunk/framework/impl/src/main/java/org/ajax4jsf/css/CssCompressor.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/css/CssCompressor.java (rev 0)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/css/CssCompressor.java 2007-11-21 12:26:40 UTC (rev 4133)
@@ -0,0 +1,152 @@
+/*
+ * YUI Compressor
+ * Author: Julien Lecomte <jlecomte(a)yahoo-inc.com>
+ * Copyright (c) 2007, Yahoo! Inc. All rights reserved.
+ * Code licensed under the BSD License:
+ * http://developer.yahoo.net/yui/license.txt
+ *
+ * This code is a port of Isaac Schlueter's cssmin utility.
+ */
+
+package org.ajax4jsf.css;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class CssCompressor {
+
+ private StringBuffer srcsb = null;
+
+ public CssCompressor(StringBuffer buffer) throws IOException {
+ srcsb = buffer;
+ }
+
+ public void compress(Writer out, int linebreakpos)
+ throws IOException {
+
+ Pattern p;
+ Matcher m;
+ String css;
+ StringBuffer sb;
+ int startIndex, endIndex;
+
+ // Remove all comment blocks...
+ sb = new StringBuffer(srcsb.toString());
+ while ((startIndex = sb.indexOf("/*")) >= 0) {
+ endIndex = sb.indexOf("*/", startIndex + 2);
+ if (endIndex >= startIndex + 2)
+ sb.delete(startIndex, endIndex + 2);
+ }
+
+ css = sb.toString();
+
+ // Normalize all whitespace strings to single spaces. Easier to work with that way.
+ css = css.replaceAll("\\s+", " ");
+
+ // Remove the spaces before the things that should not have spaces before them.
+ // But, be careful not to turn "p :link {...}" into "p:link{...}"
+ // Swap out any pseudo-class colons with the token, and then swap back.
+ sb = new StringBuffer();
+ p = Pattern.compile("(^|\\})(([^\\{:])+:)+([^\\{]*\\{)");
+ m = p.matcher(css);
+ while (m.find()) {
+ String s = m.group();
+ s = s.replaceAll(":", "___PSEUDOCLASSCOLON___");
+ m.appendReplacement(sb, s);
+ }
+ m.appendTail(sb);
+ css = sb.toString();
+ css = css.replaceAll("\\s+([!{};:>+\\(\\)\\],])", "$1");
+ css = css.replaceAll("___PSEUDOCLASSCOLON___", ":");
+
+ // Remove the spaces after the things that should not have spaces after them.
+ css = css.replaceAll("([!{}:;>+\\(\\[,])\\s+", "$1");
+
+ // Add the semicolon where it's missing.
+ css = css.replaceAll("([^;\\}])}", "$1;}");
+
+ // Replace 0(px,em,%) with 0.
+ css = css.replaceAll("([\\s:])(0)(px|em|%|in|cm|mm|pc|pt|ex)", "$1$2");
+
+ // Replace 0 0 0 0; with 0.
+ css = css.replaceAll(":0 0 0 0;", ":0;");
+ css = css.replaceAll(":0 0 0;", ":0;");
+ css = css.replaceAll(":0 0;", ":0;");
+ // Replace background-position:0; with background-position:0 0;
+ css = css.replaceAll("background-position:0;", "background-position:0 0;");
+
+ // Replace 0.6 to .6, but only when preceded by : or a white-space
+ css = css.replaceAll("(:|\\s)0+\\.(\\d+)", "$1.$2");
+
+ // Shorten colors from rgb(51,102,153) to #336699
+ // This makes it more likely that it'll get further compressed in the next step.
+ p = Pattern.compile("rgb\\s*\\(\\s*([0-9,\\s]+)\\s*\\)");
+ m = p.matcher(css);
+ sb = new StringBuffer();
+ while (m.find()) {
+ String[] rgbcolors = m.group(1).split(",");
+ StringBuffer hexcolor = new StringBuffer("#");
+ for (int i = 0; i < rgbcolors.length; i++) {
+ int val = Integer.parseInt(rgbcolors[i]);
+ if (val < 16) {
+ hexcolor.append("0");
+ }
+ hexcolor.append(Integer.toHexString(val));
+ }
+ m.appendReplacement(sb, hexcolor.toString());
+ }
+ m.appendTail(sb);
+ css = sb.toString();
+
+ // Shorten colors from #AABBCC to #ABC. Note that we want to make sure
+ // the color is not preceded by either ", " or =. Indeed, the property
+ // filter: chroma(color="#FFFFFF");
+ // would become
+ // filter: chroma(color="#FFF");
+ // which makes the filter break in IE.
+ p = Pattern.compile("([^\"'=\\s])(\\s*)#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])");
+ m = p.matcher(css);
+ sb = new StringBuffer();
+ while (m.find()) {
+ // Test for AABBCC pattern
+ if (m.group(3).equalsIgnoreCase(m.group(4)) &&
+ m.group(5).equalsIgnoreCase(m.group(6)) &&
+ m.group(7).equalsIgnoreCase(m.group(8))) {
+ m.appendReplacement(sb, m.group(1) + m.group(2) + "#" + m.group(3) + m.group(5) + m.group(7));
+ } else {
+ m.appendReplacement(sb, m.group());
+ }
+ }
+ m.appendTail(sb);
+ css = sb.toString();
+
+ // Remove empty rules.
+ css = css.replaceAll("[^\\}]+\\{;\\}", "");
+
+ if (linebreakpos >= 0) {
+ // Some source control tools don't like it when files containing lines longer
+ // than, say 8000 characters, are checked in. The linebreak option is used in
+ // that case to split long lines after a specific column.
+ int i = 0;
+ int linestartpos = 0;
+ sb = new StringBuffer(css);
+ while (i < sb.length()) {
+ char c = sb.charAt(i++);
+ if (c == '}' && i - linestartpos > linebreakpos) {
+ sb.insert(i, '\n');
+ linestartpos = i;
+ }
+ }
+
+ css = sb.toString();
+ }
+
+ // Trim the final string (for any leading or trailing white spaces)
+ css = css.trim();
+
+ // Write the output...
+ out.write(css);
+ }
+}
Added: trunk/framework/impl/src/main/java/org/ajax4jsf/resource/CountingOutputWriter.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/resource/CountingOutputWriter.java (rev 0)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/resource/CountingOutputWriter.java 2007-11-21 12:26:40 UTC (rev 4133)
@@ -0,0 +1,110 @@
+/*
+ * CountingOutputWriter.java Date created: 21.11.2007
+ * Last modified by: $Author$
+ * $Revision$ $Date$
+ */
+
+package org.ajax4jsf.resource;
+
+import java.io.IOException;
+import java.io.Writer;
+
+/**
+ * Class provides custom writer implementation with counting of bytes written
+ * Is using for replacement of css component writer
+ * @author Andrey Markavtsov
+ */
+public class CountingOutputWriter extends Writer {
+
+ /** count of written bytes */
+ private int written = 0;
+
+ /** Size of char type */
+ private static final int sizeOfChar = 2;
+
+ /** Size of int type */
+ private static final int sizeOfInt = 4;
+
+ /** Buffer to store bytes written */
+ private StringBuffer buffer;
+
+ /**
+ * Default constructor
+ */
+ public CountingOutputWriter() {
+ super();
+ this.buffer = new StringBuffer();
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.Writer#close()
+ */
+ public void close() throws IOException {
+ ;
+ }
+
+ /* (non-Javadoc)
+ * @see java.io.Writer#flush()
+ */
+ public void flush() throws IOException {
+ ;
+ }
+
+ /** Methods appends chars written to buffer
+ * @param cbuf - chars to be written
+ * @param off - offset
+ * @param len - length of bytes
+ */
+ public void write(char[] cbuf, int off, int len) throws IOException {
+ buffer.append(cbuf, off, len);
+ written += len * sizeOfChar;
+ }
+
+ /** Methods appends chars written to buffer
+ * @param cbuf - chars to be written
+ */
+ public void write(char[] cbuf) throws IOException {
+ buffer.append(cbuf);
+ written += cbuf.length * sizeOfChar;
+ }
+
+ /** Methods appends int written to buffer
+ * @param c - int to be written
+ */
+ public void write(int c) throws IOException {
+ buffer.append(c);
+ written += sizeOfInt;
+ }
+
+ /** Methods appends string written to buffer
+ * @param str - string to be written
+ * @param off - offset
+ * @param len - length of bytes
+ */
+ public void write(String str, int off, int len) throws IOException {
+ buffer.append(str, off, len);
+ written += len * sizeOfChar;
+ }
+
+ /** Methods appends string written to buffer
+ * @param str - string to be written
+ */
+ public void write(String str) throws IOException {
+ buffer.append(str);
+ written += str.length() * sizeOfChar;
+ }
+
+ /** Methods gets written bytes count
+ * @return written count of bytes
+ */
+ public int getWritten() {
+ return written;
+ }
+
+ /** Methods gets content of written bytes
+ * @return buffer
+ */
+ public StringBuffer getContent () {
+ return buffer;
+ }
+}
\ No newline at end of file
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/resource/TemplateCSSRenderer.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/resource/TemplateCSSRenderer.java 2007-11-21 12:20:42 UTC (rev 4132)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/resource/TemplateCSSRenderer.java 2007-11-21 12:26:40 UTC (rev 4133)
@@ -23,6 +23,7 @@
import java.io.IOException;
import java.io.InputStream;
+import java.io.Writer;
import java.nio.ByteBuffer;
import javax.faces.FacesException;
@@ -33,12 +34,11 @@
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
+import org.ajax4jsf.css.CssCompressor;
import org.ajax4jsf.renderkit.RendererBase;
import org.ajax4jsf.renderkit.compiler.HtmlCompiler;
import org.ajax4jsf.renderkit.compiler.PreparedTemplate;
import org.ajax4jsf.renderkit.compiler.TemplateContext;
-import org.ajax4jsf.resource.InternetResource;
-import org.ajax4jsf.resource.ResourceContext;
import org.richfaces.skin.SkinFactory;
/**
@@ -62,6 +62,7 @@
*/
public int send(InternetResource base, ResourceContext context) throws IOException {
PreparedTemplate template = null;
+ CountingOutputWriter countingOutputWriter = new CountingOutputWriter();
template = getTemplate(base, context);
FacesContext facesContext = FacesContext.getCurrentInstance();
if(null != facesContext) {
@@ -73,19 +74,29 @@
RenderKitFactory renderKitFactory = (RenderKitFactory) FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
RenderKit renderKit = renderKitFactory.getRenderKit(facesContext,defaultRenderKitId);
// TODO - handle response encoding
- ResponseWriter responseWriter = renderKit.createResponseWriter(context.getWriter(),null,"UTF-8");
+
+ ResponseWriter responseWriter = renderKit.createResponseWriter(countingOutputWriter,null,"UTF-8");
facesContext.setResponseWriter(responseWriter);
responseWriter.startDocument();
+
// TODO - parameters and mock renderer/component ?
// for first time, this template only allow skin or faces variables interaction
template.encode(renderer,facesContext,null);
responseWriter.endDocument();
responseWriter.flush();
responseWriter.close();
+
+ // Compressing css document and printing result in response stream
+ CssCompressor compressor = new CssCompressor(countingOutputWriter.getContent());
+ Writer writer = context.getWriter();
+ compressor.compress(writer, -1);
+ writer.flush();
+ writer.close();
+
} else {
throw new FacesException("FacesContext for resource from template "+base.getKey()+" is null");
}
- return 0;
+ return countingOutputWriter.getWritten();
}
/**
Added: trunk/framework/impl/src/test/java/org/ajax4jsf/css/CssCompressorTest.java
===================================================================
--- trunk/framework/impl/src/test/java/org/ajax4jsf/css/CssCompressorTest.java (rev 0)
+++ trunk/framework/impl/src/test/java/org/ajax4jsf/css/CssCompressorTest.java 2007-11-21 12:26:40 UTC (rev 4133)
@@ -0,0 +1,87 @@
+/*
+ * CssCompressorTest.java Date created: 21.11.2007
+ * Last modified by: $Author$
+ * $Revision$ $Date$
+ */
+
+package org.ajax4jsf.css;
+
+import java.io.IOException;
+
+import junit.framework.TestCase;
+
+import org.ajax4jsf.resource.CountingOutputWriter;
+
+/**
+ * Test case for css compressing process
+ * @author Andrey Markavtsov
+ *
+ */
+public class CssCompressorTest extends TestCase {
+
+ /** Length of correctly compressed css example */
+ private static final int lengthCompressed = 610;
+
+ /** css example to be comressed */
+ private static final String cssExample =
+ "HTML { \n"+
+ "MARGIN-BOTTOM: 0.01em; HEIGHT: 100%; BACKGROUND-COLOR: #ffffff;\n" +
+ "}\n" +
+ "TD {\n" +
+ "FONT-SIZE: 10px; COLOR: #000000; FONT-FAMILY: verdana, arial\n" +
+ "}\n" +
+ "TH {\n" +
+ "FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #336699; FONT-FAMILY: verdana, arial; BACKGROUND-COLOR: #ffffff; text-align:left;\n" +
+ "}\n" +
+ ".header {\n" +
+ "FONT-WEIGHT: bold; FONT-SIZE: 11px; COLOR: #000000; FONT-FAMILY: verdana, arial\n" +
+ "}\n";
+
+ /**
+ * Constructor
+ * @param name
+ */
+ public CssCompressorTest(String name) {
+ super(name);
+ // TODO Auto-generated constructor stub
+ }
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ @Override
+ protected void setUp() throws Exception {
+ // TODO Auto-generated method stub
+ super.setUp();
+ }
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#tearDown()
+ */
+ @Override
+ protected void tearDown() throws Exception {
+ // TODO Auto-generated method stub
+ super.tearDown();
+ }
+
+
+ /**
+ * Test method
+ * @throws IOException
+ */
+ public void testCssCompressor () throws IOException {
+
+ StringBuffer cssBuffer = new StringBuffer(cssExample);
+ CssCompressor compressor = new CssCompressor(cssBuffer);
+ CountingOutputWriter writer = new CountingOutputWriter();
+ compressor.compress(writer, -1);
+
+ // compressed length should equal
+ assertEquals(writer.getWritten(), lengthCompressed);
+
+ }
+
+
+
+
+}
18 years, 5 months
JBoss Rich Faces SVN: r4132 - in branches/3.1.x/ui/orderingList/src/main: resources/org/richfaces/renderkit/html/scripts and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: vmolotkov
Date: 2007-11-21 07:20:42 -0500 (Wed, 21 Nov 2007)
New Revision: 4132
Modified:
branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/css/orderingList.xcss
branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js
branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ShuttleUtils.js
branches/3.1.x/ui/orderingList/src/main/templates/org/richfaces/htmlOrderingList.jspx
Log:
bug:RF-1377
Modified: branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/css/orderingList.xcss
===================================================================
--- branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/css/orderingList.xcss 2007-11-21 08:58:51 UTC (rev 4131)
+++ branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/css/orderingList.xcss 2007-11-21 12:20:42 UTC (rev 4132)
@@ -130,9 +130,13 @@
display: none;
}
-.body {
- -moz-user-select: none;
+.disableSelection {
+ -moz-user-select: -moz-none;
}
+
+.disableSelection input {
+ -moz-user-select: text;
+}
]]>
</f:verbatim>
Modified: branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js
===================================================================
--- branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js 2007-11-21 08:58:51 UTC (rev 4131)
+++ branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js 2007-11-21 12:20:42 UTC (rev 4132)
@@ -1,3 +1,13 @@
+if(!window.Richfaces) window.Richfaces = {};
+Richfaces.disableSelectionText = function(target) {
+ target.onselectstart = function(e) {
+ e = window.event||e;
+ if (e.srcElement.tagName != "INPUT")
+ return false;
+ }
+
+}
+
Shuttle = function(containerId, contentTableId, headerTableId, focusKeeperId, valueKeeperId,
ids, onclickControlId, onorderchanged) {
this.container = document.getElementById(containerId);
@@ -30,6 +40,7 @@
obj.onkeydownHandler(window.event || e);
}
this.init(containerId, contentTableId, headerTableId, ids, onclickControlId);
+ Richfaces.disableSelectionText(this.container);
}
Shuttle.ASC = "acs";
@@ -243,6 +254,8 @@
this.selectionItem(activeElem);
this.activeItem = activeElem;
}
+
+
Richfaces.SelectItems.doActive(this.activeItem);
this.saveState();
this.controlListManager();
Modified: branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ShuttleUtils.js
===================================================================
--- branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ShuttleUtils.js 2007-11-21 08:58:51 UTC (rev 4131)
+++ branches/3.1.x/ui/orderingList/src/main/resources/org/richfaces/renderkit/html/scripts/ShuttleUtils.js 2007-11-21 12:20:42 UTC (rev 4132)
@@ -31,4 +31,5 @@
} else {
this.splice(index, 1);
}
-}
\ No newline at end of file
+}
+
Modified: branches/3.1.x/ui/orderingList/src/main/templates/org/richfaces/htmlOrderingList.jspx
===================================================================
--- branches/3.1.x/ui/orderingList/src/main/templates/org/richfaces/htmlOrderingList.jspx 2007-11-21 08:58:51 UTC (rev 4131)
+++ branches/3.1.x/ui/orderingList/src/main/templates/org/richfaces/htmlOrderingList.jspx 2007-11-21 12:20:42 UTC (rev 4132)
@@ -22,7 +22,7 @@
<f:clientId var="clientId"/>
- <div id="#{clientId}" x:passThruWithExclusions="id">
+ <div id="#{clientId}" class="disableSelection" x:passThruWithExclusions="id,class">
<input id="#{clientId}focusKeeper" type="button" value="" style="width: 1px; position: absolute; left: -32767px;" name="focusKeeper"/>
<input id="#{clientId}valueKeeper" type="hidden" name="#{clientId}" value="#{component.submittedString}"/>
@@ -66,21 +66,18 @@
<f:clientId var="cId"/>
<script type="text/javascript">
var clientId = '#{cId}';
- /*if (window.attachEvent) {
- window.attachEvent("onload", init);
- } else {
- window.addEventListener("load", init, false);
- }*/
-
Event.onReady(init);
- document.body.onselectstart = function() {return false;};
- document.body.className = "body";
+
function init() {
- var cotrolsIdPrefix = [['up', 'disup'], ['down', 'disdown'], ['last', 'dislast'], ['first','disfirst']];
- var shuttle = new Shuttle('#{cId}', '#{cId}internal_tab', '#{cId}internal_header_tab', '#{cId}focusKeeper', '#{cId}valueKeeper', cotrolsIdPrefix, '#{cId}sortLabel', function() {#{component.attributes['onorderchanged']}});
+ try {
+ var cotrolsIdPrefix = [['up', 'disup'], ['down', 'disdown'], ['last', 'dislast'], ['first','disfirst']];
+ var shuttle = new Shuttle('#{cId}', '#{cId}internal_tab', '#{cId}internal_header_tab', '#{cId}focusKeeper', '#{cId}valueKeeper', cotrolsIdPrefix, '#{cId}sortLabel', function() {#{component.attributes['onorderchanged']}});
var layoutManager = new LayoutManager('#{clientId}internal_header_tab', '#{clientId}internal_tab');
layoutManager.widthSynchronization();
+ } catch (e) {
+ alert(e);
+ }
}
//setTimeout(init, 0);
</script>
18 years, 5 months
JBoss Rich Faces SVN: r4131 - branches/3.1.x/test-applications/facelets/src/main/java/orderingList.
by richfaces-svn-commits@lists.jboss.org
Author: ayanul
Date: 2007-11-21 03:58:51 -0500 (Wed, 21 Nov 2007)
New Revision: 4131
Modified:
branches/3.1.x/test-applications/facelets/src/main/java/orderingList/OrderingList.java
Log:
Modified: branches/3.1.x/test-applications/facelets/src/main/java/orderingList/OrderingList.java
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/java/orderingList/OrderingList.java 2007-11-21 08:50:40 UTC (rev 4130)
+++ branches/3.1.x/test-applications/facelets/src/main/java/orderingList/OrderingList.java 2007-11-21 08:58:51 UTC (rev 4131)
@@ -125,7 +125,7 @@
this.topControlLabel = topControlLabel;
}
- public boolean getComponentState() {
+ public Object getComponentState() {
return componentState;
}
18 years, 5 months
JBoss Rich Faces SVN: r4130 - in branches/3.1.x/test-applications/facelets/src/main: java/orderingList and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: ayanul
Date: 2007-11-21 03:50:40 -0500 (Wed, 21 Nov 2007)
New Revision: 4130
Modified:
branches/3.1.x/test-applications/facelets/src/main/java/calendar/CalendarBean.java
branches/3.1.x/test-applications/facelets/src/main/java/orderingList/OrderingList.java
branches/3.1.x/test-applications/facelets/src/main/webapp/OrderingList/OrderingList.xhtml
branches/3.1.x/test-applications/facelets/src/main/webapp/OrderingList/OrderingListProperty.xhtml
Log:
update OrderingList
Modified: branches/3.1.x/test-applications/facelets/src/main/java/calendar/CalendarBean.java
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/java/calendar/CalendarBean.java 2007-11-21 03:50:13 UTC (rev 4129)
+++ branches/3.1.x/test-applications/facelets/src/main/java/calendar/CalendarBean.java 2007-11-21 08:50:40 UTC (rev 4130)
@@ -29,7 +29,6 @@
import java.util.StringTokenizer;
import java.util.TimeZone;
-import javax.el.ValueExpression;
import javax.faces.event.ValueChangeEvent;
import org.richfaces.event.CurrentDateChangeEvent;
Modified: branches/3.1.x/test-applications/facelets/src/main/java/orderingList/OrderingList.java
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/java/orderingList/OrderingList.java 2007-11-21 03:50:13 UTC (rev 4129)
+++ branches/3.1.x/test-applications/facelets/src/main/java/orderingList/OrderingList.java 2007-11-21 08:50:40 UTC (rev 4130)
@@ -1,16 +1,17 @@
package orderingList;
+import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Random;
import dataScroller.Data;
-public class OrderingList {
+public class OrderingList{
private ArrayList<Data> list;
private String [] status = {"error", "fatal", "info", "passed", "warn"};
private String [] statusIcon = {"/pics/error.gif", "/pics/fatal.gif", "/pics/info.gif", "/pics/passed.gif", "/pics/warn.gif"};
private String captionLabel;
- private String componentState;
private String listHeight;
private String listWidth;
private String controlsType;
@@ -21,11 +22,22 @@
private String upControlLabel;
private String topControlLabel;
private String downControlLabel;
+ private Object componentState;
private boolean orderControlsVisible;
private boolean fastOrderControlsVisible;
private boolean rendered;
private boolean showButtonLabels;
+ private Collection<Data> selection;
+ public Collection<Data> getSelection() {
+ return selection;
+ }
+
+ public void setSelection(Collection<Data> selection) {
+ System.out.println("Selection.out: " + selection);
+ this.selection = selection;
+ }
+
public ArrayList<Data> getList() {
return list;
}
@@ -36,8 +48,8 @@
public OrderingList() {
captionLabel = "captionLabel";
- componentState = "none";
- listHeight = "300";
+ componentState = null;
+ listHeight = "300";
listWidth = "400";
controlsType = "none";
controlsHorizontalAlign = "0";
@@ -113,11 +125,11 @@
this.topControlLabel = topControlLabel;
}
- public String getComponentState() {
+ public boolean getComponentState() {
return componentState;
}
- public void setComponentState(String componentState) {
+ public void setComponentState(boolean componentState) {
this.componentState = componentState;
}
Modified: branches/3.1.x/test-applications/facelets/src/main/webapp/OrderingList/OrderingList.xhtml
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/webapp/OrderingList/OrderingList.xhtml 2007-11-21 03:50:13 UTC (rev 4129)
+++ branches/3.1.x/test-applications/facelets/src/main/webapp/OrderingList/OrderingList.xhtml 2007-11-21 08:50:40 UTC (rev 4130)
@@ -1,20 +1,26 @@
<f:subview id="orderingListSubviewID" xmlns:a4j="http://richfaces.org/a4j" xmlns:f="http://java.sun.com/jsf/core"
- xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://labs.jboss.com/jbossrichfaces/ui/orderingList">
- <h:messages showDetail="true"/>
-
- <rich:orderingList id="orderingListID" value="#{orderingList.list}" var="item" listHeight="#{orderingList.listHeight}" listWidth="#{orderingList.listWidth}"
- controlsType="#{orderingList.controlsType}" bottomControlLabel="#{orderingList.bottomControlLabel}" captionLabel="#{orderingList.captionLabel}"
- topControlLabel="#{orderingList.topControlLabel}" upControlLabel="#{orderingList.upControlLabel}"
- controlsHorizontalAlign="#{orderingList.controlsHorizontalAlign}" controlsVerticalAlign="#{orderingList.controlsVerticalAlign}"
- headerLabel="#{orderingList.headerLabel}" downControlLabel="#{orderingList.downControlLabel}" orderControlsVisible="#{orderingList.orderControlsVisible}"
- fastOrderControlsVisible="#{orderingList.fastOrderControlsVisible}" rendered="#{orderingList.rendered}" showButtonLabels="#{orderingList.showButtonLabels}">
+ xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich"
+ xmlns:ui="http://java.sun.com/jsf/facelets">
+
+ <h:messages showDetail="true" />
+
+ <rich:orderingList id="orderingListID" value="#{orderingList.list}" var="item" listHeight="#{orderingList.listHeight}"
+ listWidth="#{orderingList.listWidth}" controlsType="#{orderingList.controlsType}"
+ bottomControlLabel="#{orderingList.bottomControlLabel}" captionLabel="#{orderingList.captionLabel}"
+ topControlLabel="#{orderingList.topControlLabel}" upControlLabel="#{orderingList.upControlLabel}"
+ controlsHorizontalAlign="#{orderingList.controlsHorizontalAlign}" controlsVerticalAlign="#{orderingList.controlsVerticalAlign}"
+ headerLabel="#{orderingList.headerLabel}" downControlLabel="#{orderingList.downControlLabel}"
+ orderControlsVisible="#{orderingList.orderControlsVisible}" fastOrderControlsVisible="#{orderingList.fastOrderControlsVisible}"
+ rendered="#{orderingList.rendered}" showButtonLabels="#{orderingList.showButtonLabels}" componentState="#{orderingList.componentState}"
+ selection="#{orderingList.selection}">
+
<h:column width="100px">
<f:facet name="header">
<h:outputText value="Number" />
</f:facet>
<h:outputText value="#{item.data1}" />
</h:column>
-
+
<h:column width="100px">
<f:facet name="header">
<h:outputText value="Name" />
@@ -27,11 +33,11 @@
<h:outputText value="Status" />
</f:facet>
<h:selectOneMenu value="#{item.data2}">
- <f:selectItem itemLabel="error" itemValue="error"/>
- <f:selectItem itemLabel="fatal" itemValue="fatal"/>
- <f:selectItem itemLabel="info" itemValue="info"/>
- <f:selectItem itemLabel="passed" itemValue="passed"/>
- <f:selectItem itemLabel="warn" itemValue="warn"/>
+ <f:selectItem itemLabel="error" itemValue="error" />
+ <f:selectItem itemLabel="fatal" itemValue="fatal" />
+ <f:selectItem itemLabel="info" itemValue="info" />
+ <f:selectItem itemLabel="passed" itemValue="passed" />
+ <f:selectItem itemLabel="warn" itemValue="warn" />
</h:selectOneMenu>
</h:column>
@@ -41,5 +47,11 @@
</f:facet>
<h:graphicImage value="#{item.data3}" />
</h:column>
- </rich:orderingList>
+ </rich:orderingList>
+
+ <rich:spacer></rich:spacer>
+ <a4j:commandButton value="reRender" reRender="orderingListID"></a4j:commandButton>
+ <h:commandButton action="submit();" value="submit();" />
+
+
</f:subview>
\ No newline at end of file
Modified: branches/3.1.x/test-applications/facelets/src/main/webapp/OrderingList/OrderingListProperty.xhtml
===================================================================
--- branches/3.1.x/test-applications/facelets/src/main/webapp/OrderingList/OrderingListProperty.xhtml 2007-11-21 03:50:13 UTC (rev 4129)
+++ branches/3.1.x/test-applications/facelets/src/main/webapp/OrderingList/OrderingListProperty.xhtml 2007-11-21 08:50:40 UTC (rev 4130)
@@ -1,84 +1,86 @@
<f:subview id="orderingListPropertySubviewID" xmlns:a4j="http://richfaces.org/a4j" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich">
<h:panelGrid columns="2">
-
<h:outputText value="controlsType" />
<h:selectOneRadio value="#{orderingList.controlsType}">
- <f:selectItem itemLabel="none" itemValue="none"/>
- <f:selectItem itemLabel="button" itemValue="button"/>
- <f:selectItem itemLabel="link" itemValue="link"/>
+ <f:selectItem itemLabel="none" itemValue="none" />
+ <f:selectItem itemLabel="button" itemValue="button" />
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:selectOneRadio>
-
+
<h:outputText value="captionLabel" />
- <h:inputText value="#{orderingList.captionLabel}" >
+ <h:inputText value="#{orderingList.captionLabel}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
-
+
<h:outputText value="headerLabel" />
- <h:inputText value="#{orderingList.headerLabel}" >
+ <h:inputText value="#{orderingList.headerLabel}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
-
+
<h:outputText value="listHeight:" />
- <h:inputText value="#{orderingList.listHeight}" >
+ <h:inputText value="#{orderingList.listHeight}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
-
+
<h:outputText value="listWidth" />
- <h:inputText value="#{orderingList.listWidth}" >
+ <h:inputText value="#{orderingList.listWidth}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
-
+
<h:outputText value="controlsVerticalAlign" />
- <h:inputText value="#{orderingList.controlsVerticalAlign}" >
+ <h:inputText value="#{orderingList.controlsVerticalAlign}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
-
-
+
<h:outputText value="controlsHorizontalAlign" />
- <h:inputText value="#{orderingList.controlsHorizontalAlign}" >
+ <h:inputText value="#{orderingList.controlsHorizontalAlign}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
-
+
<h:outputText value="upControlLabel" />
- <h:inputText value="#{orderingList.upControlLabel}" >
+ <h:inputText value="#{orderingList.upControlLabel}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
<h:outputText value="bottomControlLabel" />
- <h:inputText value="#{orderingList.bottomControlLabel}" >
+ <h:inputText value="#{orderingList.bottomControlLabel}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
<h:outputText value="topControlLabel" />
- <h:inputText value="#{orderingList.topControlLabel}" >
+ <h:inputText value="#{orderingList.topControlLabel}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
-
+
<h:outputText value="downControlLabel" />
- <h:inputText value="#{orderingList.downControlLabel}" >
+ <h:inputText value="#{orderingList.downControlLabel}">
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:inputText>
-
- <h:outputText value="showButtonLabels" />
- <h:selectBooleanCheckbox value="#{orderingList.showButtonLabels}" >
+
+ <h:outputText value="componentState" />
+ <h:selectBooleanCheckbox value="#{orderingList.componentState}" >
<a4j:support event="onchange" reRender="orderingListID"></a4j:support>
</h:selectBooleanCheckbox>
-
+
+ <h:outputText value="showButtonLabels" />
+ <h:selectBooleanCheckbox value="#{orderingList.showButtonLabels}">
+ <a4j:support event="onclick" reRender="orderingListID"></a4j:support>
+ </h:selectBooleanCheckbox>
+
<h:outputText value="fastOrderControlsVisible" />
- <h:selectBooleanCheckbox value="#{orderingList.fastOrderControlsVisible}" >
- <a4j:support event="onchange" reRender="orderingListID"></a4j:support>
+ <h:selectBooleanCheckbox value="#{orderingList.fastOrderControlsVisible}">
+ <a4j:support event="onclick" reRender="orderingListID"></a4j:support>
</h:selectBooleanCheckbox>
<h:outputText value="orderControlsVisible" />
- <h:selectBooleanCheckbox value="#{orderingList.orderControlsVisible}" >
- <a4j:support event="onchange" reRender="orderingListID"></a4j:support>
+ <h:selectBooleanCheckbox value="#{orderingList.orderControlsVisible}">
+ <a4j:support event="onclick" reRender="orderingListID"></a4j:support>
</h:selectBooleanCheckbox>
<h:outputText value="rendered" />
- <h:selectBooleanCheckbox value="#{orderingList.rendered}" >
- <a4j:support event="onchange" reRender="orderingListID"></a4j:support>
+ <h:selectBooleanCheckbox value="#{orderingList.rendered}" onclick="submit();">
+
</h:selectBooleanCheckbox>
</h:panelGrid>
</f:subview>
\ No newline at end of file
18 years, 5 months
JBoss Rich Faces SVN: r4129 - in branches/3.1.x/sandbox/samples/listShuttleDemo/src/main: webapp/WEB-INF and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2007-11-20 22:50:13 -0500 (Tue, 20 Nov 2007)
New Revision: 4129
Modified:
branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/java/org/richfaces/ListShuttleDemoBean.java
branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/java/org/richfaces/ListShuttleOptionItem.java
branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/webapp/WEB-INF/web.xml
branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/webapp/pages/index.jsp
Log:
latest changes for listShuttle
Modified: branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/java/org/richfaces/ListShuttleDemoBean.java
===================================================================
--- branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/java/org/richfaces/ListShuttleDemoBean.java 2007-11-21 03:50:06 UTC (rev 4128)
+++ branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/java/org/richfaces/ListShuttleDemoBean.java 2007-11-21 03:50:13 UTC (rev 4129)
@@ -3,6 +3,7 @@
*/
package org.richfaces;
+import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@@ -15,15 +16,20 @@
public class ListShuttleDemoBean {
private ListShuttleOptionItem[] source;
- private List<ListShuttleOptionItem> target;
+ private List target;
public ListShuttleDemoBean() {
super();
source = new ListShuttleOptionItem[10];
for (int i = 0; i < source.length; i++) {
- source[i] = new ListShuttleOptionItem("Item " + i, new Random().nextInt(40));
+ source[i] = new ListShuttleOptionItem("Source Item " + i, new Random().nextInt(40));
}
+
+ target = new ArrayList();
+ for (int i = 0; i < 5; i++) {
+ target.add(new ListShuttleOptionItem("Target Item " + i, new Random().nextInt(40)));
+ }
}
public ListShuttleOptionItem[] getSource() {
@@ -34,11 +40,11 @@
this.source = source;
}
- public List<ListShuttleOptionItem> getTarget() {
+ public List getTarget() {
return target;
}
- public void setTarget(List<ListShuttleOptionItem> target) {
+ public void setTarget(List target) {
this.target = target;
}
Modified: branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/java/org/richfaces/ListShuttleOptionItem.java
===================================================================
--- branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/java/org/richfaces/ListShuttleOptionItem.java 2007-11-21 03:50:06 UTC (rev 4128)
+++ branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/java/org/richfaces/ListShuttleOptionItem.java 2007-11-21 03:50:13 UTC (rev 4129)
@@ -32,7 +32,6 @@
return price;
}
- @Override
public String toString() {
return this.getClass().getSimpleName() + " [" + name + "] by " + price;
}
Modified: branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/webapp/WEB-INF/web.xml
===================================================================
--- branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/webapp/WEB-INF/web.xml 2007-11-21 03:50:06 UTC (rev 4128)
+++ branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/webapp/WEB-INF/web.xml 2007-11-21 03:50:13 UTC (rev 4129)
@@ -10,6 +10,10 @@
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
+ <context-param>
+ <param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
+ <param-value>false</param-value>
+ </context-param>
<!--
-->
<filter>
Modified: branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/webapp/pages/index.jsp
===================================================================
--- branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/webapp/pages/index.jsp 2007-11-21 03:50:06 UTC (rev 4128)
+++ branches/3.1.x/sandbox/samples/listShuttleDemo/src/main/webapp/pages/index.jsp 2007-11-21 03:50:13 UTC (rev 4129)
@@ -10,8 +10,9 @@
<body>
<f:view>
<h:form>
- <ls:listShuttle sourceValue="#{listShuttleDemoBean.source}" targetValue="#{listShuttleDemoBean.target}">
-
+ <ls:listShuttle var="item" sourceValue="#{listShuttleDemoBean.source}" targetValue="#{listShuttleDemoBean.target}">
+ <h:column><h:outputText value="#{item.name}" /></h:column>
+ <h:column><h:outputText value="#{item.price}" /></h:column>
</ls:listShuttle>
18 years, 5 months
JBoss Rich Faces SVN: r4128 - in branches/3.1.x/sandbox/ui/listShuttle/src/main: java/org/richfaces/model and 3 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2007-11-20 22:50:06 -0500 (Tue, 20 Nov 2007)
New Revision: 4128
Removed:
branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js
Modified:
branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/component/UIListShuttle.java
branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/model/ListShuttleDataModel.java
branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/renderkit/ListShuttleRendererBase.java
branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListBase.js
branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js
branches/3.1.x/sandbox/ui/listShuttle/src/main/templates/org/richfaces/htmlListShuttle.jspx
Log:
latest changes for listShuttle
Modified: branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/component/UIListShuttle.java
===================================================================
--- branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/component/UIListShuttle.java 2007-11-21 03:49:37 UTC (rev 4127)
+++ branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/component/UIListShuttle.java 2007-11-21 03:50:06 UTC (rev 4128)
@@ -15,8 +15,12 @@
import javax.faces.el.MethodBinding;
import javax.faces.el.ValueBinding;
import javax.faces.event.ValueChangeListener;
+import javax.faces.model.DataModel;
+import org.richfaces.component.UIOrderingList.SubmittedValue;
+import org.richfaces.model.ListShuttleDataModel;
import org.richfaces.model.ListShuttleRowKey;
+import org.richfaces.model.TranslatedSequenceDataModel;
/**
* JSF component class
@@ -93,6 +97,8 @@
}
}
+ private transient SubmittedValue submittedValueHolder = null;
+
private Object sourceValue;
private boolean sourceValueSet;
@@ -174,7 +180,15 @@
}
public org.ajax4jsf.model.ExtendedDataModel createDataModel() {
- return null;
+ DataModel sourceDataModel = createDataModel(getSourceValue());
+ DataModel targetDataModel = createDataModel(getTargetValue());
+
+ if (isTranslatedRenderingState() || isTranslatedState()) {
+ return new ListShuttleDataModel(sourceDataModel, targetDataModel,
+ isTranslatedState(), submittedValueHolder != null ? submittedValueHolder.translationTable : null);
+ } else {
+ return new ListShuttleDataModel(sourceDataModel, targetDataModel, false, null);
+ }
}
public void addValueChangeListener(ValueChangeListener listener) {
@@ -191,4 +205,13 @@
removeFacesListener(listener);
}
+ public boolean isSource() {
+ ListShuttleDataModel dataModel = (ListShuttleDataModel) getExtendedDataModel();
+ return dataModel.isSource();
+ }
+
+ public boolean isTarget() {
+ ListShuttleDataModel dataModel = (ListShuttleDataModel) getExtendedDataModel();
+ return dataModel.isTarget();
+ }
}
Modified: branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/model/ListShuttleDataModel.java
===================================================================
--- branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/model/ListShuttleDataModel.java 2007-11-21 03:49:37 UTC (rev 4127)
+++ branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/model/ListShuttleDataModel.java 2007-11-21 03:50:06 UTC (rev 4128)
@@ -23,6 +23,8 @@
private Object rowKey;
+ private Boolean useSource = null;
+
private boolean translatedModel;
private Map translationTable;
private SequenceDataModel sourceModel;
@@ -59,20 +61,33 @@
return rowKey;
}
+ private Object translate(Object key) {
+ if (translationTable != null && key != null) {
+ return translationTable.get(key);
+ } else {
+ return key;
+ }
+ }
+
private void setShuttleRowKey(ListShuttleRowKey shuttleRowKey) {
Object sourceKey = null;
Object targetKey = null;
+ Boolean useSource = null;
if (shuttleRowKey != null) {
if (shuttleRowKey.isSource()) {
sourceKey = shuttleRowKey.getRowKey();
+ useSource = Boolean.TRUE;
} else {
targetKey = shuttleRowKey.getRowKey();
+ useSource = Boolean.FALSE;
}
}
- this.sourceModel.setRowKey(null);
- this.targetModel.setRowKey(null);
+ this.useSource = useSource;
+
+ this.sourceModel.setRowKey(sourceKey);
+ this.targetModel.setRowKey(targetKey);
}
/* (non-Javadoc)
@@ -87,7 +102,7 @@
} else {
if (this.translatedModel) {
if (rowKey != null) {
- setShuttleRowKey((ListShuttleRowKey) this.translationTable.get(key));
+ setShuttleRowKey((ListShuttleRowKey) translate(key));
} else {
setShuttleRowKey(null);
}
@@ -118,30 +133,32 @@
Object argument) throws IOException {
ListShuttleRowKey shuttleRowKey = new ListShuttleRowKey(rowKey, true);
-
+ Object translatedShuttleRowKey = translate(shuttleRowKey);
+
if (translatedModel) {
visitor.process(context, new TranslatedRowKey(
- shuttleRowKey, String.valueOf(translationTable.get(shuttleRowKey))), argument);
+ shuttleRowKey, String.valueOf(translatedShuttleRowKey)), argument);
} else {
- visitor.process(context, translationTable.get(shuttleRowKey), argument);
+ visitor.process(context, translatedShuttleRowKey, argument);
}
}
- }, new SequenceRange(0, -1), null);
+ }, new SequenceRange(0, -1), argument);
this.targetModel.walk(context, new DataVisitor(){
public void process(FacesContext context, Object rowKey,
Object argument) throws IOException {
ListShuttleRowKey shuttleRowKey = new ListShuttleRowKey(rowKey, false);
+ Object translatedShuttleRowKey = translate(shuttleRowKey);
if (translatedModel) {
visitor.process(context, new TranslatedRowKey(
- shuttleRowKey, String.valueOf(translationTable.get(shuttleRowKey))), argument);
+ shuttleRowKey, String.valueOf(translatedShuttleRowKey)), argument);
} else {
- visitor.process(context, translationTable.get(shuttleRowKey), argument);
+ visitor.process(context, translatedShuttleRowKey, argument);
}
}
- }, new SequenceRange(0, -1), null);
+ }, new SequenceRange(0, -1), argument);
}
/* (non-Javadoc)
@@ -155,7 +172,13 @@
* @see javax.faces.model.DataModel#getRowData()
*/
public Object getRowData() {
- return sourceModel.isRowAvailable() ? sourceModel.getRowData() : targetModel.getRowData();
+ if (isSource()) {
+ return sourceModel.getRowData();
+ } else if (isTarget()) {
+ return targetModel.getRowData();
+ } else {
+ return null;
+ }
}
/* (non-Javadoc)
@@ -177,7 +200,13 @@
* @see javax.faces.model.DataModel#isRowAvailable()
*/
public boolean isRowAvailable() {
- return sourceModel.isRowAvailable() || targetModel.isRowAvailable();
+ if (isSource()) {
+ return sourceModel.isRowAvailable();
+ } else if (isTarget()) {
+ return targetModel.isRowAvailable();
+ } else {
+ return false;
+ }
}
/* (non-Javadoc)
@@ -194,4 +223,11 @@
}
+ public boolean isSource() {
+ return Boolean.TRUE.equals(useSource);
+ }
+
+ public boolean isTarget() {
+ return Boolean.FALSE.equals(useSource);
+ }
}
Modified: branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/renderkit/ListShuttleRendererBase.java
===================================================================
--- branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/renderkit/ListShuttleRendererBase.java 2007-11-21 03:49:37 UTC (rev 4127)
+++ branches/3.1.x/sandbox/ui/listShuttle/src/main/java/org/richfaces/renderkit/ListShuttleRendererBase.java 2007-11-21 03:50:06 UTC (rev 4128)
@@ -12,6 +12,7 @@
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
+import org.ajax4jsf.component.UIDataAdaptor;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.richfaces.component.UIListShuttle;
@@ -23,6 +24,21 @@
private static final String MESSAGE_BUNDLE_NAME = OrderingListRendererBase.class.getPackage().getName() + "ListShuttle";
+ private static class ListShuttleRendererTableHolder extends TableHolder {
+
+ private boolean source;
+
+ public ListShuttleRendererTableHolder(UIDataAdaptor table, boolean source) {
+ super(table);
+
+ this.source = source;
+ }
+
+ public boolean isSource() {
+ return source;
+ }
+ }
+
public ListShuttleRendererBase() {
super(MESSAGE_BUNDLE_NAME);
}
@@ -34,52 +50,69 @@
public void encodeTLHeader(FacesContext context, UIListShuttle shuttle) {
}
- public void encodeTLRows(FacesContext context, UIListShuttle shuttle) {
+
+ public void encodeTLRows(FacesContext context, UIListShuttle shuttle) throws IOException {
+ encodeRows(context, shuttle, new ListShuttleRendererTableHolder(shuttle, false));
+ }
- }
public void encodeSLCaption(FacesContext context, UIListShuttle shuttle) {
}
- public void encodeSLControlsFacets(FacesContext context, UIListShuttle shuttle) {
+ public void encodeTLControlsFacets(FacesContext context, UIListShuttle shuttle) {
}
public void encodeSLHeader(FacesContext context, UIListShuttle shuttle) {
}
- public void encodeSLRows(FacesContext context, UIListShuttle shuttle) {
-
+
+ public void encodeSLRows(FacesContext context, UIListShuttle shuttle) throws IOException {
+ encodeRows(context, shuttle, new ListShuttleRendererTableHolder(shuttle, true));
}
public void encodeOneRow(FacesContext context, TableHolder holder)
throws IOException {
- ResponseWriter writer = context.getResponseWriter();
UIListShuttle table = (UIListShuttle) holder.getTable();
- String clientId = holder.getTable().getClientId(context);
- writer.startElement(HTML.TR_ELEMENT, table);
- writer.writeAttribute("id", clientId, null);
+ ListShuttleRendererTableHolder shuttleRendererTableHolder = (ListShuttleRendererTableHolder) holder;
+
+ if (shuttleRendererTableHolder.isSource() && table.isSource() ||
+ !shuttleRendererTableHolder.isSource() && table.isTarget()) {
+
+ ResponseWriter writer = context.getResponseWriter();
+ String clientId = holder.getTable().getClientId(context);
+ writer.startElement(HTML.TR_ELEMENT, table);
+ writer.writeAttribute("id", clientId, null);
- StringBuffer rowClassName = new StringBuffer("ol_normal rich-ordering-list-row");
- StringBuffer cellClassName = new StringBuffer("ol_cell rich-ordering-list-cell");
+ StringBuffer rowClassName = new StringBuffer("ol_normal rich-ordering-list-row");
+ StringBuffer cellClassName = new StringBuffer("ol_cell rich-ordering-list-cell");
- writer.writeAttribute("class", rowClassName.toString(), null);
+ writer.writeAttribute("class", rowClassName.toString(), null);
- List children = table.getChildren();
- for (Iterator iterator = children.iterator(); iterator.hasNext();) {
- UIComponent component = (UIComponent) iterator.next();
+ List children = table.getChildren();
+ for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+ UIComponent component = (UIComponent) iterator.next();
- if (component instanceof UIColumn && component.isRendered()) {
- UIColumn column = (UIColumn) component;
+ if (component instanceof UIColumn && component.isRendered()) {
+ UIColumn column = (UIColumn) component;
- writer.startElement(HTML.td_ELEM, table);
+ writer.startElement(HTML.td_ELEM, table);
- writer.writeAttribute("class", cellClassName.toString(), null);
+ writer.writeAttribute("class", cellClassName.toString(), null);
- renderChildren(context, column);
+ renderChildren(context, column);
- writer.endElement(HTML.td_ELEM);
+ writer.endElement(HTML.td_ELEM);
+ }
}
+
+ writer.endElement(HTML.TR_ELEMENT);
}
-
- writer.endElement(HTML.TR_ELEMENT);
}
+
+ public void encodeChildren(FacesContext context, UIComponent component)
+ throws IOException {
+ if (component.isRendered()) {
+ ResponseWriter writer = context.getResponseWriter();
+ doEncodeChildren(writer, context, component);
+ }
+ }
}
Modified: branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListBase.js
===================================================================
--- branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListBase.js 2007-11-21 03:49:37 UTC (rev 4127)
+++ branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListBase.js 2007-11-21 03:50:06 UTC (rev 4128)
@@ -1,5 +1,11 @@
if(!window.Richfaces) window.Richfaces = {};
+Richfaces.ListBase = Class.create();
+
+Richfaces.ListBase.compare = function(obj1, obj2) {
+ return ((obj1 == obj2) ? 0 : ((obj1 < obj2) ? -1 : 1));
+}
+
Richfaces.ListBase.prototype = {
initialize : function(containerId, contentTableId, headerTableId, focusKeeperId, valueKeeperId,
onclickControlId) {
@@ -305,6 +311,3 @@
}
-Richfaces.ListBase.compare = function(obj1, obj2) {
- return ((obj1 == obj2) ? 0 : ((obj1 < obj2) ? -1 : 1));
-}
Modified: branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js
===================================================================
--- branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js 2007-11-21 03:49:37 UTC (rev 4127)
+++ branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/ListShuttle.js 2007-11-21 03:50:06 UTC (rev 4128)
@@ -1,10 +1,11 @@
if(!window.Richfaces) window.Richfaces = {};
+Richfaces.ListShuttle = Class.create();
-Richfaces.ListShuttle = {
+Richfaces.ListShuttle.prototype = {
initialize: function(listParams, controlIds) {
- this.targetList = new ListBase(listParams[1]);
- this.sourceList = new OrderingList(listParams[0]);
+ this.targetList = Richfaces.ListBase.apply(Richfaces.ListBase.constructor(), listParams[1]);
+ this.sourceList = Richfaces.OrderingList.apply(this, listParams[0]);
this.controlList = null;
this.initControlList(controlIds);
Deleted: branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js
===================================================================
--- branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js 2007-11-21 03:49:37 UTC (rev 4127)
+++ branches/3.1.x/sandbox/ui/listShuttle/src/main/resources/org/richfaces/renderkit/html/scripts/OrderingList.js 2007-11-21 03:50:06 UTC (rev 4128)
@@ -1,156 +0,0 @@
-if(!window.Richfaces) window.Richfaces = {};
-Object.extend(OrderingList, ListBase);
-
-Richfaces.OrderingList = {
- initialize: function(ids, onorderchanged) {
- this.controlList = null;
- this.onorderchanged = onorderchanged;
-
- this.initControlList(ids);
- },
-
- initControlList : function(ids) {
- for (var i = 0; i < ids.length; i++) {
- var id = ids[i];
- var node = document.getElementById(containerId + id[0]);
- var disNode = document.getElementById(containerId + id[1]);
- if (node && disNode) {
- Shuttle.addClickListener(node, Shuttle.HANDLERS[id[0]].bindAsEventListener(this));
- this.controlList[i] = new Control(node, disNode, false, false, id[0]);
- }
- }
- this.controlListManager();
- },
-
- controlListManager : function() {
- this.selectedItems.sort(this.compareByRowIndex);
- var control;
- //FIXME
- if ((this.shuttleItems.length <= 1) || (this.selectedItems.length == 0)) {
- this.controlsProcessing(["first", "last", "down", "up"]);
- } else if (this.selectedItems[0].rowIndex == 0) {
- this.controlsProcessing(["first", "up"]);
- } else if (this.selectedItems[this.selectedItems.length - 1].rowIndex == (this.shuttleItems.length - 1)) {
- this.controlsProcessing(["down", "last"]);
- } else {
- this.controlsProcessing();
- }
- },
-
- controlsProcessing : function(disabledControls) {
- for (var i = 0; i < this.controlList.length; i++) {
- control = this.controlList[i];
- if (control != null) {
- if (disabledControls != null && disabledControls.indexOf(control.action) != -1) control.doDisable();
- else control.doEnable();
- }
- }
- },
-
- moveSelectedItems : function(action, event) {
- event = window.event||event;
- var rows = this.shuttleTbody.rows;
- var item;
- if (this.selectedItems.length > 0) {
- this.selectedItems.sort(this.compareByRowIndex);
-
- if ((action == 'up') && this.getExtremeItem("first").previousSibling) {
- for (var i = 0; i < this.selectedItems.length; i++) {
- item = this.selectedItems[i];
- item.parentNode.insertBefore(item, item.previousSibling);
- }
- } else if ((action == 'down') && this.getExtremeItem("last").nextSibling) {
- for (var i = this.selectedItems.length - 1; i > -1; i--) {
- item = this.selectedItems[i];
- item.parentNode.insertBefore(item.nextSibling, item);
- }
- } else if (action == 'first') {
- var incr = this.selectedItems[0].rowIndex;
- for (var i = 0; i < this.selectedItems.length; i++) {
- item = this.selectedItems[i];
- item.parentNode.insertBefore(item, rows[item.rowIndex - incr]);
- }
- } else if (action == 'last') {
- var length = this.shuttleItems.length;
- var incr = length - this.selectedItems[this.selectedItems.length - 1].rowIndex;
- for (var i = this.selectedItems.length - 1; i > -1; i--) {
- item = this.selectedItems[i];
- if (item.rowIndex + incr > length - 1) {
- item.parentNode.insertBefore(item, null);
- } else {
- item.parentNode.insertBefore(item, rows[item.rowIndex + incr]);
- }
- }
- }
-
- this.shuttleItems = new Array();
- for (var i = 0; i < rows.length; i++) {
- this.shuttleItems.push(rows[i].item);
- }
- if (action != null)
- this.autoScrolling(action, event);
-
- this.onorderchanged();
- this.controlListManager();
- this.saveState();
- }
- },
-
- onkeydownHandler : function(event) {
- var action = null;
- switch (event.keyCode) {
- case 34 : action = 'last'; this.moveSelectedItems(action ,event); break; //page down
- case 33 : action = 'first'; this.moveSelectedItems(action, event); break; //page up
- case 38 : //up arrow
- action = 'up';
- if (event.ctrlKey) {
- this.moveSelectedItems(action, event);
- } else {
- this.moveActiveItem(action, event);
- }
- break;
- case 40 : //down arrow
- action = 'down';
- if (event.ctrlKey) {
- this.moveSelectedItems(action ,event);
- } else {
- this.moveActiveItem(action, event);
- }
- break;
- case 65 : // Ctrl + A
- if (event.ctrlKey) {
- this.selectAll();
- Shuttle.stopPropogation(event);
- }
- Richfaces.SelectItems.doActive(this.activeItem);
- this.saveState();
- break;
- case 32 : this.invertSelection(event); this.saveState(); break; //blank
- }
- },
-
- toString : function() {
- var result = new Array();
- for (var i = 0; i < this.shuttleItems.length; i++) {
- var item = this.shuttleItems[i];
- result.push(item._id);
- if (item._selected) {
- result.push(Shuttle.SELECTION_MARKER);
- }
- if (this.activeItem && (this.activeItem.rowIndex == item._node.rowIndex)) {
- result.push(Shuttle.ACTIVITY_MARKER);
- }
- if (i != (this.shuttleItems.length - 1)) {
- result.push(Shuttle.ITEM_SEPARATOR);
- }
- }
- return result.join("");
- },
-
- saveState : function() {
- if (this.activeItem != null || (this.selectedItems.length > 0)) {
- this.valueKeeper.value = this.toString();
- }
- }
-
-}
\ No newline at end of file
Modified: branches/3.1.x/sandbox/ui/listShuttle/src/main/templates/org/richfaces/htmlListShuttle.jspx
===================================================================
--- branches/3.1.x/sandbox/ui/listShuttle/src/main/templates/org/richfaces/htmlListShuttle.jspx 2007-11-21 03:49:37 UTC (rev 4127)
+++ branches/3.1.x/sandbox/ui/listShuttle/src/main/templates/org/richfaces/htmlListShuttle.jspx 2007-11-21 03:50:06 UTC (rev 4128)
@@ -17,6 +17,8 @@
scripts/LayoutManager.js
scripts/Control.js,
scripts/OrderingList.js,
+ scripts/ListBase.js,
+ scripts/ListShuttle.js
</h:scripts>
<f:clientId var="clientId"/>
@@ -30,7 +32,7 @@
<tbody>
<tr>
<td class="ol_caption">
- <f:call name="encodeTLCaption"/>
+ <f:call name="encodeSLCaption"/>
</td>
</tr>
<tr>
@@ -38,13 +40,13 @@
<div id="#{clientId}headerBox" class="ol_list ol_outputlist">
<div class="ol_list_header" style="width: #{component.attributes['listWidth']}px;">
<table id="#{clientId}internal_header_tab" class="ol_internal_header_tab rich-ordering-list-items" cellpadding="0" cellspacing="0">
- <f:call name="encodeTLHeader"/>
+ <f:call name="encodeSLHeader"/>
</table>
</div>
<div id="#{clientId}contentBox" class="ol_list_content" style="width: #{component.attributes['listWidth']}px; height:#{component.attributes['listHeight']}px;">
<table id="#{clientId}internal_tab" class="ol_internal_tab" cellpadding="0" cellspacing="0">
<tbody id="#{clientId}tbody">
- <f:call name="encodeTLRows" />
+ <f:call name="encodeSLRows" />
</tbody>
</table>
</div>
@@ -64,7 +66,7 @@
<tbody>
<tr>
<td colspan="2" class="ol_caption">
- <f:call name="encodeSLCaption"/>
+ <f:call name="encodeTLCaption"/>
</td>
</tr>
<tr>
@@ -72,13 +74,13 @@
<div id="#{clientId}tlHeaderBox" class="ol_list ol_outputlist">
<div class="ol_list_header" style="width: #{component.attributes['listWidth']}px;">
<table id="#{clientId}tlInternal_header_tab" class="ol_internal_header_tab rich-ordering-list-items" cellpadding="0" cellspacing="0">
- <f:call name="encodeSLHeader"/>
+ <f:call name="encodeTLHeader"/>
</table>
</div>
<div id="#{clientId}tlContentBox" class="ol_list_content" style="width: #{component.attributes['listWidth']}px; height:#{component.attributes['listHeight']}px;">
<table id="#{clientId}tlInternal_tab" class="ol_internal_tab" cellpadding="0" cellspacing="0">
<tbody id="#{clientId}tlTbody">
- <f:call name="encodeSLRows" />
+ <f:call name="encodeTLRows" />
</tbody>
</table>
</div>
@@ -86,7 +88,7 @@
</td>
<td class="ol_center_button_col_valign">
<div class="ol_button_layout">
- <f:call name="encodeSLControlsFacets" />
+ <f:call name="encodeTLControlsFacets" />
</div>
</td>
</tr>
@@ -108,7 +110,7 @@
document.body.className = "body";
function init() {
var cotrolsIdPrefix = [['up', 'disup'], ['down', 'disdown'], ['last', 'dislast'], ['first','disfirst']];
- var listShuttle = new ListShuttle([['#{cId}', '#{cId}internal_tab', '#{cId}internal_header_tab', '#{cId}focusKeeper', '#{cId}valueKeeper', cotrolsIdPrefix, '#{cId}sortLabel', function() {#{component.attributes['onorderchanged']}}],
+ var listShuttle = new Richfaces.ListShuttle([['#{cId}', '#{cId}internal_tab', '#{cId}internal_header_tab', '#{cId}focusKeeper', '#{cId}valueKeeper', cotrolsIdPrefix, '#{cId}sortLabel', function() {#{component.attributes['onorderchanged']}}],
['#{cId}', '#{cId}tlInternal_tab', '#{cId}tlInternal_header_tab', '#{cId}tlFocusKeeper', '#{cId}tlValueKeeper', cotrolsIdPrefix, '#{cId}tlSortLabel', function() {#{component.attributes['onorderchanged']}}]]);
var sourceLayoutManager = new LayoutManager('#{cId}internal_header_tab', '#{cId}internal_tab');
var targetLayoutManager = new LayoutManager('#{cId}tlInternal_header_tab', '#{cId}tlInternal_tab');
18 years, 5 months