]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/functional.js
LP1615805 No inputs after submit in patron search (AngularJS)
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / functional.js
1 dump('entering util/functional.js\n');
2
3 if (typeof util == 'undefined') var util = {};
4 util.functional = {};
5
6 util.functional.EXPORT_OK    = [ 
7     'filter_list', 'filter_object', 'find_list', 'find_object', 'map_list', 'map_flat_list', 
8     'map_object', 'map_object_to_list', 'convert_object_list_to_hash', 'find_id_object_in_list', 
9     'find_attr_object_in_list', 'walk_tree_preorder', 'unique_list_values',
10 ];
11 util.functional.EXPORT_TAGS    = { ':all' : util.functional.EXPORT_OK };
12
13 util.functional.filter_list = function(list,f) {
14     var new_list = [];
15     for (var i = 0; i < list.length; i++) {
16         var t = f( list[i] );
17         if (t) new_list.push( list[i] );
18     }
19     return new_list;
20 }
21
22 util.functional.filter_object = function(obj,f) {
23     var new_obj = {};
24     for (var i in obj) {
25         var t = f( i, obj[i] );
26         if (t) new_obj[i] = obj[i];
27     }
28     return new_obj;
29 }
30
31 util.functional.find_list = function(list,f) {
32     for (var i = 0; i < list.length; i++) {
33         var t = f( list[i] );
34         if (t) return list[i];
35     }
36     return null;
37 }
38
39 util.functional.find_object = function(obj,f) {
40     for (var i in obj) {
41         var t = f( i, obj[i] );
42         if (t) return obj[i];
43     }
44     return null;
45 }
46
47 util.functional.walk_tree_preorder = function(node,children_func,f,parent_node) {
48     f(node,parent_node);
49     var children = children_func( node );
50     if (children) for (var i = 0; i < children.length; i++) {
51         util.functional.walk_tree_preorder(
52             children[i],
53             children_func,
54             f,
55             node
56         );    
57     }
58 }
59
60 util.functional.map_list = function(list,f) {
61     var new_list = []; var idx = 0;
62     for (var i in list) {
63         new_list.push( f( list[i], idx++ ) );
64     }
65     return new_list;
66 }
67
68 util.functional.map_flat_list = function(list,f) {
69     var new_list = [];
70     for (var i in list) {
71         new_list = new_list.concat( f( list[i] ) );
72     }
73     return new_list;
74 }
75
76 util.functional.map_object = function(obj,f) {
77     var new_obj = {};
78     for (var i in obj) {
79         new_obj[ f( i, obj[i] )[0] ] = f( i, obj[i] )[1];
80     }
81     return new_obj;
82 }
83
84 util.functional.map_object_to_list = function(obj,f) {
85     var new_list = [];
86     for (var i in obj) {
87         new_list.push( f( obj, i ) );
88     }
89     return new_list;
90 }
91
92 util.functional.convert_object_list_to_hash = function(list,key_field) {
93     var my_hash = new Object();
94     if (list) {
95         for (var i = 0; i < list.length; i++) {
96             if (key_field && typeof list[i][key_field] != 'undefined') {
97                 if (typeof list[i][key_field] == 'function') {
98                     my_hash[ list[i][key_field]() ] = list[i];
99                 } else {
100                     my_hash[ list[i][key_field] ] = list[i];
101                 }
102             } else if (typeof list[i].id == 'function') {
103                 my_hash[ list[i].id() ] = list[i];
104             } else if (typeof list[i].code == 'function') {
105                 my_hash[ list[i].code() ] = list[i];
106             }
107         }
108     }
109     return my_hash;
110 }
111
112 util.functional.find_id_object_in_list = function(list,id) {
113     if (list) {
114         for (var i = 0; i < list.length; i++ ) {
115             try {
116                 if ( list[i].id() == id ) {
117                     return list[i];
118                 }
119             } catch(E) {
120                 throw(E);
121             }
122         }
123     }
124     return null;
125 }
126
127 util.functional.find_attr_object_in_list = function(list,attr,value) {
128     if (list) {
129         for (var i = 0; i < list.length; i++ ) {
130             try {
131                 var command = 'list[' + i + '].'+attr+'() == ' + value;
132                 if ( eval(command) ) {
133                     return list[i];
134                 }
135             } catch(E) {
136                 throw(E);
137             }
138         }
139     }
140     return null;
141 }
142
143 util.functional.unique_list_values = function(list) {
144     var obj = {};
145     var finished_list = [];
146     for (var i in list) { obj[list[i]] = true; }
147     for (var i in obj) { finished_list.push(i); }
148     return finished_list;
149 }
150
151 dump('exiting util/functional.js\n');