You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2007/03/24 20:09:36 UTC

svn commit: r522093 - in /incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree: res/tree-table.css res/tree.css res/tree.js table/TreeTable.html table/TreeTable.java

Author: knopp
Date: Sat Mar 24 12:09:35 2007
New Revision: 522093

URL: http://svn.apache.org/viewvc?view=rev&rev=522093
Log:
Make it possible to scroll only tree table body, while the header stays

Modified:
    incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree-table.css
    incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.css
    incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.js
    incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.html
    incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.java

Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree-table.css
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree-table.css?view=diff&rev=522093&r1=522092&r2=522093
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree-table.css (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree-table.css Sat Mar 24 12:09:35 2007
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+ 
 /**
  * a_   columns
  * b_   column
@@ -226,4 +227,6 @@
 	background-color: #eee;
 }
 
-
+div.wicket-tree-table div.wicket-tree-table-body {
+	background-color: white;
+}

Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.css
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.css?view=diff&rev=522093&r1=522092&r2=522093
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.css (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.css Sat Mar 24 12:09:35 2007
@@ -14,6 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 div.wicket-tree {
 	white-space: nowrap;	
 	border: 1px solid #ccc;

Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.js
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.js?view=diff&rev=522093&r1=522092&r2=522093
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.js (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/res/tree.js Sat Mar 24 12:09:35 2007
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 if (typeof(Wicket) == "undefined")
 	Wicket = { };
 
 Wicket.Tree = { };
 
 Wicket.Tree.removeNodes = function(prefix, nodeList) {
-	for(var i = 0; i < nodeList.length; i++ ) {
+	for (var i = 0; i < nodeList.length; i++) {
 		var e = document.getElementById(prefix + nodeList[i]);
 		if (e != null) {
 			e.parentNode.removeChild(e);
@@ -43,8 +44,86 @@
 			break;
 	}
 	if (i == p.childNodes.length - 1) {
-		p.appendChild(newNode);		
+		p.appendChild(newNode);
 	} else {
 		p.insertBefore(newNode, p.childNodes[i+1]);
 	}
 }
+
+Wicket.TreeTable = { };
+
+/* Javascript that resizes the tree table header so that it matches size of the content.
+   This is needed when the scrollbar next to content is show, so that the columns are 
+   properly aligned */
+Wicket.TreeTable.update = function(elementId) {
+	
+	var element = document.getElementById(elementId);
+	
+	if (element != null && typeof(element) != "undefined") { 
+		
+		try {
+		
+			/// find the div containing the inner header div
+			var headerParent = element.getElementsByTagName("div")[1];
+			
+			// find the inner header div
+			var header = headerParent.getElementsByTagName("div")[0];
+			
+			// body div should be next div after header parent
+			var body = headerParent.nextSibling;
+				
+			// interate until div is found
+			while (body.tagName != "DIV") {			
+				body = body.nextSibling;
+			}
+
+			// last check to find out if we are updating the right component
+			if (body.className == "wicket-tree-table-body") {
+
+				// get the right padding from header - we need to substract it from new width
+				var padding;
+				if (document.defaultView && document.defaultView.getComputedStyle) {
+					padding = document.defaultView.getComputedStyle(headerParent, '').getPropertyValue("padding-right");
+				} else if (headerParent.currentStyle) {
+					padding = headerParent.currentStyle.paddingRight;
+				} else {
+					padding = 6;
+				}
+				
+				padding = parseInt(padding, 10);
+										
+				// set the new width			
+				var w = (body.getElementsByTagName("div")[0].clientWidth - padding) + "px";
+				
+				if (w == (-padding)+"px") { // this can happen if the first row is hidden (e.g. rootless mode)
+					// try to get the width from second row 	 
+					w = (body.getElementsByTagName("div")[1].clientWidth - padding) + "px";
+					
+				}
+					
+				if (w != "0px") {
+					header.style.width = w;
+				}
+				
+			}
+		} catch (ignore) {			
+		}
+	}
+}
+
+Wicket.TreeTable.attached = new Object();
+
+Wicket.TreeTable.attachUpdate = function(treeTableId) {
+	// get the object that contains ids of elements on which the update method was already attached
+	var attached = Wicket.TreeTable.attached;
+	
+	// force updating the element
+	Wicket.TreeTable.update(treeTableId);
+	
+	// if the update has not been attached to this tree table yet...
+	if (typeof(attached[treeTableId]) == "undefined") {				
+		// ... attach it
+		attached[treeTableId] = window.setInterval(function() { Wicket.TreeTable.update(treeTableId); }, 100);
+	} 
+}
+

Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.html
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.html?view=diff&rev=522093&r1=522092&r2=522093
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.html (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.html Sat Mar 24 12:09:35 2007
@@ -16,19 +16,21 @@
 -->
 <wicket:panel>
 
-<div class="wicket-tree-table">
+<div class="wicket-tree-table">	
 	<div class="header">
-
-		<span wicket:id="sideColumns" class="text">
-		</span>
-		
-		<div class="a_">
-			<span wicket:id="middleColumns" class="text">
+		<div>
+			<span wicket:id="sideColumns">
 			</span>
-		</div>
-
+			
+			<div class="a_">
+				<span wicket:id="middleColumns">
+				</span>
+			</div>			
+		</div>	
 	</div>
 
+<div class="wicket-tree-table-body">
+
 <div wicket:id="i">
 <span wicket:id="sideColumns">
 </span>
@@ -40,11 +42,15 @@
 
 </div>
 
-</wicket:panel>
+</div>
 
+<script wicket:id="attachJavascript">
+	/* Will be replaced on runtime; Wicket.TreeTable.attachUpdate("treeTable"); */
+</script>
 
+</wicket:panel>
 
 <wicket:fragment wicket:id="fragment">
 	<span wicket:id="indent"></span><a wicket:id="link" style=""><span wicket:id="image"/></a>			
-	<a wicket:id="nodeLink" class="node-link"><span class="icon" wicket:id="icon"></span><span wicket:id="label" class="text"></span></a>	
+	<a wicket:id="nodeLink" class="node-link"><span class="icon" wicket:id="icon"></span><span wicket:id="label"></span></a>	
 </wicket:fragment>

Modified: incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.java?view=diff&rev=522093&r1=522092&r2=522093
==============================================================================
--- incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.java (original)
+++ incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket-extensions/src/main/java/wicket/extensions/markup/html/tree/table/TreeTable.java Sat Mar 24 12:09:35 2007
@@ -33,6 +33,7 @@
 import wicket.markup.html.panel.Fragment;
 import wicket.model.AbstractReadOnlyModel;
 import wicket.model.IModel;
+import wicket.model.Model;
 
 /**
  * TreeTable is a component that represents a grid with a tree. It's divided
@@ -108,8 +109,8 @@
 	}
 
 	/** Reference to the css file. */
-	private static final ResourceReference CSS = new ResourceReference(
-			DefaultAbstractTree.class, "res/tree-table.css");
+	private static final ResourceReference CSS = new ResourceReference(DefaultAbstractTree.class,
+			"res/tree-table.css");
 
 	private static final long serialVersionUID = 1L;
 
@@ -131,15 +132,15 @@
 	 * 
 	 * @param callback
 	 *            Used to get the display string
-	 *            
+	 * 
 	 * @param table
-	 * 			  Tree table
-	 *            
+	 *            Tree table
+	 * 
 	 * @return The tree cell
 	 */
 	public static Component newTreeCell(MarkupContainer parent, String id, TreeNode node,
 			int level, IRenderNodeCallback callback, TreeTable table)
-	{		
+	{
 		return table.newTreePanel(parent, id, node, level, callback);
 	}
 
@@ -190,9 +191,11 @@
 		super(id, model);
 		init(columns);
 	}
-	
-	private boolean hasLeftColumn() {
-		for (int i = 0; i < columns.length; ++i) {
+
+	private boolean hasLeftColumn()
+	{
+		for (int i = 0; i < columns.length; ++i)
+		{
 			if (columns[i].getLocation().getAlignment().equals(Alignment.LEFT))
 				return true;
 		}
@@ -221,7 +224,8 @@
 			}
 
 		// create the view for middle columns
-		MiddleColumnsView middleColumns = new MiddleColumnsView("middleColumns", null, hasLeftColumn());
+		MiddleColumnsView middleColumns = new MiddleColumnsView("middleColumns", null,
+				hasLeftColumn());
 		add(middleColumns);
 		if (columns != null)
 			for (int i = 0; i < columns.length; i++)
@@ -284,8 +288,6 @@
 			// add the tree table header
 			addHeader();
 		}
-
-		super.onAttach();
 	}
 
 	/**
@@ -331,7 +333,8 @@
 			}
 
 		// add middle columns
-		MiddleColumnsView middleColumns = new MiddleColumnsView("middleColumns", node, hasLeftColumn());
+		MiddleColumnsView middleColumns = new MiddleColumnsView("middleColumns", node,
+				hasLeftColumn());
 		if (columns != null)
 			for (int i = 0; i < columns.length; i++)
 			{
@@ -408,5 +411,21 @@
 		}
 
 		this.columns = columns;
-	}	
+		
+		// Attach the javascript that resizes the header according to the body
+		// This is necessary to support fixed position header. The header does
+		// not
+		// scroll together with body. The body contains vertical scrollbar. The
+		// header width must be same as body content width, so that the columns
+		// are properly aligned.
+		add(new Label("attachJavascript", new Model() 
+		{
+			private static final long serialVersionUID = 1L;
+
+			public Object getObject()
+			{
+				return "Wicket.TreeTable.attachUpdate(\"" + getMarkupId() + "\");";
+			}
+		}).setEscapeModelStrings(false));
+	}
 }