Author: pyaschenko
Date: 2011-02-25 06:53:36 -0500 (Fri, 25 Feb 2011)
New Revision: 21933
Modified:
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenuGroup.java
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenuItem.java
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java
branches/4.0.0.CR1/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/panelMenu.js
branches/4.0.0.CR1/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/panelMenuItem.js
Log:
https://jira.jboss.org/browse/RF-10517
Modified:
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenuGroup.java
===================================================================
---
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenuGroup.java 2011-02-25
10:46:14 UTC (rev 21932)
+++
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenuGroup.java 2011-02-25
11:53:36 UTC (rev 21933)
@@ -30,6 +30,7 @@
import javax.el.MethodExpression;
import javax.el.ValueExpression;
+import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.FacesEvent;
import javax.faces.event.PhaseId;
@@ -126,8 +127,8 @@
}
@Attribute
- public boolean isExpanded() {
- return getValue() == null ? false : (Boolean) getValue();
+ public Boolean isExpanded() {
+ return (Boolean) getValue();
}
public void setExpanded(boolean expanded) {
@@ -323,4 +324,46 @@
@Attribute(events = @EventName("beforeselect"))
public abstract String getOnbeforeselect();
+
+ public boolean hasActiveItem(UIComponent component, String activeItem) {
+ if (activeItem == null) {
+ return false;
+ }
+ if (component instanceof AbstractPanelMenuItem) {
+ AbstractPanelMenuItem item = (AbstractPanelMenuItem) component;
+ if (activeItem.equals(item.getName())) {
+ return true;
+ }
+ }
+
+ if (component instanceof AbstractPanelMenuGroup) {
+ AbstractPanelMenuGroup group = (AbstractPanelMenuGroup) component;
+ if (!group.getPanelMenu().isBubbleSelection()) {
+ return false;
+ }
+ }
+
+ if (component.getChildCount() > 0) {
+ for (UIComponent child : component.getChildren()) {
+ if (!child.isRendered()) {
+ continue;
+ }
+
+ if (!(child instanceof AbstractPanelMenuItem)) {
+ continue;
+ }
+
+ if (hasActiveItem(child, activeItem)) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public boolean getState() {
+ Boolean flag = this.isExpanded();
+ return (flag == null ? this.hasActiveItem(this,
this.getPanelMenu().getActiveItem()) : flag);
+ }
}
Modified:
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenuItem.java
===================================================================
---
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenuItem.java 2011-02-25
10:46:14 UTC (rev 21932)
+++
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenuItem.java 2011-02-25
11:53:36 UTC (rev 21933)
@@ -45,6 +45,10 @@
protected AbstractPanelMenuItem() {
setRendererType("org.richfaces.PanelMenuItemRenderer");
}
+
+ public boolean isActiveItem() {
+ return this.getName().equals(this.getPanelMenu().getActiveItem());
+ }
public boolean isTopItem() {
return getParentItem() instanceof AbstractPanelMenu;
Modified:
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java
===================================================================
---
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java 2011-02-25
10:46:14 UTC (rev 21932)
+++
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java 2011-02-25
11:53:36 UTC (rev 21933)
@@ -43,14 +43,11 @@
import javax.faces.context.ResponseWriter;
import javax.faces.event.ActionEvent;
-import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.JSObject;
-import org.ajax4jsf.javascript.ScriptUtils;
import org.richfaces.PanelMenuMode;
import org.richfaces.cdk.annotations.JsfRenderer;
import org.richfaces.component.AbstractPanelMenuGroup;
import org.richfaces.component.AbstractPanelMenuItem;
-import org.richfaces.renderkit.HtmlConstants;
import com.google.common.base.Strings;
@@ -117,7 +114,7 @@
writer.writeAttribute(ID_ATTRIBUTE, expanded, null);
writer.writeAttribute(NAME_ATTRIBUTE, expanded, null);
writer.writeAttribute(TYPE_ATTR, INPUT_TYPE_HIDDEN, null);
- writer.writeAttribute(VALUE_ATTRIBUTE, String.valueOf(menuGroup.isExpanded()),
null);
+ writer.writeAttribute(VALUE_ATTRIBUTE, String.valueOf(menuGroup.getState()),
null);
writer.endElement(INPUT_ELEM);
encodeHeader(writer, context, menuGroup);
@@ -128,7 +125,8 @@
writer.startElement(DIV_ELEM, null);
writer.writeAttribute(ID_ATTRIBUTE, menuGroup.getClientId(context) +
":hdr", null);
writer.writeAttribute(CLASS_ATTRIBUTE, concatClasses(getCssClass(menuGroup,
"-hdr"),
- "rf-pm-hdr-" + (menuGroup.isExpanded() ? "exp" :
"colps"),
+ "rf-pm-hdr-" + (menuGroup.getState() ? "exp" :
"colps"),
+ (menuGroup.getPanelMenu().isBubbleSelection() &&
menuGroup.hasActiveItem(menuGroup, menuGroup.getPanelMenu().getActiveItem()) ?
getCssClass(menuGroup, "-sel") : ""),
PanelMenuItemRenderer.isParentPanelMenuDisabled(menuGroup) ||
menuGroup.isDisabled() ? getCssClass(menuGroup, "-hdr-dis") : null), null);
(menuGroup.isTopItem() ? topHeaderRenderer : headerRenderer).encodeHeader(writer,
context, menuGroup);
@@ -143,7 +141,7 @@
private void encodeContentBegin(ResponseWriter writer, FacesContext context,
AbstractPanelMenuGroup menuGroup) throws IOException {
writer.startElement(DIV_ELEM, null);
writer.writeAttribute(ID_ATTRIBUTE, menuGroup.getClientId(context) +
":cnt", null);
- writer.writeAttribute(CLASS_ATTRIBUTE, concatClasses(getCssClass(menuGroup,
"-cnt"), menuGroup.isExpanded() ? "rf-pm-exp" :
"rf-pm-colps"), null);
+ writer.writeAttribute(CLASS_ATTRIBUTE, concatClasses(getCssClass(menuGroup,
"-cnt"), menuGroup.getState() ? "rf-pm-exp" :
"rf-pm-colps"), null);
writeJavaScript(writer, context, menuGroup);
}
@@ -202,9 +200,10 @@
options.put("disabled",
PanelMenuItemRenderer.isParentPanelMenuDisabled(panelMenuGroup) ||
panelMenuGroup.isDisabled());
options.put("expandEvent", getExpandEvent(panelMenuGroup));
options.put("collapseEvent", getCollapseEvent(panelMenuGroup));
- options.put("expanded", panelMenuGroup.isExpanded());
+ options.put("expanded", panelMenuGroup.getState());
options.put("selectable", panelMenuGroup.isSelectable());
options.put("unselectable", panelMenuGroup.isUnselectable());
+ options.put("stylePrefix", getCssClass(panelMenuGroup, ""));
addEventOption(context, panelMenuGroup, options, COLLAPSE);
addEventOption(context, panelMenuGroup, options, EXPAND);
@@ -235,40 +234,6 @@
return true;
}
- private boolean containsActiveItem(UIComponent component, String activeItem) {
- if (component instanceof AbstractPanelMenuItem) {
- AbstractPanelMenuItem item = (AbstractPanelMenuItem) component;
- if (activeItem.equals(item.getName())) {
- return true;
- }
- }
-
- if (component instanceof AbstractPanelMenuGroup) {
- AbstractPanelMenuGroup group = (AbstractPanelMenuGroup) component;
- if (!group.getPanelMenu().isBubbleSelection()) {
- return false;
- }
- }
-
- if (component.getChildCount() > 0) {
- for (UIComponent child : component.getChildren()) {
- if (!child.isRendered()) {
- continue;
- }
-
- if (!(child instanceof AbstractPanelMenuItem)) {
- continue;
- }
-
- if (containsActiveItem(child, activeItem)) {
- return true;
- }
- }
- }
-
- return false;
- }
-
@Override
protected void doEncodeChildren(ResponseWriter writer, FacesContext context,
UIComponent component)
throws IOException {
@@ -277,16 +242,8 @@
boolean isClientMode = group.getMode() == PanelMenuMode.client;
- if (isClientMode || group.isExpanded()) {
+ if (isClientMode || group.getState()) {
renderChildren(context, component);
- } else {
- String activeItem = group.getPanelMenu().getActiveItem();
- if (!Strings.isNullOrEmpty(activeItem) &&
containsActiveItem(component, activeItem)) {
- writer.startElement(HtmlConstants.SCRIPT_ELEM, component);
- writer.writeAttribute(HtmlConstants.TYPE_ATTR,
HtmlConstants.TEXT_JAVASCRIPT_TYPE, null);
- writer.writeText(ScriptUtils.toScript(new
JSFunction("RichFaces.$", component.getClientId(context))) +
".__restoreSelection();", null);
- writer.endElement(HtmlConstants.SCRIPT_ELEM);
- }
}
}
}
Modified:
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java
===================================================================
---
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java 2011-02-25
10:46:14 UTC (rev 21932)
+++
branches/4.0.0.CR1/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java 2011-02-25
11:53:36 UTC (rev 21933)
@@ -189,13 +189,14 @@
writer.endElement(TD_ELEM);
}
-
+
@Override
protected String getStyleClass(UIComponent component) {
AbstractPanelMenuItem menuItem = (AbstractPanelMenuItem) component;
return concatClasses(getCssClass(menuItem, ""),
attributeAsString(component, "styleClass"),
PanelMenuItemRenderer.isParentPanelMenuDisabled(menuItem) ||
menuItem.isDisabled() ? getCssClass(menuItem, "-dis") : "",
+ (menuItem.isActiveItem() ? getCssClass(menuItem, "-sel") :
""),
PanelMenuItemRenderer.isParentPanelMenuDisabled(menuItem) ||
menuItem.isDisabled() ? attributeAsString(component, "disabledClass") :
"");
}
@@ -221,6 +222,7 @@
options.put("name", panelMenuItem.getName());
options.put("selectable", panelMenuItem.isSelectable());
options.put("unselectable", panelMenuItem.isUnselectable());
+ options.put("stylePrefix", getCssClass(panelMenuItem, ""));
addEventOption(context, panelMenuItem, options, UNSELECT);
addEventOption(context, panelMenuItem, options, SELECT);
Modified:
branches/4.0.0.CR1/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/panelMenu.js
===================================================================
---
branches/4.0.0.CR1/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/panelMenu.js 2011-02-25
10:46:14 UTC (rev 21932)
+++
branches/4.0.0.CR1/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/panelMenu.js 2011-02-25
11:53:36 UTC (rev 21933)
@@ -107,7 +107,7 @@
* @return {String} TODO ...
*/
selectedItem: function (id) {
- if (id != undefined) {
+ if (typeof id != "undefined") {
var valueInput = this.__getValueInput();
var prevActiveItem = valueInput.value;
Modified:
branches/4.0.0.CR1/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/panelMenuItem.js
===================================================================
---
branches/4.0.0.CR1/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/panelMenuItem.js 2011-02-25
10:46:14 UTC (rev 21932)
+++
branches/4.0.0.CR1/ui/output/ui/src/main/resources/META-INF/resources/org.richfaces/panelMenuItem.js 2011-02-25
11:53:36 UTC (rev 21933)
@@ -161,10 +161,6 @@
// todo move it
this.selectionClass = this.options.stylePrefix + "-sel";
- if (panelMenu.__isActiveItem(this)) {
- rootElt.ready($.proxy(this.__restoreSelection, this));
- }
-
if (!this.options.disabled) {
var item = this;
@@ -292,11 +288,6 @@
__header : function () {
return this.__item();
},
-
- __restoreSelection: function() {
- this.__select();
- //this.__fireSelect();
- },
__isSelected: function() {
return this.__header().hasClass(this.selectionClass);