Author: pkawiak
Date: 2008-07-23 06:55:18 -0400 (Wed, 23 Jul 2008)
New Revision: 9739
Modified:
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTable.js
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableHeader.js
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableSelection.js
trunk/sandbox/ui/extendedDataTable/src/main/templates/org/richfaces/htmlExtendedDataTable.jspx
Log:
added destroy method
Modified:
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTable.js
===================================================================
---
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTable.js 2008-07-23
09:27:37 UTC (rev 9738)
+++
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTable.js 2008-07-23
10:55:18 UTC (rev 9739)
@@ -3,6 +3,8 @@
ExtendedDataTable.DataTable = Class.create({
initialize : function(id, options) {
this.id = id;
+ $(this.id).component = this;
+ this["rich:destructor"] = "destroy";
this.groups = [];
// register event handlers
@@ -32,6 +34,38 @@
Utils.Condition.ElementPresent(id+':header'), 5);
},
+ destroy: function() {
+ var rows = this.tableB.rows;
+ rowCount = rows.length;
+ for(var i = 0; i < rowCount; i++) {
+ this.header.removeListeners();
+ Utils.DOM.Event.removeListeners(rows[i]);
+ }
+ this.header.removeListeners();
+ },
+
+ /**
+ * Changes the scroll position of the table to show row of specified index
+ */
+ showRow: function(rowIndex) {
+ var row = $(this.id+":n:"+rowIndex);
+ var offsetTop = this.tableB.offsetTop + row.offsetTop;
+ var scrollTop = this.scrollingDiv.getElement().scrollTop;
+
+ var dS = offsetTop - scrollTop;
+
+ if (dS < 0) {
+ this.scrollingDiv.getElement().scrollTop = scrollTop + dS;
+ }else{
+ var scrollDivHeight = this.scrollingDiv.getHeight();
+ var rowHeight = row.getHeight();
+ dS = dS + rowHeight - scrollDivHeight;
+ if (dS > 0) {
+ this.scrollingDiv.getElement().scrollTop = scrollTop + dS;
+ }
+ }
+ },
+
setColumnWidth: function(columnIndex, newWidth) {
ClientUILib.log(ClientUILogger.INFO, "columnIndex: " + columnIndex);
if (columnIndex >= this.getColumnsNumber) {
@@ -185,7 +219,7 @@
var table = this.table;
this.mainDiv = new ClientUI.common.box.Box(this.id,null,true);
this.outerDiv = new ClientUI.common.box.Box(this.id +":od",null,true);
- this.tableB = new ClientUI.common.box.Box(this.id +":n",null,true);
+ this.tableB = $(this.id +":n")
this.fakeIeRow = $(this.id +":fakeIeRow");
this.fakeIeBodyRow = $(this.id +":body:fakeIeRow");
this.header = new ExtendedDataTable.DataTable.header(this.id
+":header",this);
@@ -224,6 +258,19 @@
var i=1;
var endIndex = columns.length-1;
while ((i < endIndex) && (excessWidth > 0)) {
+ var colWidth = this.getColumnWidth(i);
+ var spareWidth = colWidth - this.minColumnWidth;
+ var dW;
+ if (spareWidth >= excessWidth) {
+ dW = excessWidth;
+ }else{
+ dW = spareWidth;
+ }
+ this.setColumnWidth(i, colWidth - dW);
+ this.header.setColumnWidth(i, colWidth - dW);
+ excessWidth -= dW;
+ i++;
+ /*
var col = columns[columns.length-i-1];
var spareWidth = col.offsetWidth - this.minColumnWidth;
if (spareWidth > excessWidth) {
@@ -235,7 +282,7 @@
columns[endIndex - i].width = col.width;
excessWidth -= spareWidth;
}
- i++;
+ */
}
},
@@ -303,9 +350,11 @@
scrollingDiv.setStyle('height:'+ newHeight +'px;');
for (var i=0; i<headerChildren.length-1; i++) {
var headerChild = headerChildren[i];
+ Utils.DOM.Event.removeListeners(headerChild);
+
Utils.DOM.Event.observe(headerChild,'mouseover',this.header.eventHeaderCellMouseOver);
+
Utils.DOM.Event.observe(headerChild,'mouseout',this.header.eventHeaderCellMouseOut);
var isSortable = headerChild.getAttribute('sortable');
if ((isSortable) && (isSortable.indexOf('true') == 0)) {
- Utils.DOM.Event.removeListeners(headerChild);
Utils.DOM.Event.observe(headerChild, 'click', this.eventCellClicked);
}
};
@@ -320,7 +369,7 @@
this.fakeIeRow = null;
}
if (this.fakeIeBodyRow) {
- this.tableB.getElement().deleteRow(this.fakeIeBodyRow);
+ this.tableB.deleteRow(this.fakeIeBodyRow);
this.fakeIeBodyRow = null;
}
}
Modified:
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableHeader.js
===================================================================
---
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableHeader.js 2008-07-23
09:27:37 UTC (rev 9738)
+++
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableHeader.js 2008-07-23
10:55:18 UTC (rev 9739)
@@ -36,6 +36,19 @@
var menuDiv = $(el.id+"header:menuDiv");
menuDiv.className = "extdt-menu-div-out";
},
+
+ removeListeners: function() {
+ var columnCells = this.getColumnCells();
+ for (var i=0; i<columnCells.length-1; i++) {
+ var headerChild = columnCells[i];
+ var headerChildChildren = headerChild.childElements();
+ var sepSpan = headerChildChildren[2];
+ var menuImage = headerChildChildren[7];
+
+ Utils.DOM.Event.removeListeners(menuImage);
+ Utils.DOM.Event.removeListeners(sepSpan);
+ };
+ },
getVisibleWidth: function() {
var sum = 0;
@@ -55,7 +68,6 @@
errMsg = "TODO insert commnet about header structure here";
throw(errMsg);
}
- this.adjustSeparators();
},
@@ -126,7 +138,7 @@
adjustSeparators: function() {
var columnCells = this.getColumnCells();
this._redrawTable(this.extDt.table.getElement());
- this._redrawTable(this.extDt.tableB.getElement());
+ this._redrawTable(this.extDt.tableB);
for (var i=0; i<columnCells.length-1; i++) {
var headerChild = columnCells[i];
var headerNextChild = columnCells[i+1];
@@ -142,11 +154,8 @@
//remove listeners
Utils.DOM.Event.removeListeners(menuImage);
- Utils.DOM.Event.removeListeners(headerChild);
Utils.DOM.Event.removeListeners(sepSpan);
//add listeners
- Utils.DOM.Event.observe(headerChild,'mouseover',this.eventHeaderCellMouseOver);
- Utils.DOM.Event.observe(headerChild,'mouseout',this.eventHeaderCellMouseOut);
Utils.DOM.Event.observe(menuImage,'click',this.menuImageMouseDown);
Utils.DOM.Event.observe(sepSpan, 'click', this.eventSepClick);
Utils.DOM.Event.observe(sepSpan, 'mousedown', this.eventSepMouseDown);
Modified:
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableSelection.js
===================================================================
---
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableSelection.js 2008-07-23
09:27:37 UTC (rev 9738)
+++
trunk/sandbox/ui/extendedDataTable/src/main/javascript/ClientUI/controls/datatable/ExtendedDataTableSelection.js 2008-07-23
10:55:18 UTC (rev 9739)
@@ -404,7 +404,7 @@
noDefault = true;
this.setActiveRow(rowIndex);
} else {
- this.grid.getBody().showRow("up");
+ //this.grid.getBody().showRow("up");
}
}
break;
@@ -429,7 +429,7 @@
noDefault = true;
this.setActiveRow(rowIndex);
} else {
- this.grid.getBody().showRow("down");
+ //this.grid.getBody().showRow("down");
}
}
break;
@@ -446,7 +446,7 @@
this.lostFocus();
}
if (noDefault) {
- this.grid.getBody().showRow(this.activeRow);
+ this.dataTable.showRow(this.activeRow);
this.selectionChanged(event);
if (event.preventBubble) event.preventBubble();
Event.stop(event);
Modified:
trunk/sandbox/ui/extendedDataTable/src/main/templates/org/richfaces/htmlExtendedDataTable.jspx
===================================================================
---
trunk/sandbox/ui/extendedDataTable/src/main/templates/org/richfaces/htmlExtendedDataTable.jspx 2008-07-23
09:27:37 UTC (rev 9738)
+++
trunk/sandbox/ui/extendedDataTable/src/main/templates/org/richfaces/htmlExtendedDataTable.jspx 2008-07-23
10:55:18 UTC (rev 9739)
@@ -115,8 +115,9 @@
</div>
<script type="text/javascript">
//<![CDATA[
- #{this:getJavaScriptVarName(context, component)} =
#{this:createClientDataTable(context, component)};
- #{this:getScriptContributions(context, component)};
+ delete #{this:getJavaScriptVarName(context, component)};
+ #{this:getJavaScriptVarName(context, component)} =
#{this:createClientDataTable(context, component)};
+ #{this:getScriptContributions(context, component)};
//]]>
</script>
</div>