]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/functional.js
menu for circulate as type
[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',
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 in list) {
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 in list) {
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) {
93         var my_hash = new Object();
94         if (list) {
95                 for (var i = 0; i < list.length; i++) {
96                         if (typeof list[i].id == 'function') {
97                                 my_hash[ list[i].id() ] = list[i];
98                         } else if (typeof list[i].code == 'function') {
99                                 my_hash[ list[i].code() ] = list[i];
100                         }
101                 }
102         }
103         return my_hash;
104 }
105
106 util.functional.find_id_object_in_list = function(list,id) {
107         if (list) {
108                 for (var i = 0; i < list.length; i++ ) {
109                         try {
110                                 if ( list[i].id() == id ) {
111                                         return list[i];
112                                 }
113                         } catch(E) {
114                                 throw(E);
115                         }
116                 }
117         }
118         return null;
119 }
120
121 util.functional.find_attr_object_in_list = function(list,attr,value) {
122         if (list) {
123                 for (var i = 0; i < list.length; i++ ) {
124                         try {
125                                 var command = 'list[' + i + '].'+attr+'() == ' + value;
126                                 if ( eval(command) ) {
127                                         return list[i];
128                                 }
129                         } catch(E) {
130                                 throw(E);
131                         }
132                 }
133         }
134         return null;
135 }
136
137 dump('exiting util/functional.js\n');