refresh-row-in-place ability and updates for the two files that were affected by...
authorphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 15 Jun 2007 10:15:21 +0000 (10:15 +0000)
committerphasefx <phasefx@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 15 Jun 2007 10:15:21 +0000 (10:15 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_0@7432 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/chrome/content/util/list.js
Open-ILS/xul/staff_client/server/cat/copy_browser.js
Open-ILS/xul/staff_client/server/patron/bills.js

index acc40f9..4271a41 100644 (file)
@@ -297,13 +297,13 @@ util.list.prototype = {
                var rnode;
                var obj = this;
                switch (this.node.nodeName) {
-                       case 'tree' : rnode = this._append_to_tree(params); break;
-                       case 'listbox' : rnode = this._append_to_listbox(params); break;
+                       case 'tree' : rparams = this._append_to_tree(params); break;
+                       case 'listbox' : rparams = this._append_to_listbox(params); break;
                        default: throw('NYI: Need .append() for ' + this.node.nodeName); break;
                }
-               if (rnode && params.attributes) {
+               if (rparams && params.attributes) {
                        for (var i in params.attributes) {
-                               rnode.setAttribute(i,params.attributes[i]);
+                               rparams.my_node.setAttribute(i,params.attributes[i]);
                        }
                }
                this.row_count.total++;
@@ -312,8 +312,24 @@ util.list.prototype = {
                                setTimeout( function() { obj.on_all_fleshed(); }, 0 );
                        }
                }
-               return rnode;
+               return rparams;
        },
+       
+       'refresh_row' : function (params) {
+               var rnode;
+               var obj = this;
+               switch (this.node.nodeName) {
+                       case 'tree' : rparams = this._refresh_row_in_tree(params); break;
+                       default: throw('NYI: Need .refresh_row() for ' + this.node.nodeName); break;
+               }
+               if (rparams && params.attributes) {
+                       for (var i in params.attributes) {
+                               rparams.my_node.setAttribute(i,params.attributes[i]);
+                       }
+               }
+               return rparams;
+       },
+
 
        '_append_to_tree' : function (params) {
 
@@ -474,7 +490,157 @@ util.list.prototype = {
 
                                if (obj.trim_list && obj.row_count.total >= obj.trim_list) {
                                        // Remove oldest row
-                                       //if (typeof params.to_bottom != 'undefined') {
+                                       //if (typeof params.to_bottom != 'undefined') 
+                                       if (typeof params.to_top == 'undefined') {
+                                               treechildren_node.removeChild( treechildren_node.firstChild );
+                                       } else {
+                                               treechildren_node.removeChild( treechildren_node.lastChild );
+                                       }
+                               }
+                       } catch(E) {
+                       }
+
+               setTimeout( function() { obj.auto_retrieve(); }, 0 );
+
+               params.my_node = treeitem;
+               return params;
+       },
+
+       '_refresh_row_in_tree' : function (params) {
+
+               var obj = this;
+
+               if (typeof params.row == 'undefined') throw('util.list.refresh_row: Object must contain a row');
+               if (typeof params.my_node == 'undefined') throw('util.list.refresh_row: Object must contain a my_node');
+               if (params.my_node.nodeName != 'treeitem') throw('util.list.refresh_rwo: my_node must be a treeitem');
+
+               var s = ('util.list.refresh_row: params = ' + (params) + '\n');
+
+               var treeitem = params.my_node;
+               treeitem.setAttribute('retrieve_id',params.retrieve_id);
+               if (typeof params.to_bottom != 'undefined') {
+                       if (typeof params.no_auto_select == 'undefined') {
+                               if (!obj.auto_select_pending) {
+                                       obj.auto_select_pending = true;
+                                       setTimeout(function() {
+                                               dump('auto-selecting\n');
+                                               var idx = Number(obj.node.view.rowCount)-1;
+                                               try { obj.node.view.selection.select(idx); } catch(E) { obj.error.sdump('D_ALERT','tree auto select: ' + E + '\n'); }
+                                               try { if (typeof params.on_select == 'function') params.on_select(); } catch(E) { obj.error.sdump('D_ALERT','tree auto select, on_select: ' + E + '\n'); }
+                                               obj.auto_select_pending = false;
+                                               try { util.widgets.dispatch('flesh',obj.node.contentView.getItemAtIndex(idx).firstChild); } catch(E) { obj.error.sdump('D_ALERT','tree auto select, flesh: ' + E + '\n'); }
+                                       }, 1000);
+                               }
+                       }
+               }
+               var delete_me = [];
+               for (var i in treeitem.childNodes) if (treeitem.childNodes[i].nodeName == 'treerow') delete_me.push(treeitem.childNodes[i]);
+               for (var i = 0; i < delete_me.length; i++) treeitem.removeChild(delete_me[i]);
+               var treerow = document.createElement('treerow');
+               treeitem.appendChild( treerow );
+               treerow.setAttribute('retrieve_id',params.retrieve_id);
+
+               s += ('tree = ' + this.node + '\n');
+               s += ('treeitem = ' + treeitem + '  treerow = ' + treerow + '\n');
+
+               if (typeof params.retrieve_row == 'function' || typeof this.retrieve_row == 'function') {
+
+                       obj.put_retrieving_label(treerow);
+                       treerow.addEventListener(
+                               'flesh',
+                               function() {
+
+                                       if (treerow.getAttribute('retrieved') == 'true') return; /* already running */
+
+                                       treerow.setAttribute('retrieved','true');
+
+                                       //dump('fleshing = ' + params.retrieve_id + '\n');
+
+                                       function inc_fleshed() {
+                                               if (treerow.getAttribute('fleshed') == 'true') return; /* already fleshed */
+                                               treerow.setAttribute('fleshed','true');
+                                               obj.row_count.fleshed++;
+                                               if (obj.row_count.fleshed == obj.row_count.total) {
+                                                       if (typeof obj.on_all_fleshed == 'function') {
+                                                               setTimeout( function() { obj.on_all_fleshed(); }, 0 );
+                                                       }
+                                               }
+                                       }
+
+                                       params.row_node = treeitem;
+                                       params.on_retrieve = function(p) {
+                                               try {
+                                                       p.row = params.row;
+                                                       obj._map_row_to_treecell(p,treerow);
+                                                       inc_fleshed();
+                                                       var idx = obj.node.contentView.getIndexOfItem( params.row_node );
+                                                       dump('idx = ' + idx + '\n');
+                                                       // if current row is selected, send another select event to re-sync data that the client code fetches on selects
+                                                       if ( obj.node.view.selection.isSelected( idx ) ) {
+                                                               dump('dispatching select event for on_retrieve for idx = ' + idx + '\n');
+                                                               util.widgets.dispatch('select',params.row_node);
+                                                       }
+                                               } catch(E) {
+                                                       alert('fixme2: ' + E);
+                                               }
+                                       }
+
+                                       if (typeof params.retrieve_row == 'function') {
+
+                                               params.retrieve_row( params );
+
+                                       } else if (typeof obj.retrieve_row == 'function') {
+
+                                                       obj.retrieve_row( params );
+
+                                       } else {
+                                       
+                                                       inc_fleshed();
+                                       }
+                               },
+                               false
+                       );
+                       /*
+                       setTimeout(
+                               function() {
+                                       util.widgets.dispatch('flesh',treerow);
+                               }, 0
+                       );
+                       */
+               } else {
+                       obj.put_retrieving_label(treerow);
+                       treerow.addEventListener(
+                               'flesh',
+                               function() {
+                                       //dump('fleshing anon\n');
+                                       if (treerow.getAttribute('fleshed') == 'true') return; /* already fleshed */
+                                       obj._map_row_to_treecell(params,treerow);
+                                       treerow.setAttribute('retrieved','true');
+                                       treerow.setAttribute('fleshed','true');
+                                       obj.row_count.fleshed++;
+                                       if (obj.row_count.fleshed == obj.row_count.total) {
+                                               if (typeof obj.on_all_fleshed == 'function') {
+                                                       setTimeout( function() { obj.on_all_fleshed(); }, 0 );
+                                               }
+                                       }
+                               },
+                               false
+                       );
+                       /*
+                       setTimeout(
+                               function() {
+                                       util.widgets.dispatch('flesh',treerow);
+                               }, 0
+                       );
+                       */
+               }
+               this.error.sdump('D_LIST',s);
+
+                       try {
+
+                               if (obj.trim_list && obj.row_count.total >= obj.trim_list) {
+                                       // Remove oldest row
+                                       //if (typeof params.to_bottom != 'undefined') 
                                        if (typeof params.to_top == 'undefined') {
                                                treechildren_node.removeChild( treechildren_node.firstChild );
                                        } else {
@@ -486,7 +652,7 @@ util.list.prototype = {
 
                setTimeout( function() { obj.auto_retrieve(); }, 0 );
 
-               return treeitem;
+               return params;
        },
 
        'put_retrieving_label' : function(treerow) {
@@ -667,7 +833,8 @@ util.list.prototype = {
                }
 
                this.error.sdump('D_LIST',s);
-               return listitem;
+               params.my_node = listitem;
+               return params;
 
        },
 
index 8c31a51..49dbda6 100644 (file)
@@ -1244,7 +1244,8 @@ cat.copy_browser.prototype = {
                        if (parent_org) {
                                data.node = obj.map_tree[ 'aou_' + parent_org.id() ];
                        }
-                       var node = obj.list.append(data);
+                       var nparams = obj.list.append(data);
+                       var node = nparams.my_node;
                        if (params) {
                                for (var i in params) {
                                        node.setAttribute(i,params[i]);
@@ -1311,7 +1312,8 @@ cat.copy_browser.prototype = {
                                'to_bottom' : true,
                                'no_auto_select' : true,
                        };
-                       var node = obj.list.append(data);
+                       var nparams = obj.list.append(data);
+                       var node = nparams.my_node;
                        obj.map_tree[ 'acn_' + acn_tree.id() ] =  node;
                        if (params) {
                                for (var i in params) {
@@ -1362,7 +1364,8 @@ cat.copy_browser.prototype = {
                                'to_bottom' : true,
                                'no_auto_select' : true,
                        };
-                       var node = obj.list.append(data);
+                       var nparams = obj.list.append(data);
+                       var node = nparams.my_node;
                        obj.map_tree[ 'acp_' + acp_item.id() ] =  node;
                        if (params) {
                                for (var i in params) {
index ded6603..062527a 100644 (file)
@@ -84,7 +84,7 @@ patron.bills.prototype = {
                                obj.current_payments = []; obj.list.clear();
                                //FIXME//.bills virtual field
                                for (var i = 0; i < obj.bills.length; i++) {
-                                       var rnode = obj.list.append( 
+                                       var rparams = obj.list.append( 
                                                { 'row' : 
                                                        { 'my' : 
                                                                { 'mobts' : obj.bills[i].transaction, 'circ' : obj.bills[i].circ, 'mvr' : obj.bills[i].record } 
@@ -92,6 +92,7 @@ patron.bills.prototype = {
                                                        'attributes' : { 'allowevents' : true } 
                                                } 
                                        );
+                                       var rnode = rparams.my_node;
                                        obj.bill_map[ obj.bills[i].transaction.id() ] = obj.bills[i];
                                        var cb = rnode.getElementsByTagName('checkbox')[0];
                                        var tb = rnode.getElementsByTagName('textbox')[0];