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));
+ }
}