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";