Author: konstantin.mishin
Date: 2009-07-23 08:00:23 -0400 (Thu, 23 Jul 2009)
New Revision: 14979
Modified:
branches/community/3.3.X/ui/dropdown-menu/src/main/java/org/richfaces/renderkit/html/DropDownMenuRendererBase.java
branches/community/3.3.X/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js
Log:
RF-7508
Modified:
branches/community/3.3.X/ui/dropdown-menu/src/main/java/org/richfaces/renderkit/html/DropDownMenuRendererBase.java
===================================================================
---
branches/community/3.3.X/ui/dropdown-menu/src/main/java/org/richfaces/renderkit/html/DropDownMenuRendererBase.java 2009-07-22
23:38:22 UTC (rev 14978)
+++
branches/community/3.3.X/ui/dropdown-menu/src/main/java/org/richfaces/renderkit/html/DropDownMenuRendererBase.java 2009-07-23
12:00:23 UTC (rev 14979)
@@ -22,16 +22,19 @@
package org.richfaces.renderkit.html;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.renderkit.RendererUtils;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
+import org.ajax4jsf.renderkit.RendererUtils.ScriptHashVariableWrapper;
import org.richfaces.component.UIDropDownMenu;
import org.richfaces.component.UIMenuGroup;
-import org.richfaces.renderkit.ScriptOptions;
public class DropDownMenuRendererBase extends AbstractMenuRenderer {
@@ -43,65 +46,52 @@
@Override
protected String getLayerScript(FacesContext context, UIComponent component) {
StringBuffer buffer = new StringBuffer();
+ Map<String, Object> options = new HashMap<String, Object>();
+ RendererUtils utils = getUtils();
JSFunction function = new JSFunction("new RichFaces.Menu.Layer");
function.addParameter(component.getClientId(context)+"_menu");
- function.addParameter(component.getAttributes().get("showDelay"));
-
- if (component instanceof UIDropDownMenu) {
- function.addParameter(component.getAttributes().get("hideDelay"));
- Object selectedClass =
component.getAttributes().get("selectedLabelClass");
- if (null != selectedClass && !"".equals(selectedClass)) {
- function.addParameter(selectedClass);
- }
- } else {
- function.addParameter(new Integer(300));
- }
-
+ utils.addToScriptHash(options, "delay",
component.getAttributes().get("showDelay"), "300");
+ utils.addToScriptHash(options, "hideDelay",
component.getAttributes().get("hideDelay"), "300");
+ utils.addToScriptHash(options, "selectedClass",
component.getAttributes().get("selectedLabelClass"));
+
+ if (!options.isEmpty()) {
+ function.addParameter(options);
+ }
+
function.appendScript(buffer);
+ options = new HashMap<String, Object>();
+
if (component instanceof UIMenuGroup) {
buffer.append(".");
function = new JSFunction("asSubMenu");
function.addParameter(component.getParent().getClientId(context)+"_menu");
function.addParameter(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");
- subMenuOptions.addOption("highlightParent", Boolean.TRUE);
- function.addParameter(subMenuOptions);
+ utils.addToScriptHash(options, "evtName",
component.getAttributes().get("event"), "onmouseover");
+ utils.addToScriptHash(options, "direction",
component.getAttributes().get("direction"), "auto");
+ utils.addToScriptHash(options, "onopen",
component.getAttributes().get("onopen"), null,
ScriptHashVariableWrapper.EVENT_HANDLER);
+ utils.addToScriptHash(options, "onclose",
component.getAttributes().get("onclose"), null,
ScriptHashVariableWrapper.EVENT_HANDLER);
+ if (!options.isEmpty()) {
+ function.addParameter(options);
+ }
function.appendScript(buffer);
-
} else {
buffer.append(".");
function = new JSFunction("asDropDown");
function.addParameter(component.getClientId(context));
- function.addParameter(component.getClientId(context) + "_span");
- 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");
- menuOptions.addOption("disabled");
- function.addParameter(menuOptions);
+ utils.addToScriptHash(options, "onEvt",
component.getAttributes().get("event"), "onmouseover");
+ utils.addToScriptHash(options, "direction",
component.getAttributes().get("direction"), "auto");
+ utils.addToScriptHash(options, "jointPoint",
component.getAttributes().get("jointPoint"), "auto");
+ utils.addToScriptHash(options, "verticalOffset",
component.getAttributes().get("verticalOffset"), "0");
+ utils.addToScriptHash(options, "horizontalOffset",
component.getAttributes().get("horizontalOffset"), "0");
+ utils.addToScriptHash(options, "oncollapse",
component.getAttributes().get("oncollapse"), null,
ScriptHashVariableWrapper.EVENT_HANDLER);
+ utils.addToScriptHash(options, "onexpand",
component.getAttributes().get("onexpand"), null,
ScriptHashVariableWrapper.EVENT_HANDLER);
+ utils.addToScriptHash(options, "onitemselect",
component.getAttributes().get("onitemselect"), null,
ScriptHashVariableWrapper.EVENT_HANDLER);
+ utils.addToScriptHash(options, "ongroupactivate",
component.getAttributes().get("ongroupactivate"), null,
ScriptHashVariableWrapper.EVENT_HANDLER);
+ utils.addToScriptHash(options, "disabled",
component.getAttributes().get("disabled"));
+ if (!options.isEmpty()) {
+ function.addParameter(options);
+ }
function.appendScript(buffer);
}
Modified:
branches/community/3.3.X/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js
===================================================================
---
branches/community/3.3.X/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js 2009-07-22
23:38:22 UTC (rev 14978)
+++
branches/community/3.3.X/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js 2009-07-23
12:00:23 UTC (rev 14979)
@@ -552,8 +552,8 @@
direction = sDir.indexOf('BOTTOM-RIGHT')!= -1?3:direction;
direction = sDir.indexOf('BOTTOM-LEFT') != -1?4:direction;
}
- var hOffset = options.horizontalOffset;
- var vOffset = options.verticalOffset;
+ var hOffset = options.horizontalOffset || 0;
+ var vOffset = options.verticalOffset || 0;
var listPos = this.listPositions(jointPoint, direction);
var layerPos;
@@ -741,18 +741,16 @@
RichFaces.Menu.Layer = Class.create();
RichFaces.Menu.Layer.prototype = {
- initialize: function(id,delay, hideDelay, selectedClass){
+
+ delay : 300,
+ hideDelay : 300,
+
+ initialize: function(id, options){
RichFaces.Menu.Layers.listl.push(id);
this.id = id;
this.layer = $(id);
this.level = 0;
- this.delay = delay;
- if (hideDelay){
- this.hideDelay=hideDelay;
- }
- else{
- this.hideDelay=hideDelay;
- }
+ Object.extend(this, options);
RichFaces.Menu.fitLayerToContent(this.layer);
this.items = new Array();
RichFaces.Menu.Layers.layers[id] = this;
@@ -854,9 +852,6 @@
A4J.AJAX.AddListener(listener);
} */
- if (selectedClass) {
- this.selectedClass = selectedClass;
- }
},
getLabel : function() {
@@ -1028,8 +1023,8 @@
RichFaces.Menu.Layers.LMPopUpL(this.id, false,e);
// if (this.eventOnClose) this.eventOnClose();
},
- asDropDown: function(topLevel, bindElementId, onEvt, offEvt, options){
- this.options = options || {};
+ asDropDown: function(topLevel, options){
+ this.options = options = options || {};
if (this.options.ongroupactivate){
this.eventOnGroupActivate = this.options.ongroupactivate.bindAsEventListener(this);
}
@@ -1065,15 +1060,6 @@
}
};
- if(!onEvt){
- onEvt = 'onmouseover';
- }
- onEvt = this.eventJsToPrototype(onEvt);
- if(!offEvt){
- offEvt = 'onmouseout';
- }
- offEvt = this.eventJsToPrototype(offEvt);
-
var addBinding = function(elementId, eventName, handler) {
var binding = new RichFaces.Menu.Layer.Binding(elementId, eventName, handler);
this.bindings.push(binding);
@@ -1081,7 +1067,7 @@
}.bind(this);
//if (onEvt == 'mouseover') {
- addBinding(topLevel, onEvt, function(e) {
+ addBinding(topLevel, this.eventJsToPrototype(options.onEvt || "mouseover"),
function(e) {
menuOn.call(this, e);
mouseover.call(this, e);
}.bindAsEventListener(this));
@@ -1090,23 +1076,18 @@
// addBinding(topLevel, 'mouseover', mouseover.bindAsEventListener(this));
//}
- if (offEvt == 'mouseout') {
- addBinding(topLevel, offEvt, function(e) {
- menuOff.call(this, e);
- mouseout.call(this, e);
- }.bindAsEventListener(this));
- } else {
- addBinding(bindElementId, offEvt, menuOff.bindAsEventListener(this));
- addBinding(topLevel, 'mouseout', mouseout.bindAsEventListener(this));
- }
+ addBinding(topLevel, 'mouseout', function(e) {
+ menuOff.call(this, e);
+ mouseout.call(this, e);
+ }.bindAsEventListener(this));
RichFaces.Menu.Layers.horizontals[this.id] = topLevel;
// }
return this;
},
- asSubMenu: function(parentv, refLayerName, evtName, options){
- this.options = options || {};
+ asSubMenu: function(parentv, refLayerName, options){
+ this.options = options = options || {};
if (this.options.onclose){
this.eventOnClose = this.options.onclose.bindAsEventListener(this);
}
@@ -1114,19 +1095,12 @@
this.eventOnOpen = this.options.onopen.bindAsEventListener(this);
}
- if(!evtName){
- evtName = 'onmouseover';
- }
- evtName = this.eventJsToPrototype(evtName);
this.level = RichFaces.Menu.Layers.layers[parentv].level + 1;
RichFaces.Menu.Layers.father[this.id] = parentv;
- if(!refLayerName){
- refLayerName = parentv;
- }
var refLayer = $(refLayerName);
this.refItem = RichFaces.Menu.Layers.layers[parentv].items[refLayerName];
this.refItem.childMenu = this;
- var binding = new RichFaces.Menu.Layer.Binding(refLayerName,
evtName, this.showMe.bindAsEventListener(this));
+ var binding = new RichFaces.Menu.Layer.Binding(refLayerName,
this.eventJsToPrototype(options.evtName ||
"mouseover"), this.showMe.bindAsEventListener(this));
this.bindings.push(binding);
binding.refresh();