You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xap-commits@incubator.apache.org by jm...@apache.org on 2006/11/10 08:58:38 UTC
svn commit: r473269 - in /incubator/xap/trunk/src/xap:
bridges/dojo/RowBridge.js widgets/dojo/TreeTable.js
Author: jmargaris
Date: Fri Nov 10 00:58:37 2006
New Revision: 473269
URL: http://svn.apache.org/viewvc?view=rev&rev=473269
Log:
real sorting working for strings
Modified:
incubator/xap/trunk/src/xap/bridges/dojo/RowBridge.js
incubator/xap/trunk/src/xap/widgets/dojo/TreeTable.js
Modified: incubator/xap/trunk/src/xap/bridges/dojo/RowBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/bridges/dojo/RowBridge.js?view=diff&rev=473269&r1=473268&r2=473269
==============================================================================
--- incubator/xap/trunk/src/xap/bridges/dojo/RowBridge.js (original)
+++ incubator/xap/trunk/src/xap/bridges/dojo/RowBridge.js Fri Nov 10 00:58:37 2006
@@ -71,8 +71,39 @@
this.getPeer().insertRow(childHandler.getPeer(),index);
}
else{
- this.getPeer().addCell(childHandler.getRootDomNode());
+ var cellInfo = {};
+ cellInfo._text="";
+
+ //TODO improve how we recognize text and sort value
+ if (childHandler.getPeer() && childHandler.getPeer().getText){
+ cellInfo._text=childHandler.getPeer().getText();
+ }
+ else{
+ cellInfo._text = xap.bridges.dojo.RowBridge.ts_getInnerText(childHandler.getRootDomNode());
+ }
+ this.getPeer().addCell(childHandler.getRootDomNode(),cellInfo);
}
+}
+
+xap.bridges.dojo.RowBridge.ts_getInnerText = function(el) {
+ if (typeof el == "string") return el;
+ if (typeof el == "undefined") { return el };
+ if (el.innerText) return el.innerText; //Not needed but it is faster
+ var str = "";
+
+ var cs = el.childNodes;
+ var l = cs.length;
+ for (var i = 0; i < l; i++) {
+ switch (cs[i].nodeType) {
+ case 1: //ELEMENT_NODE
+ str += xap.bridges.dojo.RowBridge.ts_getInnerText(cs[i]);
+ break;
+ case 3: //TEXT_NODE
+ str += cs[i].nodeValue;
+ break;
+ }
+ }
+ return str;
}
Modified: incubator/xap/trunk/src/xap/widgets/dojo/TreeTable.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/widgets/dojo/TreeTable.js?view=diff&rev=473269&r1=473268&r2=473269
==============================================================================
--- incubator/xap/trunk/src/xap/widgets/dojo/TreeTable.js (original)
+++ incubator/xap/trunk/src/xap/widgets/dojo/TreeTable.js Fri Nov 10 00:58:37 2006
@@ -480,17 +480,54 @@
},
-
- //TODO PLACEHOLDER TEST CODE
- sortColumn: function(){
- this._rows.reverse();
+ sortColumn: function( column ){
+
+ //TODO support different types
+ var dataType = column._dataType || "string";
+
+ //figure out what index the column is
+ var index = xap.util.ArrayHelper.indexOf(this._columns,column);
+
+ //build an array of rows that will be sorted by that index
+ for (var i = 0; i<this._rows.length; i++){
+ var row = this._rows[i];
+ var cellInfo = row._cellInfo[index];
+ var sortValue = cellInfo._sortValue || cellInfo._text;
+
+ //value to sort by
+ row._sortValue = sortValue;
+ }
+
+ //sort the array and change _rows to match
+ //TODO choose different functions based on data types!
+ this._rows.sort(this._sortStringsFunction);
+
+
+ if (!column._sort){
+ column._sort = "ascending";
+ }
+ else if (column._sort && column._sort == "ascending"){
+ column._sort = "descending";
+ this._rows.reverse();
+ }
+ else{
+ column._sort = "ascending";
+ }
//before we do anything set the widths of first row of cells
//so IE won't freak out
if (dojo.render.html.ie){
this._fixColumnWidths();
}
this._rebuildRowsLater();
+ },
+
+ _sortStringsFunction: function(a, b){
+ var aVal = a._sortValue.toLowerCase();
+ var bVal = b._sortValue.toLowerCase();
+ if (aVal==b.val) return 0;
+ if (aVal<bVal) return -1;
+ return 1;
}
}
@@ -536,7 +573,7 @@
onClickCallback : function(){
if (this._table){
- this._table.sortColumn();
+ this._table.sortColumn(this);
}
}
});
@@ -556,6 +593,7 @@
this._rows = [];
//TODO start closed and fire a first expand event
this._expanded = true;
+ this._cellInfo = [];
}
@@ -586,7 +624,8 @@
//thing, it should probably have something like:
//getText() function, domNode, getSortValue() function, etc,
//right now we don't have a good way of knowing what the text is
- addCell : function( cell ){
+ addCell : function( cell , cellInfo){
+ this._cellInfo.push(cellInfo);
var td = document.createElement("td");
this.domNode.appendChild(td);
td.style.whiteSpace = "nowrap";