From: phasefx Date: Fri, 11 Aug 2006 20:33:23 +0000 (+0000) Subject: column sorting... some kinks with on_all_fleshed retrieve, need sort hints (and maybe... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=32ac37d68f43e467cb105afa8a84919cec335463;p=Evergreen.git column sorting... some kinks with on_all_fleshed retrieve, need sort hints (and maybe custom sorts) for columns, so money gets sorted correctly, etc., need indication that large lists are retrieving data on sort... need direction arrows for the sorted column git-svn-id: svn://svn.open-ils.org/ILS/trunk@5480 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/xul/staff_client/chrome/content/util/list.js b/Open-ILS/xul/staff_client/chrome/content/util/list.js index 20820af61e..5aeab1bb60 100644 --- a/Open-ILS/xul/staff_client/chrome/content/util/list.js +++ b/Open-ILS/xul/staff_client/chrome/content/util/list.js @@ -65,6 +65,17 @@ util.list.prototype = { treecol.setAttribute(j,this.columns[i][j]); } treecols.appendChild(treecol); + treecol.addEventListener( + 'click', + function(ev) { + var sortDir = ev.target.getAttribute('sortDir') || 'desc'; + if (sortDir == 'desc') sortDir = 'asc'; else sortDir = 'desc'; + //alert('sort ' + ev.target.id + ' ' + sortDir); + ev.target.setAttribute('sortDir',sortDir); + obj._sort_tree(ev.target,sortDir); + }, + false + ); var splitter = document.createElement('splitter'); splitter.setAttribute('class','tree-splitter'); treecols.appendChild(splitter); @@ -804,5 +815,50 @@ util.list.prototype = { return dump; }, + '_sort_tree' : function(col,sortDir) { + var obj = this; + try { + if (obj.node.getAttribute('no_sort')) { + return; + } + if (obj.on_all_fleshed) { + alert('This list is busy rendering/retrieving data.'); + return; + } + var col_pos; + for (var i = 0; i < obj.columns.length; i++) { + if (obj.columns[i].id == col.id) col_pos = function(a){return a;}(i); + } + obj.on_all_fleshed = + function() { + try { + var rows = []; + var treeitems = obj.treechildren.childNodes; + for (var i = 0; i < treeitems.length; i++) { + var treeitem = treeitems[i]; + var treerow = treeitem.firstChild; + var treecell = treerow.childNodes[ col_pos ]; + //alert('treeitem = ' + treeitem.nodeName + ' treeitem.childNodes.length = ' + treeitem.childNodes.length + ' treerow = ' + treerow.nodeName + ' treerow.childNodes.length = ' + treerow.childNodes.length + ' col_pos = ' + col_pos + ' treecell = ' + treecell); + value = ( { 'value' : treecell ? treecell.getAttribute('label') : '', 'node' : treeitem } ); + //alert('value = ' + value.value + ' node = ' + value.node); + rows.push( value ); + } + rows = rows.sort( function(a,b) { a = a.value; b = b.value; if (a < b) return -1; if (a > b) return 1; return 0; } ); + if (sortDir == 'asc') rows = rows.reverse(); + while(obj.treechildren.lastChild) obj.treechildren.removeChild( obj.treechildren.lastChild ); + for (var i = 0; i < rows.length; i++) { + obj.treechildren.appendChild( rows[i].node ); + } + } catch(E) { + obj.error.standard_unexpected_error_alert('sorting',E); + } + setTimeout(function(){ obj.on_all_fleshed = null; },0); + } + obj.full_retrieve(); + } catch(E) { + obj.error.standard_unexpected_error_alert('pre sorting', E); + } + }, + } dump('exiting util.list.js\n');