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

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Thu Apr 12 11:04:22 EDT 2007


Author: a.izobov
Date: 2007-04-12 11:04:22 -0400 (Thu, 12 Apr 2007)
New Revision: 383

Modified:
   trunk/richfaces/dropdown-menu/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js
Log:
changing in reposition menu and submenu

Modified: trunk/richfaces/dropdown-menu/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js
===================================================================
--- trunk/richfaces/dropdown-menu/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js	2007-04-12 09:42:23 UTC (rev 382)
+++ trunk/richfaces/dropdown-menu/src/main/resources/org/richfaces/renderkit/html/scripts/menu.js	2007-04-12 15:04:22 UTC (rev 383)
@@ -452,7 +452,13 @@
 
 		var windowHeight = win.height;
 		var windowWidth = win.width;
-		var screenOffset = Position.cumulativeOffset(this.element);
+		
+//		var screenOffset = Position.cumulativeOffset(this.element);
+//		if (Element.getStyle(this.element, 'position') == 'absolute') {
+//			screenOffset[0] = 0;
+//			screenOffset[1] = 0;
+//		}
+		var screenOffset = Position.positionedOffset(this.element);
 		var dim = Element.getDimensions(this.element);
 
 		// parent element
@@ -502,8 +508,8 @@
 		if (!foundPos) {
 			layerPos = this.calcPosition(listPos[0].jointPoint, listPos[0].direction)
 		}
-		this.layer.style.left = layerPos.left + hOffset + "px";
-		this.layer.style.top = layerPos.top + vOffset + "px";
+		this.layer.style.left = layerPos.left + hOffset - this.left + "px";
+		this.layer.style.top = layerPos.top + vOffset - this.top + "px";
 		
 		Exadel.Menu.Layers.LMPopUp(this.layer.id, false);
 		Exadel.Menu.Layers.clearLMTO();
@@ -517,6 +523,9 @@
 	
 	this.event = e;
 	this.element = Event.findElement(e, 'div');
+	if (this.element.id.indexOf(":folder") == (this.element.id.length -7) ) {
+		this.element = this.element.parentNode;
+	}
 	this.layer = $(layer);
 
     this.show = function() {
@@ -532,7 +541,12 @@
     var windowHeight = body.height;
     var windowWidth = body.width;
     var scrolls = {top:0, left:0};
-    var screenOffset = Position.cumulativeOffset(this.element);
+    var screenOffset = Position.positionedOffset(this.element);
+    var screenOffsetParent = Position.positionedOffset(this.element.parentNode.parentNode);
+    screenOffset[0]+=screenOffsetParent[0];
+    screenOffset[1]+=screenOffsetParent[1];
+    var cumulativeOffset = Position.cumulativeOffset(this.element);
+    var labelOffset = [cumulativeOffset[0] - screenOffset[0], cumulativeOffset[1] - screenOffset[1]];
     var dim = Element.getDimensions(this.element);
     var top = screenOffset[1] + scrolls.top;
     var bottom = top + dim.height;
@@ -551,35 +565,37 @@
     var layerTop = top;
 	
     if (dir == 0) {
-	    if (layerLeft + layerdim.width >= windowWidth) {
-	        var invisibleRight = layerLeft + layerdim.width - windowWidth;
+	    if (layerLeft + layerdim.width + labelOffset[0] >= windowWidth) {
+	        var invisibleRight = layerLeft + layerdim.width + labelOffset[0] - windowWidth;
 	        layerLeft = left - layerdim.width;
 	    }
 	
-	    if (layerLeft < 0) {
-	        if (Math.abs(layerLeft) > invisibleRight) {
+	    if (layerLeft  + labelOffset[0] < 0) {
+	        if (Math.abs(layerLeft + labelOffset[0]) > invisibleRight) {
 	        	layerLeft = right;
 	        }
 	    }
 	    
-	    if (layerTop + layerdim.height >= windowHeight) {
-	    	var invisibleBottom = layerTop + layerdim.height - windowHeight;
-	    	var items = this.layer.firstChild.childNodes;
-	    	if (items.length > 0) {
-	    		var lastItem = items[items.length-1];
-    		    var layerOffset = Position.cumulativeOffset(this.layer);
-		   		var itemOffset = Position.cumulativeOffset(lastItem);
-			    layerTop = top -(itemOffset[1]-layerOffset[1]);
-			    if (layerTop < 0) {
-			    	if (Math.abs(layerTop) > invisibleBottom) layerTop = top;
-			    }
-	    	}
-	    	
-	    }
     } else if (dir == 1) {
         layerLeft = left - layerdim.width;
     }
 
+    if (layerTop + layerdim.height + labelOffset[1] >= windowHeight) {
+    	var invisibleBottom = layerTop + layerdim.height + labelOffset[1] - windowHeight;
+    	var items = this.layer.firstChild.childNodes;
+    	if (items.length > 0) {
+    		var lastItem = items[items.length-1];
+//    		    var layerOffset = Position.cumulativeOffset(this.layer);
+	   		var itemOffset = Position.positionedOffset(lastItem);
+//			    layerTop = top -(itemOffset[1]-layerOffset[1]);
+			layerTop = top - itemOffset[1];
+		    if (layerTop < 0) {
+		    	if (Math.abs(layerTop) > invisibleBottom) layerTop = top;
+		    }
+    	}
+    	
+    }
+
 /*    if (layerLeft + layerdim.width >= windowWidth) {
         layerLeft = left - layerdim.width + Exadel.Menu.Layers.shadowWidth;
     }




More information about the richfaces-svn-commits mailing list