option for using one eval per row for lists
authorpines <pines@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 30 Sep 2006 09:21:57 +0000 (09:21 +0000)
committerpines <pines@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sat, 30 Sep 2006 09:21:57 +0000 (09:21 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6289 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/xul/staff_client/chrome/content/util/list.js
Open-ILS/xul/staff_client/server/patron/search_result.js
Open-ILS/xul/staff_client/server/patron/util.js

index ef69cae..894eae9 100644 (file)
@@ -30,6 +30,7 @@ util.list.prototype = {
                JSAN.use('util.widgets');
 
                if (typeof params.map_row_to_column == 'function') obj.map_row_to_column = params.map_row_to_column;
+               if (typeof params.map_row_to_columns == 'function') obj.map_row_to_columns = params.map_row_to_columns;
                if (typeof params.retrieve_row == 'function') obj.retrieve_row = params.retrieve_row;
 
                obj.prebuilt = false;
@@ -640,40 +641,61 @@ util.list.prototype = {
                var obj = this;
                var s = '';
                util.widgets.remove_children(treerow);
-               for (var i = 0; i < this.columns.length; i++) {
-                       var treecell = document.createElement('treecell');
-                       var label = '';
-                       if (params.skip_columns && (params.skip_columns.indexOf(i) != -1)) {
-                               treecell.setAttribute('label',label);
-                               treerow.appendChild( treecell );
-                               s += ('treecell = ' + treecell + ' with label = ' + label + '\n');
-                               continue;
-                       }
-                       if (params.skip_all_columns_except && (params.skip_all_columns_except.indexOf(i) == -1)) {
+
+               if (typeof params.map_row_to_column == 'function' || typeof this.map_row_to_column == 'function') {
+
+                       for (var i = 0; i < this.columns.length; i++) {
+                               var treecell = document.createElement('treecell');
+                               var label = '';
+                               if (params.skip_columns && (params.skip_columns.indexOf(i) != -1)) {
+                                       treecell.setAttribute('label',label);
+                                       treerow.appendChild( treecell );
+                                       s += ('treecell = ' + treecell + ' with label = ' + label + '\n');
+                                       continue;
+                               }
+                               if (params.skip_all_columns_except && (params.skip_all_columns_except.indexOf(i) == -1)) {
+                                       treecell.setAttribute('label',label);
+                                       treerow.appendChild( treecell );
+                                       s += ('treecell = ' + treecell + ' with label = ' + label + '\n');
+                                       continue;
+                               }
+       
+                               if (typeof params.map_row_to_column == 'function')  {
+       
+                                       label = params.map_row_to_column(params.row,this.columns[i]);
+       
+                               } else if (typeof this.map_row_to_column == 'function') {
+       
+                                       label = this.map_row_to_column(params.row,this.columns[i]);
+       
+                               }
                                treecell.setAttribute('label',label);
                                treerow.appendChild( treecell );
                                s += ('treecell = ' + treecell + ' with label = ' + label + '\n');
-                               continue;
                        }
-                       if (typeof params.map_row_to_column == 'function')  {
+               } else if (typeof params.map_row_to_columns == 'function' || typeof this.map_row_to_columns == 'function') {
 
-                               label = params.map_row_to_column(params.row,this.columns[i]);
+                       var labels = [];
 
-                       } else {
+                       if (typeof params.map_row_to_columns == 'function') {
 
-                               if (typeof this.map_row_to_column == 'function') {
+                               labels = params.map_row_to_columns(params.row,this.columns);
 
-                                       label = this.map_row_to_column(params.row,this.columns[i]);
-
-                               } else {
+                       } else if (typeof this.map_row_to_columns == 'function') {
 
-                                       throw('No map_row_to_column function');
+                               labels = this.map_row_to_columns(params.row,this.columns);
 
-                               }
                        }
-                       treecell.setAttribute('label',label);
-                       treerow.appendChild( treecell );
-                       s += ('treecell = ' + treecell + ' with label = ' + label + '\n');
+                       for (var i = 0; i < labels.length; i++) {
+                               var treecell = document.createElement('treecell');
+                               treecell.setAttribute('label',labels[i]);
+                               treerow.appendChild( treecell );
+                               s += ('treecell = ' + treecell + ' with label = ' + labels[i] + '\n');
+                       }
+
+               } else {
+
+                       throw('No row to column mapping function.');
                }
                this.error.sdump('D_LIST',s);
        },
index bf78f52..ed18d86 100644 (file)
@@ -43,7 +43,7 @@ patron.search_result.prototype = {
                obj.list.init(
                        {
                                'columns' : columns,
-                               'map_row_to_column' : patron.util.std_map_row_to_column(),
+                               'map_row_to_columns' : patron.util.std_map_row_to_columns(),
                                'retrieve_row' : function(params) {
                                        var id = params.retrieve_id;
                                        var au_obj = patron.util.retrieve_au_via_id( ses(), id,
index 8b9ba91..b73e1da 100644 (file)
@@ -4,7 +4,8 @@ if (typeof patron == 'undefined') var patron = {};
 patron.util = {};
 
 patron.util.EXPORT_OK  = [ 
-       'columns', 'mbts_columns', 'mb_columns', 'mp_columns', 'std_map_row_to_column', 'retrieve_au_via_id', 'retrieve_fleshed_au_via_id', 'retrieve_fleshed_au_via_barcode', 'set_penalty_css', 'retrieve_name_via_id'
+       'columns', 'mbts_columns', 'mb_columns', 'mp_columns', 'std_map_row_to_column', 'std_map_row_to_columns',
+       'retrieve_au_via_id', 'retrieve_fleshed_au_via_id', 'retrieve_fleshed_au_via_barcode', 'set_penalty_css', 'retrieve_name_via_id'
 ];
 patron.util.EXPORT_TAGS        = { ':all' : patron.util.EXPORT_OK };
 
@@ -265,121 +266,121 @@ patron.util.columns = function(modify,params) {
        var c = [
                {
                        'persist' : 'hidden width ordinal', 'id' : 'barcode', 'label' : 'Barcode', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.card().barcode()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.card().barcode(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'usrname', 'label' : 'Login Name', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.usrname()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.usrname(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'profile', 'label' : 'Group', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.pgt[ my.au.profile() ].name()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = obj.OpenILS.data.hash.pgt[ my.au.profile() ].name(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'active', 'label' : getString('staff.au_label_active'), 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.active() ) ? "Yes" : "No"'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = get_bool( my.au.active() ) ? "Yes" : "No"; v;'
                },
                {
                        'persist' : 'hidden width ordinal', 'id' : 'barred', 'label' : 'Barred', 'flex' : 1,
-                       'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.barred() ) ? "Yes" : "No"'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = get_bool( my.au.barred() ) ? "Yes" : "No"; v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : getString('staff.au_label_id'), 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.id()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.id(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'prefix', 'label' : getString('staff.au_label_prefix'), 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.prefix()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.prefix(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'family_name', 'label' : getString('staff.au_label_family_name'), 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.family_name()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.family_name(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'first_given_name', 'label' : getString('staff.au_label_first_given_name'), 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.first_given_name()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.first_given_name(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'second_given_name', 'label' : getString('staff.au_label_second_given_name'), 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.second_given_name()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.second_given_name(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'suffix', 'label' : getString('staff.au_label_suffix'), 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.suffix()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.suffix(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'alert_message', 'label' : 'Alert', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.alert_message()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.alert_message(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'claims_returned_count', 'label' : 'Returns Claimed', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.claims_returned_count()',
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.claims_returned_count(); v;',
                        'sort_type' : 'number',
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'create_date', 'label' : 'Created On', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.create_date()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.create_date(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'expire_date', 'label' : 'Expires On', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.expire_date().substr(0,10)'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.expire_date().substr(0,10); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'home_ou', 'label' : 'Home Lib', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.aou[ my.au.home_ou() ].shortname()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = obj.OpenILS.data.hash.aou[ my.au.home_ou() ].shortname(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'credit_forward_balance', 'label' : 'Credit', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.credit_forward_balance()',
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.credit_forward_balance(); v;',
                        'sort_type' : 'money',
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'day_phone', 'label' : 'Day Phone', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.day_phone()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.day_phone(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'evening_phone', 'label' : 'Evening Phone', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.evening_phone()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.evening_phone(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'other_phone', 'label' : 'Other Phone', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.other_phone()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.other_phone(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'email', 'label' : 'Email', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.email()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.email(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'dob', 'label' : 'Birth Date', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.dob().substr(0,10)'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.dob().substr(0,10); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'ident_type', 'label' : 'Ident Type', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.cit[ my.au.ident_type() ].name()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = obj.OpenILS.data.hash.cit[ my.au.ident_type() ].name(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'ident_value', 'label' : 'Ident Value', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.ident_value()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.ident_value(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'ident_type2', 'label' : 'Ident Type 2', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.cit[ my.au.ident_type2() ].name()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = obj.OpenILS.data.hash.cit[ my.au.ident_type2() ].name(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'ident_value2', 'label' : 'Ident Value 2', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.ident_value2()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.ident_value2(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'net_access_level', 'label' : 'Net Access', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.net_access_level()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.net_access_level(); v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'master_account', 'label' : 'Group Lead', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.master_account() ) ? "Yes" : "No"'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = get_bool( my.au.master_account() ) ? "Yes" : "No"; v;'
                },
                { 
                        'persist' : 'hidden width ordinal', 'id' : 'usrgroup', 'label' : 'Group ID', 'flex' : 1, 
-                       'primary' : false, 'hidden' : true, 'render' : 'my.au.usrgroup()'
+                       'primary' : false, 'hidden' : true, 'render' : 'v = my.au.usrgroup(); v;'
                },
        ];
        for (var i = 0; i < c.length; i++) {
@@ -435,6 +436,32 @@ patron.util.std_map_row_to_column = function(error_value) {
        }
 }
 
+patron.util.std_map_row_to_columns = function(error_value) {
+       return function(row,cols) {
+               // row contains { 'my' : { 'au' : {} } }
+               // cols contains all of the objects listed above in columns
+               
+               var obj = {}; obj.OpenILS = {}; 
+               JSAN.use('util.error'); obj.error = new util.error();
+               JSAN.use('OpenILS.data'); obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
+               JSAN.use('util.date'); JSAN.use('util.money');
+
+               var my = row.my;
+               var values = [];
+               var cmd = '';
+               try { 
+                       for (var i = 0; i < cols.length; i++) {
+                               cmd += cols[i].render + '; values['+i+'] = v; ';
+                       }
+                       eval( cmd );
+               } catch(E) {
+                       obj.error.sdump('D_WARN','map_row_to_column: ' + E);
+                       if (error_value) { value = error_value; } else { value = '   ' };
+               }
+               return values;
+       }
+}
+
 patron.util.retrieve_au_via_id = function(session, id, f) {
        JSAN.use('util.network');
        var network = new util.network();