Author: maksimkaszynski
Date: 2007-11-09 15:05:17 -0500 (Fri, 09 Nov 2007)
New Revision: 3884
Added:
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/component/UIContextMenu.java
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererBase.java
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererDelegate.java
trunk/ui/menu-components/src/main/java/org/richfaces/renderkit/html/AbstractMenuRenderer.java
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/HeaderResourcesRendererBase.java
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/RendererBase.java
trunk/framework/impl/src/main/java/org/richfaces/renderkit/ScriptOptions.java
trunk/sandbox/ui/contextMenu/
trunk/sandbox/ui/contextMenu/pom.xml
trunk/ui/dropdown-menu/src/main/java/org/richfaces/renderkit/html/DropDownMenuRendererBase.java
trunk/ui/dropdown-menu/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js
Log:
refactoring of DropDownMenu code to allow compatibility with ContextMenu
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/HeaderResourcesRendererBase.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/HeaderResourcesRendererBase.java 2007-11-09
18:50:46 UTC (rev 3883)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/HeaderResourcesRendererBase.java 2007-11-09
20:05:17 UTC (rev 3884)
@@ -47,7 +47,7 @@
*
* @see
org.ajax4jsf.renderkit.HeaderResourceProducer#getHeaderScripts(javax.faces.context.FacesContext)
*/
- public LinkedHashSet getHeaderScripts(FacesContext context,
+ public LinkedHashSet<String> getHeaderScripts(FacesContext context,
UIComponent component) {
return getUrisSet(context, getScripts(), component);
}
@@ -67,7 +67,7 @@
*
* @see
org.ajax4jsf.renderkit.HeaderResourceProducer#getHeaderStyles(javax.faces.context.FacesContext)
*/
- public LinkedHashSet getHeaderStyles(FacesContext context,
+ public LinkedHashSet<String> getHeaderStyles(FacesContext context,
UIComponent component) {
return getUrisSet(context, getStyles(), component);
}
@@ -89,10 +89,10 @@
* TODO
* @return
*/
- private LinkedHashSet getUrisSet(FacesContext context,
+ private LinkedHashSet<String> getUrisSet(FacesContext context,
InternetResource[] resources, UIComponent component) {
if (null != resources) {
- LinkedHashSet uris = new LinkedHashSet(); //
Collections.singleton(ajaxScript.getUri(context,
+ LinkedHashSet<String> uris = new LinkedHashSet<String>(); //
Collections.singleton(ajaxScript.getUri(context,
// null));
for (int i = 0; i < resources.length; i++) {
InternetResource resource = resources[i];
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/RendererBase.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/RendererBase.java 2007-11-09
18:50:46 UTC (rev 3883)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/RendererBase.java 2007-11-09
20:05:17 UTC (rev 3884)
@@ -196,7 +196,7 @@
* Get base component slass , targetted for this renderer. Used for check arguments in
decode/encode.
* @return
*/
- protected abstract Class getComponentClass();
+ protected abstract Class<? extends UIComponent> getComponentClass();
/**
@@ -257,8 +257,8 @@
public void renderChildren(FacesContext facesContext,
UIComponent component) throws IOException {
if (component.getChildCount() > 0) {
- 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();
renderChild(facesContext, child);
}
}
Modified: trunk/framework/impl/src/main/java/org/richfaces/renderkit/ScriptOptions.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/renderkit/ScriptOptions.java 2007-11-09
18:50:46 UTC (rev 3883)
+++
trunk/framework/impl/src/main/java/org/richfaces/renderkit/ScriptOptions.java 2007-11-09
20:05:17 UTC (rev 3884)
@@ -49,7 +49,7 @@
public class ScriptOptions extends ScriptStringBase {
private UIComponent component;
- protected Map opts = new HashMap();
+ protected Map<String, Object> opts = new HashMap<String, Object>();
public ScriptOptions(UIComponent component) {
this.component = component;
@@ -64,6 +64,8 @@
addOption(name, value);
}
}
+
+ @SuppressWarnings("unchecked")
public void addOption(String name, Object value) {
if (value != null) {
Object object = opts.get(name);
@@ -97,16 +99,16 @@
opts.put(event, definition);
}
}
- public Map getMap() {
+ public Map<String,Object> getMap() {
return opts;
}
public void merge(ScriptOptions anotherOptions) {
- Iterator entrySetIterator = anotherOptions.opts.entrySet().iterator();
+ Iterator<Entry<String, Object>> entrySetIterator =
anotherOptions.opts.entrySet().iterator();
while (entrySetIterator.hasNext()) {
- Entry entry = (Entry) entrySetIterator.next();
+ Entry<String, Object> entry = entrySetIterator.next();
- addOption((String) entry.getKey(), entry.getValue());
+ addOption(entry.getKey(), entry.getValue());
}
}
Property changes on: trunk/sandbox/ui/contextMenu
___________________________________________________________________
Name: svn:ignore
- target
+ target
.classpath
.project
.settings
Modified: trunk/sandbox/ui/contextMenu/pom.xml
===================================================================
--- trunk/sandbox/ui/contextMenu/pom.xml 2007-11-09 18:50:46 UTC (rev 3883)
+++ trunk/sandbox/ui/contextMenu/pom.xml 2007-11-09 20:05:17 UTC (rev 3884)
@@ -46,5 +46,10 @@
<artifactId>richfaces-impl</artifactId>
<version>3.2.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>menu-components</artifactId>
+ <version>3.2.0-SNAPSHOT</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Added:
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/component/UIContextMenu.java
===================================================================
--- trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/component/UIContextMenu.java
(rev 0)
+++
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/component/UIContextMenu.java 2007-11-09
20:05:17 UTC (rev 3884)
@@ -0,0 +1,33 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.component;
+
+import javax.faces.component.UIComponentBase;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public abstract class UIContextMenu extends UIComponentBase implements MenuComponent {
+ public static final String COMPONENT_TYPE = "org.richfaces.ContextMenu";
+
+}
Added:
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererBase.java
===================================================================
---
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererBase.java
(rev 0)
+++
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererBase.java 2007-11-09
20:05:17 UTC (rev 3884)
@@ -0,0 +1,68 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.renderkit.html;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+import org.richfaces.renderkit.TemplateEncoderRendererBase;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public abstract class ContextMenuRendererBase extends
+ TemplateEncoderRendererBase {
+
+
+ private final ContextMenuRendererDelegate delegate =
+ new ContextMenuRendererDelegate();
+
+ @Override
+ protected Class<? extends UIComponent> getComponentClass() {
+ return delegate.getComponentClass();
+ }
+
+ @Override
+ public void encodeBegin(FacesContext context, UIComponent component)
+ throws IOException {
+ super.encodeBegin(context, component);
+ }
+
+ @Override
+ public void encodeChildren(FacesContext context, UIComponent component)
+ throws IOException {
+ // TODO Auto-generated method stub
+ super.encodeChildren(context, component);
+ }
+
+ @Override
+ public void encodeEnd(FacesContext context, UIComponent component)
+ throws IOException {
+ // TODO Auto-generated method stub
+ super.encodeEnd(context, component);
+ }
+
+
+}
Added:
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererDelegate.java
===================================================================
---
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererDelegate.java
(rev 0)
+++
trunk/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererDelegate.java 2007-11-09
20:05:17 UTC (rev 3884)
@@ -0,0 +1,111 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.renderkit.html;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.javascript.JSFunction;
+import org.richfaces.component.UIContextMenu;
+import org.richfaces.component.UIMenuGroup;
+import org.richfaces.renderkit.ScriptOptions;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public class ContextMenuRendererDelegate extends AbstractMenuRenderer {
+
+ /* (non-Javadoc)
+ * @see
org.richfaces.renderkit.html.AbstractMenuRenderer#getLayerScript(javax.faces.context.FacesContext,
javax.faces.component.UIComponent)
+ */
+ @Override
+ protected String getLayerScript(FacesContext context, UIComponent component) {
+ StringBuffer buffer = new StringBuffer();
+ JSFunction function = new JSFunction("new RichFaces.Menu.Layer");
+ function.addParameter(component.getClientId(context)+"_menu");
+ function.addParameter(component.getAttributes().get("showDelay"));
+
+ if (component instanceof UIContextMenu) {
+ function.addParameter(component.getAttributes().get("hideDelay"));
+ } else {
+ function.addParameter(new Integer(300));
+ }
+
+ function.appendScript(buffer);
+
+ if (component instanceof UIMenuGroup) {
+ buffer.append(".");
+ function = new JSFunction("asSubMenu");
+
function.addParameter(component.getParent().getClientId(context)+"_menu");
+ function.addParameter("ref"+component.getClientId(context));
+ String evt = (String) component.getAttributes().get("event");
+ if(evt == null || evt.trim().length() == 0){
+ evt = "onmouseover";
+ }
+ function.addParameter(evt);
+ ScriptOptions subMenuOptions = new ScriptOptions(component);
+ subMenuOptions.addEventHandler("onopen");
+ subMenuOptions.addEventHandler("onclose");
+ subMenuOptions.addOption("direction");
+ function.addParameter(subMenuOptions);
+ function.appendScript(buffer);
+
+ } else {
+ buffer.append(".");
+ function = new JSFunction("asDropDown");
+ function.addParameter(component.getClientId(context));
+ String evt = (String) component.getAttributes().get("event");
+ if(evt == null || evt.trim().length() == 0){
+ evt = "onmouseover";
+ }
+ function.addParameter(evt);
+ function.addParameter("onmouseout");
+ ScriptOptions menuOptions = new ScriptOptions(component);
+
+ menuOptions.addOption("direction");
+ menuOptions.addOption("jointPoint");
+ menuOptions.addOption("verticalOffset");
+
+
+ menuOptions.addOption("horizontalOffset");
+ menuOptions.addEventHandler("oncollapse");
+ menuOptions.addEventHandler("onexpand");
+ menuOptions.addEventHandler("onitemselect");
+ menuOptions.addEventHandler("ongroupactivate");
+ function.addParameter(menuOptions);
+ function.appendScript(buffer);
+
+ }
+
+ return buffer.toString();
+ }
+
+ /* (non-Javadoc)
+ * @see org.ajax4jsf.renderkit.RendererBase#getComponentClass()
+ */
+ @Override
+ protected Class<? extends UIComponent> getComponentClass() {
+ return UIContextMenu.class;
+ }
+
+}
Modified:
trunk/ui/dropdown-menu/src/main/java/org/richfaces/renderkit/html/DropDownMenuRendererBase.java
===================================================================
---
trunk/ui/dropdown-menu/src/main/java/org/richfaces/renderkit/html/DropDownMenuRendererBase.java 2007-11-09
18:50:46 UTC (rev 3883)
+++
trunk/ui/dropdown-menu/src/main/java/org/richfaces/renderkit/html/DropDownMenuRendererBase.java 2007-11-09
20:05:17 UTC (rev 3884)
@@ -21,140 +21,36 @@
package org.richfaces.renderkit.html;
-
-
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.javascript.JSFunction;
-import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
import org.richfaces.component.UIDropDownMenu;
import org.richfaces.component.UIMenuGroup;
-import org.richfaces.component.UIMenuItem;
-import org.richfaces.component.UIMenuSeparator;
-import org.richfaces.component.util.HtmlUtil;
import org.richfaces.renderkit.ScriptOptions;
-public class DropDownMenuRendererBase extends HeaderResourcesRendererBase {
+public class DropDownMenuRendererBase extends AbstractMenuRenderer {
- protected Class getComponentClass() {
+ protected Class<UIDropDownMenu> getComponentClass() {
return UIDropDownMenu.class;
}
- public boolean getRendersChildren() {
- return true;
- }
-
- public void encodeChildren(FacesContext context, UIComponent component) throws
IOException {
- List flatListOfNodes = new LinkedList();
- String width = (String)component.getAttributes().get("popupWidth");
-
- flatten(component.getChildren(), flatListOfNodes);
- processLayer(context, component, width);
-
- for (Iterator iter = flatListOfNodes.iterator(); iter.hasNext();) {
- UIMenuGroup node = (UIMenuGroup) iter.next();
- if (node.isRendered() && !node.isDisabled()) processLayer(context, node,
width);
- }
- }
-
- public void processLayer(FacesContext context, UIComponent layer, String width) throws
IOException {
- String clientId = layer.getClientId(context);
-
- ResponseWriter writer = context.getResponseWriter();
- writer.startElement("div", layer);
- writer.writeAttribute("id", clientId+"_menu", null);
- writer.writeAttribute("class", "dr-menu-list-border
rich-menu-list-border", null);
- writer.writeAttribute("style", "visibility: hidden; z-index: 2; ",
null);
- writer.startElement("div", layer);
- writer.writeAttribute("class", "dr-menu-list-bg rich-menu-list-bg",
null);
- encodeItems(context, layer);
-
- writer.startElement("div", layer);
- writer.writeAttribute("class", "dr-menu-list-strut
rich-menu-list-strut", null);
-
- writer.startElement("img", layer);
- writer.writeAttribute("width", "1", null);
- writer.writeAttribute("height", "1", null);
- writer.writeAttribute("alt", "", null);
- writer.writeAttribute("border", "0", null);
- writer.writeAttribute("style", width!=null && width.length() > 0 ?
"width: " + HtmlUtil.qualifySize(width) : "", null);
- writer.writeAttribute("src",
- getResource("/org/richfaces/renderkit/html/images/spacer.gif").getUri(context,
null),
- null);
- writer.endElement("img");
- writer.endElement("div");
-
- writer.endElement("div");
- writer.endElement("div");
-
- writer.startElement("iframe", layer);
- writer.writeAttribute("src",
- getResource("/org/richfaces/renderkit/html/images/spacer.gif")
- .getUri(context, null), null);
- writer.writeAttribute("id", clientId+"_menu_iframe", null);
- writer.writeAttribute("class", "underneath_iframe", null);
- writer.writeAttribute("style", "position:absolute; z-index: 1;",
null);
- writer.endElement("iframe");
-
- writer.startElement("script", layer);
- writer.writeAttribute("id", clientId+"_menu_script", null);
- writer.writeAttribute("type", "text/javascript", null);
- encodeScript(context, layer);
- writer.endElement("script");
-
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance();
- Set renderedAreas = ajaxContext.getAjaxRenderedAreas();
- renderedAreas.add(clientId + "_menu_iframe");
- renderedAreas.add(clientId + "_menu_script");
- }
-
- public void encodeItems(FacesContext context, UIComponent component) throws IOException
{
- List kids = component.getChildren();
- Iterator it = kids.iterator();
- while (it.hasNext()) {
- UIComponent kid = (UIComponent)it.next();
- if (kid instanceof UIMenuGroup || kid instanceof UIMenuItem || kid instanceof
UIMenuSeparator) {
- renderChild(context, kid);
- }
- }
- }
-
- private void flatten(List kids, List flatList){
- if(kids != null){
- for (Iterator iter = kids.iterator(); iter.hasNext();) {
- UIComponent kid = (UIComponent) iter.next();
- if (kid instanceof UIMenuGroup) {
- UIMenuGroup node = (UIMenuGroup) kid;
- flatList.add(node);
- flatten(node.getChildren(), flatList);
- }
- }
- }
- }
-
- public void encodeScript(FacesContext context, UIComponent component) throws IOException
{
+ @Override
+ protected String getLayerScript(FacesContext context, UIComponent component) {
StringBuffer buffer = new StringBuffer();
JSFunction function = new JSFunction("new RichFaces.Menu.Layer");
function.addParameter(component.getClientId(context)+"_menu");
function.addParameter(component.getAttributes().get("showDelay"));
- if (component instanceof UIDropDownMenu) {
+
+ if (component instanceof UIDropDownMenu) {
function.addParameter(component.getAttributes().get("hideDelay"));
+ } else {
+ function.addParameter(new Integer(300));
}
- else{
- function.addParameter(""+300);
- }
- function.appendScript(buffer);
+
+ function.appendScript(buffer);
+
if (component instanceof UIMenuGroup) {
buffer.append(".");
function = new JSFunction("asSubMenu");
@@ -162,84 +58,44 @@
function.addParameter("ref"+component.getClientId(context));
String evt = (String) component.getAttributes().get("event");
if(evt == null || evt.trim().length() == 0){
- evt = "onmouseover";
+ evt = "onmouseover";
}
function.addParameter(evt);
- ScriptOptions Optionssub = new ScriptOptions(component);
- Optionssub.addOption("onopen",
component.getAttributes().get("onopen"));
- Optionssub.addOption("onclose",
component.getAttributes().get("onclose"));
- Optionssub.addOption("direction",
component.getAttributes().get("direction"));
- function.addParameter(Optionssub);
+ ScriptOptions subMenuOptions = new ScriptOptions(component);
+ subMenuOptions.addEventHandler("onopen");
+ subMenuOptions.addEventHandler("onclose");
+ subMenuOptions.addOption("direction");
+ function.addParameter(subMenuOptions);
function.appendScript(buffer);
} else {
buffer.append(".");
- function = new JSFunction("asDropDown");
+ function = new JSFunction("asContextMenu");
function.addParameter(component.getClientId(context));
String evt = (String) component.getAttributes().get("event");
if(evt == null || evt.trim().length() == 0){
- evt = "onmouseover";
+ evt = "oncontextmenu";
}
function.addParameter(evt);
function.addParameter("onmouseout");
- ScriptOptions Options = new ScriptOptions(component);
+ ScriptOptions menuOptions = new ScriptOptions(component);
- Options.addOption("direction",
component.getAttributes().get("direction"));
- Options.addOption("jointPoint",
component.getAttributes().get("jointPoint"));
- Options.addOption("verticalOffset",
component.getAttributes().get("verticalOffset"));
+ menuOptions.addOption("direction");
+ menuOptions.addOption("jointPoint");
+ menuOptions.addOption("verticalOffset");
- Options.addOption("horizontalOffset",
component.getAttributes().get("horizontalOffset"));
- Options.addOption("oncollapse",
component.getAttributes().get("oncollapse"));
- Options.addOption("onexpand",
component.getAttributes().get("onexpand"));
- Options.addOption("onitemselect",
component.getAttributes().get("onitemselect"));
- Options.addOption("ongroupactivate",
component.getAttributes().get("ongroupactivate"));
- function.addParameter(Options);
+ menuOptions.addOption("horizontalOffset");
+ menuOptions.addEventHandler("oncollapse");
+ menuOptions.addEventHandler("onexpand");
+ menuOptions.addEventHandler("onitemselect");
+ menuOptions.addEventHandler("ongroupactivate");
+ function.addParameter(menuOptions);
function.appendScript(buffer);
}
-
- List children = component.getChildren();
- for(Iterator it = children.iterator();it.hasNext();) {
- UIComponent kid = (UIComponent)it.next();
- String itemId = null;
- int flcloseonclick=1;
- int flagGroup = 0;
- if (kid instanceof UIMenuItem) {
- UIMenuItem MenuItem=(UIMenuItem)kid;
- itemId = kid.getClientId(context);
- if (MenuItem.isDisabled()){
- flcloseonclick=0;
- }
- } else if (kid instanceof UIMenuGroup) {
- UIMenuGroup menuGroup=(UIMenuGroup)kid;
- itemId = "ref" + kid.getClientId(context);
- flcloseonclick=0;
- if (menuGroup.isDisabled()) flagGroup = 2; else flagGroup = 1;
- }
- if(itemId != null){
- function = new JSFunction("addItem");
- function.addParameter(itemId);
- function.addParameter(new Integer(flcloseonclick));
-
- ScriptOptions options = new ScriptOptions(kid);
- options.addOption("onmouseout",
kid.getAttributes().get("onmouseout"));
- options.addOption("onmouseover",
kid.getAttributes().get("onmouseover"));
- options.addOption("flagGroup", new Integer(flagGroup));
- String tmp = (String)kid.getAttributes().get("selectClass");
- if (tmp != null && tmp.length() > 0)
options.addOption("selectClass", tmp);
- function.addParameter(options);
- buffer.append('.');
- function.appendScript(buffer);
- }
- }
-
- ResponseWriter out = context.getResponseWriter();
- String script =buffer.append(";").toString();
- out.write(script);
-
-
-
+
+ return buffer.toString();
}
Modified:
trunk/ui/dropdown-menu/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js
===================================================================
---
trunk/ui/dropdown-menu/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js 2007-11-09
18:50:46 UTC (rev 3883)
+++
trunk/ui/dropdown-menu/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js 2007-11-09
20:05:17 UTC (rev 3884)
@@ -979,17 +979,17 @@
},
asDropDown: function(topLevel, onEvt, offEvt, options){
this.options = options || {};
- if (this.options.ongroupactivate != ""){
- this.eventOnGroupActivate = new
Function("event",this.options.ongroupactivate).bindAsEventListener(this);
+ if (this.options.ongroupactivate){
+ this.eventOnGroupActivate = this.options.ongroupactivate.bindAsEventListener(this);
}
- if (this.options.onitemselect != ""){
- this.eventOnItemSelect = new
Function("event",options.onitemselect).bindAsEventListener(this);
+ if (this.options.onitemselect){
+ this.eventOnItemSelect = this.options.onitemselect.bindAsEventListener(this);
}
- if (this.options.oncollapse != ""){
- this.eventOnCollapse = new
Function("event",this.options.oncollapse).bindAsEventListener(this);
+ if (this.options.oncollapse){
+ this.eventOnCollapse = this.options.oncollapse.bindAsEventListener(this);
}
- if (this.options.onexpand != ""){
- this.eventOnExpand = new
Function("event",this.options.onexpand).bindAsEventListener(this);
+ if (this.options.onexpand){
+ this.eventOnExpand = this.options.onexpand.bindAsEventListener(this);
}
// if($(topLevel)){ CH-1518
@@ -1031,11 +1031,11 @@
asSubMenu: function(parentv, refLayerName, evtName, options){
this.options = options || {};
- if (this.options.onclose != ""){
- this.eventOnClose = new
Function("event",this.options.onclose).bindAsEventListener(this);
+ if (this.options.onclose){
+ this.eventOnClose = this.options.onclose.bindAsEventListener(this);
}
- if (this.options.onopen != ""){
- this.eventOnOpen = new
Function("event",this.options.onopen).bindAsEventListener(this);
+ if (this.options.onopen){
+ this.eventOnOpen = this.options.onopen.bindAsEventListener(this);
}
if(!evtName){
Added:
trunk/ui/menu-components/src/main/java/org/richfaces/renderkit/html/AbstractMenuRenderer.java
===================================================================
---
trunk/ui/menu-components/src/main/java/org/richfaces/renderkit/html/AbstractMenuRenderer.java
(rev 0)
+++
trunk/ui/menu-components/src/main/java/org/richfaces/renderkit/html/AbstractMenuRenderer.java 2007-11-09
20:05:17 UTC (rev 3884)
@@ -0,0 +1,196 @@
+/**
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.renderkit.html;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.ajax4jsf.context.AjaxContext;
+import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.renderkit.HeaderResourcesRendererBase;
+import org.richfaces.component.UIMenuGroup;
+import org.richfaces.component.UIMenuItem;
+import org.richfaces.component.UIMenuSeparator;
+import org.richfaces.component.util.HtmlUtil;
+import org.richfaces.renderkit.ScriptOptions;
+
+/**
+ * @author Maksim Kaszynski
+ *
+ */
+public abstract class AbstractMenuRenderer extends HeaderResourcesRendererBase {
+
+ public void encodeScript(FacesContext context, UIComponent component) throws IOException
{
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append(getLayerScript(context, component));
+
+ List children = component.getChildren();
+ for(Iterator it = children.iterator();it.hasNext();) {
+ buffer.append(getItemScript(context, (UIComponent) it.next()));
+ }
+
+ ResponseWriter out = context.getResponseWriter();
+ String script = buffer.append(";").toString();
+ out.write(script);
+ }
+
+ protected abstract String getLayerScript(FacesContext context, UIComponent layer);
+
+ protected String getItemScript(FacesContext context, UIComponent kid) {
+ String itemId = null;
+ int flcloseonclick = 1;
+ int flagGroup = 0;
+ if (kid instanceof UIMenuItem) {
+ UIMenuItem menuItem = (UIMenuItem) kid;
+ itemId = kid.getClientId(context);
+ if (menuItem.isDisabled()) {
+ flcloseonclick = 0;
+ }
+ } else if (kid instanceof UIMenuGroup) {
+ UIMenuGroup menuGroup = (UIMenuGroup) kid;
+ itemId = "ref" + kid.getClientId(context);
+ flcloseonclick = 0;
+ if (menuGroup.isDisabled()) {
+ flagGroup = 2;
+ } else {
+ flagGroup = 1;
+ }
+ }
+ if (itemId != null) {
+ JSFunction function = new JSFunction(".addItem");
+ function.addParameter(itemId);
+ function.addParameter(new Integer(flcloseonclick));
+
+ ScriptOptions options = new ScriptOptions(kid);
+ options.addEventHandler("onmouseout");
+ options.addEventHandler("onmouseover");
+ options.addOption("flagGroup", new Integer(flagGroup));
+ options.addOption("selectClass");
+ function.addParameter(options);
+ return function.toScript();
+ }
+ return "";
+ }
+
+ public boolean getRendersChildren() {
+ return true;
+ }
+
+ public void encodeChildren(FacesContext context, UIComponent component)
+ throws IOException {
+ List flatListOfNodes = new LinkedList();
+ String width = (String) component.getAttributes().get("popupWidth");
+
+ flatten(component.getChildren(), flatListOfNodes);
+ processLayer(context, component, width);
+
+ for (Iterator iter = flatListOfNodes.iterator(); iter.hasNext();) {
+ UIMenuGroup node = (UIMenuGroup) iter.next();
+ if (node.isRendered() && !node.isDisabled())
+ processLayer(context, node, width);
+ }
+ }
+
+ public void processLayer(FacesContext context, UIComponent layer, String width) throws
IOException {
+ String clientId = layer.getClientId(context);
+
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement("div", layer);
+ writer.writeAttribute("id", clientId+"_menu", null);
+ writer.writeAttribute("class", "dr-menu-list-border
rich-menu-list-border", null);
+ writer.writeAttribute("style", "visibility: hidden; z-index: 2; ",
null);
+ writer.startElement("div", layer);
+ writer.writeAttribute("class", "dr-menu-list-bg rich-menu-list-bg",
null);
+ encodeItems(context, layer);
+
+ writer.startElement("div", layer);
+ writer.writeAttribute("class", "dr-menu-list-strut
rich-menu-list-strut", null);
+
+ writer.startElement("img", layer);
+ writer.writeAttribute("width", "1", null);
+ writer.writeAttribute("height", "1", null);
+ writer.writeAttribute("alt", "", null);
+ writer.writeAttribute("border", "0", null);
+ writer.writeAttribute("style", width!=null && width.length() > 0 ?
"width: " + HtmlUtil.qualifySize(width) : "", null);
+ writer.writeAttribute("src",
+ getResource("/org/richfaces/renderkit/html/images/spacer.gif").getUri(context,
null),
+ null);
+ writer.endElement("img");
+ writer.endElement("div");
+
+ writer.endElement("div");
+ writer.endElement("div");
+
+ writer.startElement("iframe", layer);
+ writer.writeAttribute("src",
+ getResource("/org/richfaces/renderkit/html/images/spacer.gif")
+ .getUri(context, null), null);
+ writer.writeAttribute("id", clientId+"_menu_iframe", null);
+ writer.writeAttribute("class", "underneath_iframe", null);
+ writer.writeAttribute("style", "position:absolute; z-index: 1;",
null);
+ writer.endElement("iframe");
+
+ writer.startElement("script", layer);
+ writer.writeAttribute("id", clientId+"_menu_script", null);
+ writer.writeAttribute("type", "text/javascript", null);
+ encodeScript(context, layer);
+ writer.endElement("script");
+
+ AjaxContext ajaxContext = AjaxContext.getCurrentInstance();
+ Set renderedAreas = ajaxContext.getAjaxRenderedAreas();
+ renderedAreas.add(clientId + "_menu_iframe");
+ renderedAreas.add(clientId + "_menu_script");
+ }
+
+ public void encodeItems(FacesContext context, UIComponent component) throws IOException
{
+ List kids = component.getChildren();
+ Iterator it = kids.iterator();
+ while (it.hasNext()) {
+ UIComponent kid = (UIComponent)it.next();
+ if (kid instanceof UIMenuGroup || kid instanceof UIMenuItem || kid instanceof
UIMenuSeparator) {
+ renderChild(context, kid);
+ }
+ }
+ }
+
+ private void flatten(List kids, List flatList){
+ if(kids != null){
+ for (Iterator iter = kids.iterator(); iter.hasNext();) {
+ UIComponent kid = (UIComponent) iter.next();
+ if (kid instanceof UIMenuGroup) {
+ UIMenuGroup node = (UIMenuGroup) kid;
+ flatList.add(node);
+ flatten(node.getChildren(), flatList);
+ }
+ }
+ }
+ }
+
+}