Author: Alex.Kolonitsky
Date: 2009-02-18 12:32:02 -0500 (Wed, 18 Feb 2009)
New Revision: 12689
Modified:
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/autotest/AutoTestServlet.java
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/autotest/bean/AutoTestBean.java
trunk/test-applications/seleniumTest/richfaces/src/test/java/org/richfaces/testng/PanelMenuGroupTest.java
trunk/test-applications/seleniumTest/richfaces/src/test/java/org/richfaces/testng/PanelTest.java
trunk/ui/core/src/main/java/org/ajax4jsf/renderkit/AjaxFunctionRendererBase.java
trunk/ui/core/src/main/java/org/ajax4jsf/renderkit/LoadResourceRendererBase.java
trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenuGroup.java
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/PanelMenuRendererBase.java
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java
trunk/ui/panelmenu/src/main/resources/org/richfaces/renderkit/html/scripts/panelMenu.js
trunk/ui/panelmenu/src/test/java/org/richfaces/component/PanelMenuComponentTest.java
Log:
PanelMenuGroup: nested components are processed for server-aware closed groups
https://jira.jboss.org/jira/browse/RF-6119
Modified:
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/autotest/AutoTestServlet.java
===================================================================
---
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/autotest/AutoTestServlet.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/autotest/AutoTestServlet.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -35,7 +35,9 @@
*/
public class AutoTestServlet extends HttpServlet {
- private static final String COMPONENT_PARAMETER_NAME = "c";
+ private static final long serialVersionUID = -7355230949138030161L;
+
+ private static final String COMPONENT_PARAMETER_NAME = "c";
private static final String EVENT_PARAMETER_NAME = "ev";
Modified:
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/autotest/bean/AutoTestBean.java
===================================================================
---
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/autotest/bean/AutoTestBean.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/test-applications/seleniumTest/richfaces/src/main/java/org/ajax4jsf/autotest/bean/AutoTestBean.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -104,7 +104,7 @@
private boolean converterSet;
- private String processInput;
+// private String processInput;
private boolean processSet = false;
Modified:
trunk/test-applications/seleniumTest/richfaces/src/test/java/org/richfaces/testng/PanelMenuGroupTest.java
===================================================================
---
trunk/test-applications/seleniumTest/richfaces/src/test/java/org/richfaces/testng/PanelMenuGroupTest.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/test-applications/seleniumTest/richfaces/src/test/java/org/richfaces/testng/PanelMenuGroupTest.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -159,12 +159,12 @@
String componentId = tester.getClientId("componentId");
AssertPresentAndVisible(componentId, "Component is not output to a
client");
- String subComponentId = tester.getClientId("subComponentId");
-
- String styleGroup = selenium.getAttribute("//*[@id='icon" +
componentId + "']/@style");
- String styleSubGroup = selenium.getAttribute("//*[@id='icon" +
subComponentId + "']/@style");
-
- //Assert.assertFalse(styleGroup == null ? styleSubGroup == null :
styleGroup.equals(styleSubGroup), "Expected [" + styleGroup + "] <>
[" + styleSubGroup + "]");
+// String subComponentId = tester.getClientId("subComponentId");
+//
+// String styleGroup = selenium.getAttribute("//*[@id='icon" +
componentId + "']/@style");
+// String styleSubGroup = selenium.getAttribute("//*[@id='icon" +
subComponentId + "']/@style");
+//
+// Assert.assertFalse(styleGroup == null ? styleSubGroup == null :
styleGroup.equals(styleSubGroup), "Expected [" + styleGroup + "] <>
[" + styleSubGroup + "]");
}
@Override
Modified:
trunk/test-applications/seleniumTest/richfaces/src/test/java/org/richfaces/testng/PanelTest.java
===================================================================
---
trunk/test-applications/seleniumTest/richfaces/src/test/java/org/richfaces/testng/PanelTest.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/test-applications/seleniumTest/richfaces/src/test/java/org/richfaces/testng/PanelTest.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -20,9 +20,7 @@
*/
package org.richfaces.testng;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import org.ajax4jsf.template.Template;
Modified:
trunk/ui/core/src/main/java/org/ajax4jsf/renderkit/AjaxFunctionRendererBase.java
===================================================================
---
trunk/ui/core/src/main/java/org/ajax4jsf/renderkit/AjaxFunctionRendererBase.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/core/src/main/java/org/ajax4jsf/renderkit/AjaxFunctionRendererBase.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -46,8 +46,7 @@
*
* @see org.ajax4jsf.renderkit.RendererBase#getComponentClass()
*/
- protected Class getComponentClass() {
- // TODO Auto-generated method stub
+ protected Class<? extends UIComponent> getComponentClass() {
return null;
}
@@ -58,17 +57,17 @@
// Create AJAX Submit function.
JSFunction ajaxFunction = AjaxRendererUtils.buildAjaxFunction(
component, context,AjaxRendererUtils.AJAX_FUNCTION_NAME);
- Map options = AjaxRendererUtils.buildEventOptions(context, component);
- Map parameters = (Map) options.get("parameters");
+ Map<String, Object> options = AjaxRendererUtils.buildEventOptions(context,
component);
+ Map<String, Object> parameters = (Map<String, Object>)
options.get("parameters");
if (null == parameters) {
- parameters = new HashMap();
+ parameters = new HashMap<String, Object>();
options.put("parameters", parameters);
}
ajaxFunction.addParameter(JSReference.NULL);
ajaxFunction.addParameter(options);
// Fill parameters.
- for (Iterator it = component.getChildren().iterator(); it.hasNext();) {
- UIComponent child = (UIComponent) it.next();
+ for (Iterator<UIComponent> it = component.getChildren().iterator();
it.hasNext();) {
+ UIComponent child = it.next();
if (child instanceof UIParameter) {
UIParameter parameter = ((UIParameter) child);
String name = parameter.getName();
Modified:
trunk/ui/core/src/main/java/org/ajax4jsf/renderkit/LoadResourceRendererBase.java
===================================================================
---
trunk/ui/core/src/main/java/org/ajax4jsf/renderkit/LoadResourceRendererBase.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/core/src/main/java/org/ajax4jsf/renderkit/LoadResourceRendererBase.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -49,7 +49,7 @@
/* (non-Javadoc)
* @see org.ajax4jsf.renderkit.RendererBase#getComponentClass()
*/
- protected Class getComponentClass() {
+ protected Class<? extends UIComponent> getComponentClass() {
return UIResource.class;
}
@@ -63,7 +63,7 @@
String family = resource.getFamily();
ResourceRenderer renderer = null;
InternetResource internetResource = null;
- Map<String, Object> attributes = Collections.EMPTY_MAP;
+ Map<String, Object> attributes = Collections.emptyMap();
if (SCRIPT_COMPONENT_FAMILY.equals(family)) {
renderer = InternetResourceBuilder.getInstance().getScriptRenderer();
Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenuGroup.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenuGroup.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenuGroup.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -22,6 +22,7 @@
package org.richfaces.component;
import javax.faces.component.ActionSource2;
+import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.BooleanConverter;
import javax.faces.el.MethodBinding;
@@ -38,6 +39,10 @@
public static final String COMPONENT_TYPE = "org.richfaces.panelMenuGroup";
+ public static final String EXPAND_MODE_AJAX = "ajax";
+ public static final String EXPAND_MODE_SERVER = "server";
+ public static final String EXPAND_MODE_NONE = "none";
+
public abstract String getStyleClass();
public abstract void setStyleClass(String styleClass);
@@ -77,8 +82,16 @@
public abstract void setName(String string);
public abstract String getName();
- public boolean isExpanded(){
-
+ public boolean isParentDisabled() {
+ UIComponent parent = this.getParent();
+ if(!(parent instanceof UIPanelMenuGroup)){
+ return false;
+ }
+
+ return this.isDisabled() || ((UIPanelMenuGroup) parent).isParentDisabled();
+ }
+
+ public boolean isExpanded(){
Object value = getValue();
if(value == null){
return false;
@@ -142,8 +155,8 @@
}
// Invoke the default ActionListener
- ActionListener listener =
- context.getApplication().getActionListener();
+ ActionListener listener =
+ context.getApplication().getActionListener();
if (listener != null) {
listener.processAction((ActionEvent) event);
}
Modified:
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/PanelMenuRendererBase.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/PanelMenuRendererBase.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/PanelMenuRendererBase.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -63,7 +63,7 @@
String src = getIconByType("custom",false,context,component);
int w = 16; //width(context);
- for (int i=0;i<level;i++){
+ for (int i=0; i<level; i++){
writer.startElement("img", component);
writer.writeAttribute("src", src, null);
writer.writeAttribute("alt", " ", null);
@@ -171,46 +171,50 @@
public void insertLabel(FacesContext context, UIComponent component) throws IOException
{
Object value = component.getAttributes().get("label");
- if (value!=null){
+ if (value!=null) {
context.getResponseWriter().writeText(value, null);
}
}
protected boolean isChildrenExpanded(UIComponent component){
- if (component.getChildren() != null){
- Iterator itr = component.getChildren().iterator();
- while(itr.hasNext()){
- UIComponent child = (UIComponent)itr.next();
- if(child instanceof UIPanelMenuGroup){
- if( ((UIPanelMenuGroup)child).isExpanded() ){
- return true;
- } else {
- return isChildrenExpanded(child);
- }
- }
- }
- }
+ if (component.getChildren() == null) {
+ return false;
+ }
+
+ Iterator<UIComponent> itr = component.getChildren().iterator();
+ while (itr.hasNext()) {
+ UIComponent child = itr.next();
+ if (child instanceof UIPanelMenuGroup) {
+ if (((UIPanelMenuGroup) child).isExpanded()) {
+ return true;
+ } else {
+ return isChildrenExpanded(child);
+ }
+ }
+ }
return false;
}
protected boolean isParentDisabled(UIComponent component){
- boolean returnValue = false;
UIComponent parent = component.getParent();
- if(parent instanceof UIPanelMenuGroup){
- UIPanelMenuGroup parentGroup = (UIPanelMenuGroup)parent;
- if(parentGroup.isDisabled()){
- returnValue = true;
- } else {
- returnValue = isParentDisabled(parentGroup);
- }
+ if(!(parent instanceof UIPanelMenuGroup)){
+ return false;
}
- return returnValue;
+
+ UIPanelMenuGroup parentGroup = (UIPanelMenuGroup) parent;
+ return parentGroup.isDisabled() || isParentDisabled(parentGroup);
}
+ protected boolean isParentExpended(UIComponent component){
+ UIComponent parent = component.getParent();
+ return parent instanceof UIPanelMenuGroup
+ && ((UIPanelMenuGroup)parent).isExpanded();
+ }
+
protected boolean isSubmitted(FacesContext context, UIComponent component){
boolean submitted = false;
String clientId = component.getClientId(context);
- Map requestParameterMap = context.getExternalContext().getRequestParameterMap();
+ Map<String, String> requestParameterMap =
context.getExternalContext().getRequestParameterMap();
Object value = requestParameterMap.get("panelMenuAction"+clientId);
if (clientId!=null&&value!=null){
@@ -222,25 +226,31 @@
}
protected String getItemMode(UIComponent component) {
- String parentExpandMode = findMenu(component).getExpandMode();
String parentMode = findMenu(component).getMode();
- if (null == parentMode || "".equals(parentMode))
+ if (null == parentMode || "".equals(parentMode)) {
parentMode = "server";
- if (null == parentExpandMode || "".equals(parentExpandMode))
+ }
+
+ String parentExpandMode = findMenu(component).getExpandMode();
+ if (null == parentExpandMode || "".equals(parentExpandMode)) {
parentExpandMode = "none";
+ }
+
String mode = "none";
if (component instanceof UIPanelMenuGroup) {
UIPanelMenuGroup group = (UIPanelMenuGroup) component;
- if (null != group.getExpandMode() && !
"".equals(group.getExpandMode()))
+ if (null != group.getExpandMode() && !
"".equals(group.getExpandMode())) {
mode = group.getExpandMode();
- else
- mode = parentExpandMode;
+ } else {
+ mode = parentExpandMode;
+ }
} else if (component instanceof UIPanelMenuItem) {
UIPanelMenuItem item = (UIPanelMenuItem) component;
- if (null != item.getMode() && ! "".equals(item.getMode()))
+ if (null != item.getMode() && ! "".equals(item.getMode())) {
mode = item.getMode();
- else
+ } else {
mode = parentMode;
+ }
}
return mode;
}
@@ -255,11 +265,8 @@
while( !(parent instanceof UIPanelMenu) && !(parent instanceof
UIPanelMenuGroup)) {
parent = parent.getParent();
}
- if(parent instanceof UIPanelMenu){
- return true;
- } else {
- return false;
- }
+
+ return parent instanceof UIPanelMenu;
}
/**
Modified:
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -37,27 +37,28 @@
public class PanelMenuGroupRenderer extends PanelMenuRendererBase {
- protected Class getComponentClass() {
+ protected Class<? extends UIComponent> getComponentClass() {
return UIPanelMenuGroup.class;
}
protected void doDecode(FacesContext context, UIComponent component) {
String clientId = component.getClientId(context);
- Map requestMap =context.getExternalContext().getRequestParameterMap();
- UIPanelMenuGroup group = ((UIPanelMenuGroup)component);
+ Map<String, String> requestMap =
+ context.getExternalContext().getRequestParameterMap();
+ UIPanelMenuGroup group = (UIPanelMenuGroup)component;
- if(requestMap.containsKey("panelMenuState"+clientId)){
+ if (requestMap.containsKey("panelMenuState"+clientId)) {
Object property = requestMap.get("panelMenuState"+clientId);
if (property.equals("opened")) {
group.setSubmittedValue("true");
} else if (property.equals("closed")) {
group.setSubmittedValue("false");
}
-
}
+
if(isSubmitted(context, component)){
new ActionEvent(component).queue();
- if ("ajax".equals(getItemMode(component))) {
+ if (UIPanelMenuGroup.EXPAND_MODE_AJAX.equals(getItemMode(component))) {
new AjaxEvent(component).queue();
}
}
@@ -162,8 +163,9 @@
}
}
- if ("".equals(icon))
+ if ("".equals(icon)) {
icon = "custom";
+ }
String source = getIconByType(icon, isTopLevel, context, component);
boolean drawHidden = false;
if (source != null && source.trim().length() == 0) {
@@ -205,7 +207,7 @@
return styleBuffer.toString();
}
- public void insertLabel(FacesContext context, UIComponent component) throws IOException
{
+ public void insertLabel (FacesContext context, UIComponent component) throws IOException
{
Object label = component.getAttributes().get("label");
if (label!=null){
context.getResponseWriter().writeText(label, null);
@@ -217,7 +219,7 @@
throws ConverterException {
UIPanelMenuGroup group = (UIPanelMenuGroup)component;
- if(group.getConverter() != null){
+ if (group.getConverter() != null) {
return group.getConverter().getAsObject(context, component, (String)submittedValue);
} else {
return submittedValue;
@@ -225,7 +227,7 @@
}
- public boolean isOpened(FacesContext context, UIComponent component)throws IOException
{
+ public boolean isOpened (FacesContext context, UIComponent component) throws IOException
{
boolean value = false;
if(component instanceof UIPanelMenuGroup){
@@ -240,11 +242,9 @@
} else {
//check expanded attributes in children groups, if exists
boolean isChildrenExpanded = isChildrenExpanded(component);
- value = isChildrenExpanded && disabled; // ? "opened" :
"closed";
+ value = isChildrenExpanded && disabled;
}
-
}
-
return value;
}
@@ -305,10 +305,11 @@
public String getTableClass(FacesContext context, UIComponent component) {
String result;
- if (isTopLevel(component))
+ if (isTopLevel(component)) {
result = "dr-pmenu-top-group rich-pmenu-top-group ";
- else
+ } else {
result = "dr-pmenu-group";
+ }
return result;
}
@@ -318,4 +319,17 @@
return group.getName().equals(parentMenu.getSelectedName());
}
+ @Override
+ public void renderChildren(FacesContext facesContext, UIComponent component)
+ throws IOException {
+
+ String mode = ((UIPanelMenuGroup) component).getExpandMode();
+ if (UIPanelMenuGroup.EXPAND_MODE_NONE.equalsIgnoreCase(mode)
+ || isOpened(facesContext, component)) {
+ super.renderChildren(facesContext, component);
+ }
+ }
+
+
+
}
Modified:
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -34,7 +34,7 @@
import org.richfaces.renderkit.PanelMenuRendererBase;
public class PanelMenuItemRenderer extends PanelMenuRendererBase {
- protected Class getComponentClass() {
+ protected Class<? extends UIComponent> getComponentClass() {
return UIPanelMenuItem.class;
}
@@ -43,7 +43,6 @@
}
protected void doDecode(FacesContext context, UIComponent component) {
if(isSubmitted(context, component)) {
- UIPanelMenuItem item = (UIPanelMenuItem)component;
new ActionEvent(component).queue();
if ("ajax".equals(getItemMode(component))) {
new AjaxEvent(component).queue();
@@ -88,9 +87,9 @@
throws IOException{
UIPanelMenu panelMenu = findMenu(component);
- ResponseWriter writer = context.getResponseWriter();
- boolean isTopLevel = isTopLevel(component);
- String iconType = null;
+ ResponseWriter writer = context.getResponseWriter();
+ boolean isTopLevel = isTopLevel(component);
+ String iconType = null;
UIPanelMenuItem item = (UIPanelMenuItem)component;
String defaultItemIcon = null;
Modified:
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -51,19 +51,19 @@
* @see org.ajax4jsf.framework.renderer.RendererBase#getComponentClass()
*/
- protected Class getComponentClass() {
+ private static final String FIRST_EXPANDED_ENCODED = "firstExpandedEncoded";
+
+ protected Class<? extends UIComponent> getComponentClass() {
return UIComponent.class;
}
// find and encode UIParameter's components
- public List encodeParams(FacesContext context, UIPanelMenuItem component) throws
IOException {
+ public List<String> encodeParams(FacesContext context, UIPanelMenuItem
menuItem) throws IOException {
- UIPanelMenuItem menuItem = component;
- List params = new ArrayList();
- StringBuffer buff = new StringBuffer();
+ List<String> params = new ArrayList<String>();
- List children = menuItem.getChildren();
- for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+ List<UIComponent> children = menuItem.getChildren();
+ for (Iterator<UIComponent> iterator = children.iterator();
iterator.hasNext();) {
UIComponent child = (UIComponent) iterator.next();
if(child instanceof UIParameter){
@@ -73,14 +73,11 @@
if (name != null) {
Object value = param.getValue();
- buff.append("params[");
- buff.append(ScriptUtils.toScript(name));
- buff.append("] = ");
- buff.append(ScriptUtils.toScript(value));
- buff.append(";");
+ StringBuffer buff = new StringBuffer();
+ buff.append("params[").append(ScriptUtils.toScript(name)).append("] =
")
+ .append(ScriptUtils.toScript(value)).append(";");
params.add(buff.toString());
}
-
}
}
@@ -88,237 +85,255 @@
}
@Override
- protected void preEncodeBegin(FacesContext context, UIComponent component) throws
IOException {
+ protected void preEncodeBegin(FacesContext context, UIComponent component)
+ throws IOException {
+
super.preEncodeBegin(context, component);
-
+
// In case of encoding the UIPanelMenu in "expandSingle=true" mode
// the value of "firstExpandedEncoded" attribute should be reset to
- // initial "false" state
- if (component instanceof UIPanelMenu) {
- UIPanelMenu panelMenu = (UIPanelMenu) component;
- if (panelMenu.isExpandSingle()) {
- panelMenu.getAttributes().put("firstExpandedEncoded", false);
- }
- }
+ // initial "false" state
+ if (component instanceof UIPanelMenu) {
+ UIPanelMenu panelMenu = (UIPanelMenu) component;
+ if (panelMenu.isExpandSingle()) {
+ panelMenu.getAttributes().put(FIRST_EXPANDED_ENCODED, false);
+ }
+ }
}
public void insertScript(FacesContext context, UIComponent component)
throws IOException {
- StringBuffer buffer = new StringBuffer();
- StringBuffer panelMenu = new StringBuffer();
- List flatList = new LinkedList();
- Map levels = new HashMap();
+ StringBuffer buffer = new StringBuffer();
- Set itemNames = new HashSet();
+ Set<String> itemNames = new HashSet<String>();
- UIPanelMenu parentMenu = (UIPanelMenu)component;
+ UIPanelMenu panelMenu = (UIPanelMenu)component;
- boolean expandSingle = parentMenu.isExpandSingle();
-
- String selectedChild = parentMenu.getSelectedName();
-
+ Map<String, Integer> levels = new HashMap<String, Integer>();
+ List<UIComponent> flatList = new LinkedList<UIComponent>();
flatten(component.getChildren(), flatList, levels, 0);
- panelMenu.append("var ids = new PanelMenu('")
- .append(component.getClientId(context).toString())
- .append("',")
- .append(new Boolean(expandSingle).toString())
- .append(",").append("'").append(selectedChild).append("'")
- .append(").getIds();\n");
-
- for (Iterator iter = flatList.iterator(); iter.hasNext();) {
- UIComponent child = (UIComponent) iter.next();
- if ((child instanceof UIPanelMenuItem)||(child instanceof UIPanelMenuGroup)) {
- boolean childDisabled;
- if (!((UIPanelMenu)component).isDisabled())
- childDisabled = child instanceof UIPanelMenuGroup ?
((UIPanelMenuGroup)child).isDisabled() : ((UIPanelMenuItem)child).isDisabled();
- else
- childDisabled = true;
- boolean childRendered = child instanceof UIPanelMenuGroup ?
((UIPanelMenuGroup)child).isRendered() : ((UIPanelMenuItem)child).isRendered();
- boolean parentRendered = true;
- if (! (child.getParent() instanceof UIPanelMenu))
- parentRendered = child.getParent() instanceof UIPanelMenuGroup ?
((UIPanelMenuGroup)child.getParent()).isRendered() :
((UIPanelMenuItem)child.getParent()).isRendered();
- if (!parentRendered){
- child.getAttributes().put("rendered",Boolean.FALSE);
- }
-
- //UIPanelMenu parentMenu = findMenu(child);
-
- String event = parentMenu.getEvent();
- if ("".equals(event))
- event = "click";
- else if (event.startsWith("on"))
- event = event.substring(2);
-
- String onopen = (child instanceof UIPanelMenuGroup) &&
!((UIPanelMenuGroup)child).isDisabled() && !isParentDisabled(child) ?
- parentMenu.getOngroupexpand() + ";" +
((UIPanelMenuGroup)child).getOnexpand() : "";
- String onclose = (child instanceof UIPanelMenuGroup) &&
!((UIPanelMenuGroup)child).isDisabled() && !isParentDisabled(child) ?
- parentMenu.getOngroupcollapse() + ";" +
((UIPanelMenuGroup)child).getOncollapse() : "";
- String hoveredStyle = (child instanceof UIPanelMenuGroup ?
- parentMenu.getHoveredGroupStyle() : parentMenu.getHoveredItemStyle())
- + ";" + (child instanceof UIPanelMenuGroup ?
- ((UIPanelMenuGroup)child).getHoverStyle() :
((UIPanelMenuItem)child).getHoverStyle());
- String hoveredClass = (child instanceof UIPanelMenuGroup ?
- parentMenu.getHoveredGroupClass() : parentMenu.getHoveredItemClass())
- + " " + (child instanceof UIPanelMenuGroup ?
- ((UIPanelMenuGroup)child).getHoverClass() :
((UIPanelMenuItem)child).getHoverClass());
- String [] hoveredStyles = hoveredStyle.split(";");
- String [] hoveredClasses = hoveredClass.split(" ");
-
- String mode = getItemMode(child);
- Object target = child.getAttributes().get("target");
- String targetString;
- if (null == target)
- targetString = "";
- else
- targetString = target.toString();
-
-
-
-
- if (childRendered && parentRendered){
- if ( !isParentDisabled(child) ){
- String childName;
- if(child instanceof UIPanelMenuGroup){
- childName = ((UIPanelMenuGroup)child).getName();
- } else {
- childName = ((UIPanelMenuItem)child).getName();
- }
-
- if(itemNames.contains(childName)){
- throw new RuntimeException("Attibute \"name\" with value
\"" + childName + "\" is already used in PanelMenu. It must be unique
for every group/item.");
- } else {
- itemNames.add(childName);
- }
-
- buffer.append("var params = new Object();");
+ for (UIComponent child : flatList) {
+ if (!(child instanceof UIPanelMenuItem || child instanceof UIPanelMenuGroup)) {
+ continue;
+ }
+
+ boolean parentRendered = child.getParent().isRendered();
+ if (!parentRendered) {
+ child.getAttributes().put("rendered",Boolean.FALSE);
+ }
+
+ boolean childRendered = child.isRendered();
+ if (!childRendered || !parentRendered || isParentDisabled(child) ||
!isParentExpended(child)) {
+ continue;
+ }
+
+ boolean childDisabled = panelMenu.isDisabled()
+ || child instanceof UIPanelMenuGroup ? ((UIPanelMenuGroup)child).isDisabled() :
((UIPanelMenuItem)child).isDisabled();
+
+
+ String childName;
+ if(child instanceof UIPanelMenuGroup){
+ childName = ((UIPanelMenuGroup)child).getName();
+ } else {
+ childName = ((UIPanelMenuItem)child).getName();
+ }
+
+ if(itemNames.contains(childName)){
+ throw new RuntimeException("Attibute \"name\" with value \""
+ childName + "\" is already used in PanelMenu. It must be unique for every
group/item.");
+ } else {
+ itemNames.add(childName);
+ }
+
+ buffer.append("var params = new Object();");
- if(child instanceof UIPanelMenuItem){
- List paramsList = encodeParams(context, (UIPanelMenuItem)child);
- if(!paramsList.isEmpty()){
- for (Iterator iterator = paramsList.iterator(); iterator.hasNext();) {
- buffer.append((String)iterator.next());
- }
- }
- }
-
- buffer
- .append("new PanelMenuItem(ids, params,{myId:'")
- .append((String) child.getClientId(context))
- .append("',parentId:'")
- .append((String) child.getParent().getClientId(context))
- .append("'},{type:" + (child instanceof UIPanelMenuItem ?
"\"item\"":"\"node\""))
- .append(",onopen:"+("".equals(onopen) ?
"\"\"" : "\"" + onopen +
"\"")+",onclose:"+("".equals(onclose) ?
"\"\"" : "\"" + onclose + "\""))
- .append(",event:\"" + event + "\"")
- .append(",mode:\"" + mode + "\"")
- .append(",target:\"" + targetString + "\"")
- .append(",disabled:" + new Boolean(childDisabled).toString())
- .append(",target:\"" + targetString + "\"")
- .append(",name:\"" + childName + "\"")
- .append("},{");
-
- for (int i = 0; i < hoveredStyles.length; i++)
- if (!"".equals(hoveredStyles[i])) {
- String [] temp = hoveredStyles[i].split(":");
- String cssName = temp[0].trim();
- String cssValue = temp[1].trim();
- buffer.append("\"" + cssName + "\": \"" +
cssValue + "\"");
- if (i != hoveredStyles.length - 1)
- buffer.append(",");
- }
-
- buffer.append("},");
- if (hoveredClasses.length > 0) {
- buffer.append("new Array(");
- for (int i = 0; i < hoveredClasses.length; i++)
- if (!"".equals(hoveredClasses[i])) {;
- buffer.append("\"" + hoveredClasses[i] + "\"");
- if (i != hoveredClasses.length - 1)
- buffer.append(",");
- }
- buffer.append("),");
- } else
- buffer.append("new Array(),");
-
- buffer.append(levels.get(child.getClientId(context)));
- switchOnImagesIfNeeded(context,child,buffer);
-
- addActionIfNeeded(context,child,buffer);
-
- setExpandedIfNeeded(context,child,buffer);
-
- addAjaxFunction(context,child,buffer);
-
- addOnItemHover(parentMenu.getOnitemhover(), child, buffer);
-
- String iconPos = "left";
- boolean isTopLevel = isTopLevel(child);
- if(child instanceof UIPanelMenuGroup){
- iconPos = isTopLevel ? parentMenu.getIconGroupTopPosition() :
parentMenu.getIconGroupPosition();
- } else {
- iconPos = isTopLevel ? parentMenu.getIconItemTopPosition() :
parentMenu.getIconItemPosition();
- }
-
- buffer.append(","+'"'+iconPos+'"');
-
- addImages(buffer,context,child,component.getClientId(context).toString());
-
- buffer.append(");\n");
- }
- } else {
- continue;
+ if (child instanceof UIPanelMenuItem) {
+ for (String param : encodeParams(context, (UIPanelMenuItem)child)) {
+ buffer.append(param);
}
}
+
+ buffer.append("new PanelMenuItem(ids, params,")
+
.append("{myId:'").append(child.getClientId(context)).append("',")
+
.append("parentId:'").append(child.getParent().getClientId(context)).append("'},")
+ .append("{type:").append(child instanceof UIPanelMenuItem ?
"\"item\"":"\"node\"").append(",")
+ .append("onopen:").append(getOnOpen(panelMenu,
child)).append(",")
+ .append("onclose:").append(getNoClose(panelMenu,
child)).append(",")
+
.append("event:\"").append(getEvent(panelMenu)).append("\",")
+
.append("mode:\"").append(getItemMode(child)).append("\",")
+ .append("disabled:").append(childDisabled).append(",")
+
.append("target:\"").append(getTarget(child)).append("\",")
+ .append("name:\"").append(childName).append("\"")
+ .append("},{").append(getHoveredStyle(panelMenu,
child)).append("},")
+ .append(getHoverClass(panelMenu, child))
+ .append(levels.get(child.getClientId(context)))
+ .append(switchOnImagesIfNeeded(context,child));
+
+ addActionIfNeeded(context,child,buffer);
+
+ setExpandedIfNeeded(context,child,buffer);
+
+ addAjaxFunction(context,child,buffer);
+
+ addOnItemHover(panelMenu.getOnitemhover(), child, buffer);
+
+ String iconPos;
+ boolean isTopLevel = isTopLevel(child);
+ if(child instanceof UIPanelMenuGroup){
+ iconPos = isTopLevel ? panelMenu.getIconGroupTopPosition() :
panelMenu.getIconGroupPosition();
+ } else {
+ iconPos = isTopLevel ? panelMenu.getIconItemTopPosition() :
panelMenu.getIconItemPosition();
+ }
+
+ buffer.append(",\""+iconPos+'"');
+
+ addImages(buffer, context, child, component.getClientId(context).toString());
+
+ buffer.append(");\n");
}
ResponseWriter writer = context.getResponseWriter();
writer.startElement(HTML.SCRIPT_ELEM, component);
writer.writeAttribute(HTML.id_ATTRIBUTE, "script" +
component.getClientId(context), null);
writer.writeAttribute(HTML.TYPE_ATTR, "text/javascript", null);
- writer.writeText(panelMenu, null);
+ writer.writeText(getPanelMenuScript(context, panelMenu), null);
writer.writeText(buffer, null);
writer.endElement(HTML.SCRIPT_ELEM);
}
+
+ private String getNoClose(UIPanelMenu panelMenu, UIComponent child) {
+ String onclose = (child instanceof UIPanelMenuGroup) &&
!((UIPanelMenuGroup)child).isDisabled() && !isParentDisabled(child)
+ ? panelMenu.getOngroupcollapse() + ";" +
((UIPanelMenuGroup)child).getOncollapse() : "";
+ return "".equals(onclose) ? "\"\"" :
"\"" + onclose + "\"";
+ }
+
+ private String getOnOpen(UIPanelMenu panelMenu, UIComponent child) {
+ String onopen = (child instanceof UIPanelMenuGroup) &&
!((UIPanelMenuGroup)child).isDisabled() && !isParentDisabled(child)
+ ? panelMenu.getOngroupexpand() + ";" +
((UIPanelMenuGroup)child).getOnexpand() : "";
+ return "".equals(onopen) ? "\"\"" :
"\"" + onopen + "\"";
+ }
+
+ private String getTarget(UIComponent child) {
+ Object target = child.getAttributes().get("target");
+ return null == target ? "" : target.toString();
+ }
+
+ private String getHoverClass(UIPanelMenu panelMenu, UIComponent child) {
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("new Array(");
+ if (child instanceof UIPanelMenuGroup) {
+ String hoveredGroupClass = panelMenu.getHoveredGroupClass();
+ if (!"".equals(hoveredGroupClass)) {
+
buffer.append("\"").append(hoveredGroupClass).append("\"");
+ }
+ } else {
+ String hoveredItemClass = panelMenu.getHoveredItemClass();
+ if (!"".equals(hoveredItemClass)) {
+
buffer.append("\"").append(hoveredItemClass).append("\"");
+ }
+
+ buffer.append(",");
+
+ String hoverClass = child instanceof UIPanelMenuGroup
+ ? ((UIPanelMenuGroup)child).getHoverClass() :
((UIPanelMenuItem)child).getHoverClass();
+ if (!"".equals(hoverClass)) {
+
buffer.append("\"").append(hoverClass).append("\"");
+ }
+ }
+ buffer.append("),");
+ return buffer.toString();
+ }
+
+ private String getHoveredStyle(UIPanelMenu panelMenu, UIComponent child) {
+ String hoveredStyle = (child instanceof UIPanelMenuGroup
+ ? panelMenu.getHoveredGroupStyle() : panelMenu.getHoveredItemStyle()) +
";" +
+ (child instanceof UIPanelMenuGroup ?
((UIPanelMenuGroup)child).getHoverStyle() : ((UIPanelMenuItem)child).getHoverStyle());
+ String [] hoveredStyles = hoveredStyle.split(";");
+
+ StringBuffer buffer = new StringBuffer();
+ for (int i = 0; i < hoveredStyles.length; i++) {
+ if (!"".equals(hoveredStyles[i])) {
+ String [] temp = hoveredStyles[i].split(":");
+ String cssName = temp[0].trim();
+ String cssValue = temp[1].trim();
+ buffer.append("\"" + cssName + "\":
\"" + cssValue + "\"");
+ if (i != hoveredStyles.length - 1) {
+ buffer.append(",");
+ }
+ }
+ }
+
+ return buffer.toString();
+ }
+
+ private String getEvent(UIPanelMenu panelMenu) {
+ String event = panelMenu.getEvent();
+ if ("".equals(event)) {
+ event = "click";
+ } else if (event.startsWith("on")) {
+ event = event.substring(2);
+ }
+ return event;
+ }
+
+ private StringBuffer getPanelMenuScript(FacesContext context, UIPanelMenu parentMenu)
{
+ StringBuffer panelMenu = new StringBuffer();
+ panelMenu.append("var ids = new PanelMenu('")
+ .append(parentMenu.getClientId(context).toString())
+ .append("',")
+ .append(parentMenu.isExpandSingle())
+ .append(",").append("'").append(parentMenu.getSelectedName()).append("'")
+ .append(").getIds();\n");
+ return panelMenu;
+ }
- public void flatten(List children, List flatList, Map levels,int initialLevel) {
- FacesContext context = FacesContext.getCurrentInstance();
- if (children != null) {
- for (Iterator iter = children.iterator(); iter.hasNext();) {
- UIComponent child = (UIComponent) iter.next();
- if (child instanceof UIPanelMenu){
- continue;
- }
- flatList.add(child);
- levels.put(child.getClientId(context), new Integer(initialLevel));
- flatten(child.getChildren(), flatList, levels, initialLevel + 1);
+ public void flatten(List<UIComponent> children, List<UIComponent> flatList,
+ Map<String, Integer> levels, int initialLevel) {
+
+ FacesContext context = FacesContext.getCurrentInstance();
+ if (children == null) {
+ return;
+ }
+
+ for (Iterator<UIComponent> iter = children.iterator(); iter.hasNext();) {
+ UIComponent child = iter.next();
+ if (child instanceof UIPanelMenu){
+ continue;
}
+
+ flatList.add(child);
+ levels.put(child.getClientId(context), initialLevel);
+
+ flatten(child.getChildren(), flatList, levels, initialLevel + 1);
}
}
- private void switchOnImagesIfNeeded(FacesContext context, UIComponent child,
StringBuffer buffer)throws IOException {
- boolean isToplevel = isTopLevel(child);
- String customIconOpened = "";
- String customIconClosed = "";
+ private String switchOnImagesIfNeeded(FacesContext context, UIComponent child)throws
IOException {
+ boolean isToplevel = isTopLevel(child);
+ String customIconOpened = "";
+ String customIconClosed = "";
UIPanelMenu panelMenu = findMenu(child);
if(panelMenu == null){
- return;
+ return "";
}
- String iconOpened = isToplevel ? panelMenu.getIconExpandedTopGroup() :
panelMenu.getIconExpandedGroup();
- String iconClosed = isToplevel ? panelMenu.getIconCollapsedTopGroup() :
panelMenu.getIconCollapsedGroup();
+ String iconOpened = isToplevel ? panelMenu.getIconExpandedTopGroup() :
panelMenu.getIconExpandedGroup();
+ String iconClosed = isToplevel ? panelMenu.getIconCollapsedTopGroup() :
panelMenu.getIconCollapsedGroup();
try {
customIconOpened = (String)child.getAttributes().get("iconOpened");
customIconClosed = (String)child.getAttributes().get("iconClosed");
} catch (Exception e) {}
+ StringBuffer buffer = new StringBuffer();
if (child instanceof UIPanelMenuItem){
buffer.append(",false");
} else {
- if
(iconClosed.equals("custom")&&iconOpened.equals("custom")){
- if
(customIconClosed.equals("")&&customIconOpened.equals("")){
+ if (iconClosed.equals("custom") &&
iconOpened.equals("custom")){
+ if (customIconClosed.equals("") &&
customIconOpened.equals("")){
buffer.append(",false");
} else {
buffer.append(",true");
@@ -327,6 +342,7 @@
buffer.append(",true");
}
}
+ return buffer.toString();
}
private void addActionIfNeeded(FacesContext context,UIComponent child,StringBuffer
buffer){
@@ -338,7 +354,8 @@
buffer.append(",true");
}
} else {
- if
(((UIPanelMenuGroup)child).getAction()!=null&&!((UIPanelMenuGroup)child).getAction().equals("")){
+ if (((UIPanelMenuGroup) child).getAction() != null &&
+ !((UIPanelMenuGroup)child).getAction().equals("")){
buffer.append(",'panelMenuNodeAction'");
} else {
buffer.append(",false");
@@ -421,11 +438,11 @@
}
if(customItemIcon != null && !customItemIcon.equals("")){
- buffer.append(","+'"'+customIconSource+'"').append(","+'"'+customIconSource+'"'+"
");
+ buffer.append(",\""+customIconSource).append("\",\""+customIconSource+"\"
");
} else if (defaultItemIcon != null && !defaultItemIcon.equals("")){
- buffer.append(","+'"'+defaultItemIconSrc+'"').append(","+'"'+defaultItemIconSrc+'"'+"
");
+ buffer.append(",\""+defaultItemIconSrc).append("\",\""+defaultItemIconSrc+"\"
");
} else {
- buffer.append(","+'"'+PANEL_MENU_SPACER_ICON+'"').append(","+'"'+PANEL_MENU_SPACER_ICON+'"'+"
");
+ buffer.append(",\""+PANEL_MENU_SPACER_ICON).append("\",\""+PANEL_MENU_SPACER_ICON+"\"
");
}
buffer.append(",\"\" ");
@@ -465,43 +482,35 @@
defaultIconNodeOpened = panelMenu.getIconExpandedGroup();
}
- String defaultIconNodeClosedSrc = getIconByType(defaultIconNodeClosed,
isTopLevel,context, component);
String defaultIconNodeOpenedSrc = getIconByType(defaultIconNodeOpened,
isTopLevel,context, component);
-
- String iconExpanded = "";
- String iconCollapsed = "";
- String iconExpandedSource = "";
- String iconCollapsedSource = "";
-
- iconExpanded = group.isDisabled() ? group.getIconDisabled() :
group.getIconExpanded();
- iconCollapsed = group.isDisabled() ? group.getIconDisabled() :
group.getIconCollapsed();
- iconExpandedSource = getIconByType(iconExpanded,isTopLevel,context,component);
- iconCollapsedSource = getIconByType(iconCollapsed,isTopLevel,context,component);
-
+ String iconExpanded = group.isDisabled() ? group.getIconDisabled() :
group.getIconExpanded();
+ String iconExpandedSource = getIconByType(iconExpanded,isTopLevel,context,component);
if(iconExpanded != null && !iconExpanded.equals("")){
- buffer.append(","+'"'+ iconExpandedSource +
'"');
+ buffer.append(",\"" + iconExpandedSource + '"');
} else if(defaultIconNodeOpened != null &&
!defaultIconNodeOpened.equals("")){
- buffer.append(","+'"'+defaultIconNodeOpenedSrc +
'"');
+ buffer.append(",\"" + defaultIconNodeOpenedSrc + '"');
} else {
- buffer.append(","+'"'+PANEL_MENU_SPACER_ICON +
'"');
+ buffer.append(",\"" + PANEL_MENU_SPACER_ICON + '"');
}
-
+
+ String defaultIconNodeClosedSrc = getIconByType(defaultIconNodeClosed,
isTopLevel,context, component);
+ String iconCollapsed = group.isDisabled() ? group.getIconDisabled() :
group.getIconCollapsed();
+ String iconCollapsedSource =
getIconByType(iconCollapsed,isTopLevel,context,component);
if(iconCollapsed != null && !iconCollapsed.equals("")){
- buffer.append(","+'"'+iconCollapsedSource+'"');
+ buffer.append(",\"" + iconCollapsedSource + '"');
} else if(defaultIconNodeClosed != null &&
!defaultIconNodeClosed.equals("")){
- buffer.append(","+'"'+defaultIconNodeClosedSrc+'"');
+ buffer.append(",\"" + defaultIconNodeClosedSrc + '"');
} else {
- buffer.append(","+'"'+PANEL_MENU_SPACER_ICON +
'"');
+ buffer.append(",\"" + PANEL_MENU_SPACER_ICON + '"');
}
}
buffer.append(",\"" + PANEL_MENU_SPACER_ICON + "\"");
}
protected void addAjaxFunction(FacesContext context, UIComponent child, StringBuffer
buffer) {
- JSFunction function = AjaxRendererUtils.buildAjaxFunction(child,
- context);
- Map eventOptions = AjaxRendererUtils.buildEventOptions(context,
- child);
+ JSFunction function = AjaxRendererUtils.buildAjaxFunction(child, context);
+ Map<String, Object> eventOptions =
+ AjaxRendererUtils.buildEventOptions(context, child);
function.addParameter(eventOptions);
buffer.append(",\"");
@@ -509,45 +518,46 @@
buffer.append("\"");
}
- protected void addOnItemHover(String menuOnItemHover, UIComponent child, StringBuffer
buffer) {
+ protected void addOnItemHover(String menuOnItemHover, UIComponent child,
+ StringBuffer buffer) {
buffer.append(",\"");
- if(child instanceof UIPanelMenuItem){
- if(menuOnItemHover != null && !menuOnItemHover.equals(""))
buffer.append(menuOnItemHover);
- }
- buffer.append("\"");
- }
+ if (child instanceof UIPanelMenuItem) {
+ if (menuOnItemHover != null &&
!menuOnItemHover.equals(""))
+ buffer.append(menuOnItemHover);
+ }
+ buffer.append("\"");
+ }
public void renderChildren(FacesContext facesContext, UIComponent component)throws
IOException {
+ if(!(component instanceof UIPanelMenu)) {
+ return;
+ }
- if(component instanceof UIPanelMenu){
- UIPanelMenu panelMenu = (UIPanelMenu)component;
- if(panelMenu.getChildCount() > 0){
- for (Iterator it = component.getChildren().iterator(); it.hasNext();) {
- UIComponent child = (UIComponent) it.next();
- if(child instanceof UIPanelMenuGroup) {
- UIPanelMenuGroup group = (UIPanelMenuGroup)child;
-
- if(panelMenu.isExpandSingle()) {
- if(!(Boolean)panelMenu.getAttributes().get("firstExpandedEncoded")) {
- if(group.isExpanded()) {
- panelMenu.getAttributes().put("firstExpandedEncoded", true);
- }
- }else {
- group.setExpanded(false);
- if((Boolean)group.getValue()){
- group.setValue(null);
- }
- }
- }
+ UIPanelMenu panelMenu = (UIPanelMenu)component;
+ for (Iterator<UIComponent> it = component.getChildren().iterator();
it.hasNext();) {
+ UIComponent child = (UIComponent) it.next();
+ if (child instanceof UIPanelMenuGroup) {
+ UIPanelMenuGroup group = (UIPanelMenuGroup)child;
+
+ if (panelMenu.isExpandSingle()) {
+ if (!(Boolean)panelMenu.getAttributes().get(FIRST_EXPANDED_ENCODED)) {
+ if (group.isExpanded()) {
+ panelMenu.getAttributes().put(FIRST_EXPANDED_ENCODED, true);
+ }
+ } else {
+ group.setExpanded(false);
+ if ((Boolean)group.getValue()) {
+ group.setValue(null);
+ }
}
- renderChild(facesContext, child);
- }
+ }
}
+ renderChild(facesContext, child);
}
}
public void doDecode(FacesContext context, UIComponent component) {
- Map requestMap = context.getExternalContext().getRequestParameterMap();
+ Map<String, String> requestMap =
context.getExternalContext().getRequestParameterMap();
String menuClientId = component.getClientId(context);
UIPanelMenu menu = ((UIPanelMenu)component);
Object selectedItemName = requestMap.get(menuClientId + "selectedItemName");
Modified:
trunk/ui/panelmenu/src/main/resources/org/richfaces/renderkit/html/scripts/panelMenu.js
===================================================================
---
trunk/ui/panelmenu/src/main/resources/org/richfaces/renderkit/html/scripts/panelMenu.js 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/panelmenu/src/main/resources/org/richfaces/renderkit/html/scripts/panelMenu.js 2009-02-18
17:32:02 UTC (rev 12689)
@@ -82,8 +82,9 @@
this.myId = ids.myId;
this.mode = options.mode;
- if (!this.mode)
+ if (!this.mode) {
this.mode = ("node" == this.type) ? "none" : "server";
+ }
this.ajaxSubmit = ajaxFunction;
this.onItemHover = onItemHover;
@@ -92,6 +93,7 @@
this.hoveredStyles = hoveredStyles;
this.hoveredClasses = hoveredClasses;
this.tdhider = Element.extend(idsMap[ids.myId]);
+
if (!this.tdhider) {
this.tdhider = $(ids.myId);
}
@@ -115,6 +117,7 @@
}
parent = parent.parentObj;
}
+
// parent - root menu object
this.rootMenu = parent;
@@ -158,13 +161,14 @@
this._attachBehaviors();
this.inputs = this._getDirectChildrenByTag(this.content,"INPUT");
- for (var i=0;i<this.inputs.length;i++){
- if (this.inputs[i].name.indexOf("panelMenuState")!=-1){
- this.inputState = this.inputs[i];
- } else if (this.inputs[i].name.indexOf("panelMenuAction")!=-1){
- this.inputAction = this.inputs[i];
- }
- }
+ for (var i=0;i<this.inputs.length;i++){
+ if (this.inputs[i].name.indexOf("panelMenuState")!=-1){
+ this.inputState = this.inputs[i];
+ } else if (this.inputs[i].name.indexOf("panelMenuAction")!=-1){
+ this.inputAction = this.inputs[i];
+ }
+ }
+
if (opened){
this.parentObj.lastExpanded = this;
this.expand();
Modified:
trunk/ui/panelmenu/src/test/java/org/richfaces/component/PanelMenuComponentTest.java
===================================================================
---
trunk/ui/panelmenu/src/test/java/org/richfaces/component/PanelMenuComponentTest.java 2009-02-18
14:16:10 UTC (rev 12688)
+++
trunk/ui/panelmenu/src/test/java/org/richfaces/component/PanelMenuComponentTest.java 2009-02-18
17:32:02 UTC (rev 12689)
@@ -35,6 +35,7 @@
import org.ajax4jsf.resource.image.ImageInfo;
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
+import com.gargoylesoftware.htmlunit.ElementNotFoundException;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.sun.faces.application.ActionListenerImpl;
@@ -43,7 +44,7 @@
* Unit test for simple Component.
*/
public class PanelMenuComponentTest extends AbstractAjax4JsfTestCase {
- private static Set javaScripts = new HashSet();
+ private static Set<String> javaScripts = new HashSet<String>();
private static final boolean IS_PAGE_AVAILABILITY_CHECK = true;
private String[] imageResources = new String[]{
@@ -84,7 +85,36 @@
private UIPanelMenuGroup group3;
private UIPanelMenuItem item1;
private UIPanelMenuItem item2;
+ private UIPanelMenuItem item3;
+
+ /*
+ <viewRoot>
+ <from id="form">
+ <panelMenu id="panelMenu" >
+ <panelMenuGroup id="group1" disabled="true"
expandMode="none" >
+ <panelMenuItem id="item1" ></panelMenuItem>
+ </panelMenuGroup>
+ <panelMenuGroup id="group2" value="true">
+ <panelMenuGroup id="subgroup" > <!-- in this case
content don't rendered -->
+ <panelMenuItem id="item3" />
+ </panelMenuGroup>
+
+ <panelMenuItem id="item2"
disabled="true"/>
+ <panelMenuItem id="triangleItem"
icon="triangle" />
+ <panelMenuItem id="spacerItem" icon="spacer"
/>
+ <panelMenuItem id="triangleDownItem"
icon="triangleDown" />
+ <panelMenuItem id="triangleUpItem"
icon="triangleUp" />
+ <panelMenuItem id="chevronItem" icon="chevron"
/>
+ <panelMenuItem id="chevronUpItem"
icon="chevronUp" />
+ <panelMenuItem id="chevronDownItem"
icon="chevronDown" />
+ <panelMenuItem id="discItem" icon="disc"
/>
+ <panelMenuItem id="gridItem" icon="grid"
/>
+ </panelMenuGroup>
+ </panelMenu>
+ </form>
+ </viewRoot>
+ */
public void setUp() throws Exception {
super.setUp();
@@ -102,11 +132,13 @@
group1 =
(UIPanelMenuGroup)application.createComponent("org.richfaces.panelMenuGroup");
group1.setId("group1");
+ group1.setExpandMode("none");
group1.setDisabled(true);
panelMenu.getChildren().add(group1);
group2 =
(UIPanelMenuGroup)application.createComponent("org.richfaces.panelMenuGroup");
group2.setId("group2");
+ group2.setValue(true);
panelMenu.getChildren().add(group2);
item1 =
(UIPanelMenuItem)application.createComponent("org.richfaces.panelMenuItem");
@@ -116,6 +148,11 @@
group3 =
(UIPanelMenuGroup)application.createComponent("org.richfaces.panelMenuGroup");
group3.setId("subgroup");
group2.getChildren().add(group3);
+
+ item3 =
(UIPanelMenuItem)application.createComponent("org.richfaces.panelMenuItem");
+ item3.setId("item3");
+ group3.getChildren().add(item3);
+
item2 =
(UIPanelMenuItem)application.createComponent("org.richfaces.panelMenuItem");
item2.setId("item2");
@@ -137,7 +174,7 @@
item.setId("triangleDownItem");
item.setIcon("triangleDown");
group2.getChildren().add(item);
-
+
item =
(UIPanelMenuItem)application.createComponent("org.richfaces.panelMenuItem");
item.setId("triangleUpItem");
item.setIcon("triangleUp");
@@ -188,7 +225,6 @@
public void testRender() throws Exception {
HtmlPage page = renderView();
assertNotNull(page);
- //System.out.println(page.asXml());
HtmlElement div = page.getHtmlElementById(panelMenu.getClientId(facesContext));
assertNotNull(div);
@@ -231,6 +267,12 @@
assertNotNull(rightIcon);
assertEquals("img", rightIcon.getNodeName());
+ try {
+ page.getHtmlElementById(item3.getClientId(facesContext));
+ } catch (ElementNotFoundException e) {
+ // it is right this element must be absent
+ }
+
HtmlElement firstItemHide = page.getHtmlElementById("tablehide" +
item1.getClientId(facesContext));
assertNotNull(firstItemHide);
assertEquals("table", firstItemHide.getNodeName());