[richfaces-svn-commits] JBoss Rich Faces SVN: r11935 - trunk/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Fri Dec 19 15:01:46 EST 2008


Author: abelevich
Date: 2008-12-19 15:01:46 -0500 (Fri, 19 Dec 2008)
New Revision: 11935

Modified:
   trunk/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js
Log:
https://jira.jboss.org/jira/browse/RF-4592

Modified: trunk/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js
===================================================================
--- trunk/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js	2008-12-19 19:56:06 UTC (rev 11934)
+++ trunk/ui/menu-components/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js	2008-12-19 20:01:46 UTC (rev 11935)
@@ -109,10 +109,12 @@
 		}
 		this.detectWidth();
 		var menu = $(menuName);
+		var eventResult = true;
+		
 		RichFaces.Menu.fitLayerToContent(menu);
 		var visible = this.isVisible(menuName);
-		this.setVisibility(menuName, visibleFlag);
-		this.ieSelectWorkAround(menuName, visibleFlag);
+//		this.setVisibility(menuName, visibleFlag);
+//		this.ieSelectWorkAround(menuName, visibleFlag);
 		var menuLayer = this.layers[menu.id];
 		
 		if (visible && !visibleFlag) {
@@ -121,7 +123,7 @@
 					menuLayer.eventOnClose(event);
 				}
 				if (menuLayer.eventOnCollapse) {
-					menuLayer.eventOnCollapse(event);
+					eventResult = menuLayer.eventOnCollapse(event);
 				}
 				if (menuLayer.refItem) {
 					menuLayer.refItem.highLightGroup(false);
@@ -132,8 +134,9 @@
 				if (menuLayer.eventOnOpen) {
 					menuLayer.eventOnOpen(event);
 				}
+
 				if (menuLayer.eventOnExpand) {
-					menuLayer.eventOnExpand(event);
+					eventResult = menuLayer.eventOnExpand(event);
 				}
 	
 				if (menuLayer.level>0) {
@@ -147,6 +150,11 @@
 				}
 			}
 		}
+				
+		if(eventResult != false) {
+			this.setVisibility(menuName, visibleFlag);
+			this.ieSelectWorkAround(menuName, visibleFlag);
+		}
 	},
 	
 	initIFrame: function(layer) {
@@ -359,79 +367,79 @@
     this.element = Event.element(e);
     this.layer = $(layer);
     this.show = function() {
-        RichFaces.Menu.Layers.shutdown();
-        var body = RichFaces.Menu.getPageDimensions();
-        var win = RichFaces.Menu.getWindowDimensions();
-        var bodyHeight = body.height;
-        var bodyWidth = body.width;
-        
-   		var layer_display = this.layer.style.display;
+		RichFaces.Menu.Layers.shutdown();
+		var body = RichFaces.Menu.getPageDimensions();
+		var win = RichFaces.Menu.getWindowDimensions();
+		var bodyHeight = body.height;
+		var bodyWidth = body.width;
+	        
+		var layer_display = this.layer.style.display;
 		if (layer_display=='none')
 		{
 			this.layer.style.visibility='hidden';
 			this.layer.style.display='';
 		}
-        
-        var clientX = this.event.clientX;
-        var clientY = this.event.clientY;
-
+	        
+		var clientX = this.event.clientX;
+		var clientY = this.event.clientY;
+	
 		var e = this.event;
 		var x = Event.pointerX(e);
 		var y = Event.pointerY(e);
 		var elementDim = Richfaces.Position.getOffsetDimensions(this.layer);
-		
+			
 		var offsets = Position.cumulativeOffset(this.layer);
-		
+			
 		offsets[0] -= this.layer.offsetLeft || 0;
 		offsets[1] -= this.layer.offsetTop || 0;
-	
+		
 		var toolTipX = x - offsets[0];
 		var toolTipY = y - offsets[1];
-		
-        var layerdim = Element.getDimensions(this.layer);
-        var layerLeft = toolTipX;
-
-        if (clientX + layerdim.width > win.width) {
-            layerLeft -= (layerdim.width - RichFaces.Menu.Layers.shadowWidth - RichFaces.Menu.Layers.CornerRadius);
-        }
-
-        if (layerLeft < 0) {
-            layerLeft = 0;
-        }
-
-        /*
-        if (layerLeft + layerdim.width  > bodyWidth) {
-            layerLeft = bodyWidth - layerdim.width;
-        }
-
-        if (layerLeft < 0) {
-            layerLeft = 0;
-        }
-        */
-        var layerTop = toolTipY;
-        /*if (layertop + layerdim.height > bodyHeight) {
-            layertop = bodyHeight - layerdim.height;
-        }
-
-        if (layertop < 0) {
-            layertop = 0;
-        }
-        */
-        if (clientY + layerdim.height > win.height) {
-            layerTop -= (layerdim.height - RichFaces.Menu.Layers.shadowWidth - RichFaces.Menu.Layers.CornerRadius);
-        }
-
-        if (layerTop < 0) {
-            layerTop = 0;
-        }
-
-        this.layer.style.left = layerLeft + "px";
-        this.layer.style.top = layerTop + "px";
-
+			
+		var layerdim = Element.getDimensions(this.layer);
+		var layerLeft = toolTipX;
+	
+		if (clientX + layerdim.width > win.width) {
+			layerLeft -= (layerdim.width - RichFaces.Menu.Layers.shadowWidth - RichFaces.Menu.Layers.CornerRadius);
+		}
+	
+		if (layerLeft < 0) {
+			layerLeft = 0;
+		}
+	
+		 /*
+		if (layerLeft + layerdim.width  > bodyWidth) {
+			layerLeft = bodyWidth - layerdim.width;
+		}
+	
+		if (layerLeft < 0) {
+			layerLeft = 0;
+		}
+		*/
+		var layerTop = toolTipY;
+		/*if (layertop + layerdim.height > bodyHeight) {
+			layertop = bodyHeight - layerdim.height;
+		}
+	
+		if (layertop < 0) {
+			layertop = 0;
+		}
+		*/
+		if (clientY + layerdim.height > win.height) {
+			layerTop -= (layerdim.height - RichFaces.Menu.Layers.shadowWidth - RichFaces.Menu.Layers.CornerRadius);
+		}
+	
+		if (layerTop < 0) {
+			layerTop = 0;
+		}
+	
+		this.layer.style.left = layerLeft + "px";
+		this.layer.style.top = layerTop + "px";
+	
 		this.layer.style.display=layer_display;
 		this.layer.style.visibility='';
 		
-        RichFaces.Menu.Layers.LMPopUp(this.layer.id, false,e);
+		RichFaces.Menu.Layers.LMPopUp(this.layer.id, false,e);
         RichFaces.Menu.Layers.clearLMTO();
     }.bind(this);
 }
@@ -1173,22 +1181,55 @@
 	asContextMenu: function(options){
    		this.highlightParent = false;
  		this.options = options || {};
+ 		
  		if (this.options.ongroupactivate){
 			this.eventOnGroupActivate = this.options.ongroupactivate.bindAsEventListener(this);
 		}
+
 		if (this.options.onitemselect){
 			this.eventOnItemSelect = this.options.onitemselect.bindAsEventListener(this);
 		}
+//  	see RF-4592 for details		
+//		if (this.options.oncollapse){
+//			this.eventOnCollapse = this.options.oncollapse.bindAsEventListener(this);
+//		}
+		
 		if (this.options.oncollapse){
-			this.eventOnCollapse = this.options.oncollapse.bindAsEventListener(this);
+			this.eventOnCollapse = this.options.oncollapse.bindAsEventListener(this,"collapse");
 		}
-		if (this.options.onexpand){
-			this.eventOnExpand = this.options.onexpand.bindAsEventListener(this);
-		}
-   		
+		
+//		if (this.options.onexpand){
+//			this.eventOnExpand = this.options.onexpand.bindAsEventListener(this);
+//		}
+
+ 		if (this.options.onexpand){
+ 			this.eventOnExpand = this.invokeEvent.bindAsEventListener(this,"expand");
+ 		}
+ 		  		
    		//TODO: clarify
  		return this;
 	},
+	
+	invokeEvent : function (event, eventName) {
+		var eventFunction = this.options['on'+eventName];
+		var result;
+		
+		if (eventFunction) {
+			var eventObj;
+			if (event) {
+				eventObj = event;
+			} else if( document.createEventObject ) {
+				eventObj = document.createEventObject();
+			} else if( document.createEvent )	{
+				eventObj = document.createEvent('Events');
+				eventObj.initEvent(eventName, true, false );
+			}
+			result = eventFunction.call(eventObj);
+		}
+		if (result!=false) result = true;
+		return result;
+	},
+	
 	eventJsToPrototype: function(evtName){
 		var indexof = evtName.indexOf('on');
 		if(indexof  >= 0){




More information about the richfaces-svn-commits mailing list