moving over some more utils. Let me know if something makes more sense to do as...
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / evergreen / 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' 
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.map_list = function(list,f) {
48         var new_list = [];
49         for (var i in list) {
50                 new_list.push( f( list[i] ) );
51         }
52         return new_list;
53 }
54
55 util.functional.map_flat_list = function(list,f) {
56         var new_list = [];
57         for (var i in list) {
58                 new_list = new_list.concat( f( list[i] ) );
59         }
60         return new_list;
61 }
62
63 util.functional.map_object = function(obj,f) {
64         var new_obj = {};
65         for (var i in obj) {
66                 new_obj[ f( i, obj[i] )[0] ] = f( i, obj[i] )[1];
67         }
68         return new_obj;
69 }
70
71 util.functional.map_object_to_list = function(obj,f) {
72         var new_list = [];
73         for (var i in obj) {
74                 new_list.push( f( obj, i ) );
75         }
76         return new_list;
77 }
78
79 util.functional.convert_object_list_to_hash = function(list) {
80         var my_hash = new Object();
81         if (list) {
82                 for (var i = 0; i < list.length; i++) {
83                         my_hash[ list[i].id() ] = list[i];
84                 }
85         }
86         return my_hash;
87 }
88
89 util.functional.find_id_object_in_list = function(list,id) {
90         if (list) {
91                 for (var i = 0; i < list.length; i++ ) {
92                         try {
93                                 if ( list[i].id() == id ) {
94                                         return list[i];
95                                 }
96                         } catch(E) {
97                                 throw(E);
98                         }
99                 }
100         }
101         return null;
102 }
103
104 util.functional.find_attr_object_in_list = function(list,attr,value) {
105         if (list) {
106                 for (var i = 0; i < list.length; i++ ) {
107                         try {
108                                 var command = 'list[' + i + '].'+attr+'() == ' + value;
109                                 if ( eval(command) ) {
110                                         return list[i];
111                                 }
112                         } catch(E) {
113                                 throw(E);
114                         }
115                 }
116         }
117         return null;
118 }
119
120 dump('exiting util/functional.js\n');