Author: maksimkaszynski
Date: 2007-11-21 13:16:44 -0500 (Wed, 21 Nov 2007)
New Revision: 4152
Modified:
branches/3.1.x/sandbox/ui/contextMenu/src/main/config/component/contextMenu.xml
branches/3.1.x/sandbox/ui/contextMenu/src/main/java/org/richfaces/component/UIContextMenu.java
branches/3.1.x/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererBase.java
branches/3.1.x/sandbox/ui/contextMenu/src/main/resources/org/richfaces/renderkit/html/scripts/context-menu.js
Log:
context menu - parameters support, more comprehensive demo
Modified: branches/3.1.x/sandbox/ui/contextMenu/src/main/config/component/contextMenu.xml
===================================================================
---
branches/3.1.x/sandbox/ui/contextMenu/src/main/config/component/contextMenu.xml 2007-11-21
18:13:51 UTC (rev 4151)
+++
branches/3.1.x/sandbox/ui/contextMenu/src/main/config/component/contextMenu.xml 2007-11-21
18:16:44 UTC (rev 4152)
@@ -32,5 +32,19 @@
</description>
<defaultvalue>"server"</defaultvalue>
</property>
+ <property>
+ <name>event</name>
+ <classname>java.lang.String</classname>
+ <description>
+ </description>
+ <defaultvalue>"oncontextmenu"</defaultvalue>
+ </property>
+ <property>
+ <name>attached</name>
+ <classname>boolean</classname>
+ <description>
+ </description>
+ <defaultvalue>true</defaultvalue>
+ </property>
</component>
</components>
Modified:
branches/3.1.x/sandbox/ui/contextMenu/src/main/java/org/richfaces/component/UIContextMenu.java
===================================================================
---
branches/3.1.x/sandbox/ui/contextMenu/src/main/java/org/richfaces/component/UIContextMenu.java 2007-11-21
18:13:51 UTC (rev 4151)
+++
branches/3.1.x/sandbox/ui/contextMenu/src/main/java/org/richfaces/component/UIContextMenu.java 2007-11-21
18:16:44 UTC (rev 4152)
@@ -34,4 +34,8 @@
public abstract void setAttached(boolean b);
+ public abstract String getEvent();
+
+ public abstract void setEvent(String event);
+
}
Modified:
branches/3.1.x/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererBase.java
===================================================================
---
branches/3.1.x/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererBase.java 2007-11-21
18:13:51 UTC (rev 4151)
+++
branches/3.1.x/sandbox/ui/contextMenu/src/main/java/org/richfaces/renderkit/html/ContextMenuRendererBase.java 2007-11-21
18:16:44 UTC (rev 4152)
@@ -23,13 +23,22 @@
import java.io.IOException;
import java.io.Writer;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
+import org.ajax4jsf.component.JavaScriptParameter;
+import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.javascript.JSReference;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.ajax4jsf.resource.InternetResource;
+import org.richfaces.component.UIContextMenu;
import org.richfaces.renderkit.TemplateEncoderRendererBase;
import org.xml.sax.ContentHandler;
@@ -94,12 +103,57 @@
writer.write(component.getClientId(context));
writer.write("',");
writeScriptBody(context, component, true);
- writer.write(");");
+ writer.write(")");
+ writer.write(getClientAttachmentOptions(context, (UIContextMenu) component));
+ writer.write(";");
+
writer.endElement("script");
}
+ private String getClientAttachmentOptions(FacesContext context, UIContextMenu
contextMenu) {
+ String result = "";
+ if (contextMenu.isAttached()) {
+ JSFunction function = new JSFunction(".attachToParent");
+ UIComponent parent = contextMenu.getParent();
+ String parentId = parent.getClientId(context);
+
+ function.addParameter(parentId);
+
+ String event = contextMenu.getEvent();
+
+ if (event == null) {
+ event = "oncontextmenu";
+ }
+
+ function.addParameter(event);
+
+ Map params = new LinkedHashMap();
+ List children = contextMenu.getChildren();
+
+ for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+ UIComponent kid = (UIComponent) iterator.next();
+
+ if (kid instanceof UIParameter) {
+ UIParameter parameter = (UIParameter) kid;
+ String name = parameter.getName();
+ Object value = parameter.getValue();
+
+ if (parameter instanceof JavaScriptParameter &&
+ ((JavaScriptParameter) parameter).isNoEscape()) {
+ value = new JSReference(String.valueOf(value));
+ }
+
+ params.put(name, value);
+ }
+
+ }
+
+ function.addParameter(params);
+ result = function.toScript();
+ }
+ return result;
+ }
-
protected void doEncodeEnd(ResponseWriter writer, FacesContext context,
UIComponent component) throws IOException {
writer.endElement(HTML.DIV_ELEM);
Modified:
branches/3.1.x/sandbox/ui/contextMenu/src/main/resources/org/richfaces/renderkit/html/scripts/context-menu.js
===================================================================
---
branches/3.1.x/sandbox/ui/contextMenu/src/main/resources/org/richfaces/renderkit/html/scripts/context-menu.js 2007-11-21
18:13:51 UTC (rev 4151)
+++
branches/3.1.x/sandbox/ui/contextMenu/src/main/resources/org/richfaces/renderkit/html/scripts/context-menu.js 2007-11-21
18:16:44 UTC (rev 4152)
@@ -7,12 +7,34 @@
this.id = id;
this.evaluator = evaluator;
$(id).component = this;
+ this.doShow = this.show;
+ this.doHide = this.hide;
+ },
+
+ attachToParent : function(id, event, context) {
+ var element = $(id);
+ if (!element) {
+ element = $(this.id);
+ if (element) {
+ element = element.parentNode;
+ }
+ }
+ //Strip 'on' here
+ var evnName = event.substr(2);
+ var listener = this.show.bindAsEventListener(this, context);
+ Event.observe(element, evnName, listener);
},
+ hide: function() {
+ //Stub here
+ RichFaces.Menu.Layers.shutdown();
+ },
+
show: function(event, context) {
this.construct(context);
new RichFaces.Menu.DelayedContextMenu(this.id + "_menu", event).show();
+ Event.stop(event||window.event);
},
construct: function(context) {
Show replies by date