1 dump('entering util/functional.js\n');
3 if (typeof util == 'undefined') var util = {};
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',
11 util.functional.EXPORT_TAGS = { ':all' : util.functional.EXPORT_OK };
13 util.functional.filter_list = function(list,f) {
15 for (var i = 0; i < list.length; i++) {
17 if (t) new_list.push( list[i] );
22 util.functional.filter_object = function(obj,f) {
25 var t = f( i, obj[i] );
26 if (t) new_obj[i] = obj[i];
31 util.functional.find_list = function(list,f) {
32 for (var i = 0; i < list.length; i++) {
34 if (t) return list[i];
39 util.functional.find_object = function(obj,f) {
41 var t = f( i, obj[i] );
47 util.functional.walk_tree_preorder = function(node,children_func,f,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(
60 util.functional.map_list = function(list,f) {
61 var new_list = []; var idx = 0;
63 new_list.push( f( list[i], idx++ ) );
68 util.functional.map_flat_list = function(list,f) {
71 new_list = new_list.concat( f( list[i] ) );
76 util.functional.map_object = function(obj,f) {
79 new_obj[ f( i, obj[i] )[0] ] = f( i, obj[i] )[1];
84 util.functional.map_object_to_list = function(obj,f) {
87 new_list.push( f( obj, i ) );
92 util.functional.convert_object_list_to_hash = function(list,key_field) {
93 var my_hash = new Object();
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];
100 my_hash[ list[i][key_field] ] = list[i];
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];
112 util.functional.find_id_object_in_list = function(list,id) {
114 for (var i = 0; i < list.length; i++ ) {
116 if ( list[i].id() == id ) {
127 util.functional.find_attr_object_in_list = function(list,attr,value) {
129 for (var i = 0; i < list.length; i++ ) {
131 var command = 'list[' + i + '].'+attr+'() == ' + value;
132 if ( eval(command) ) {
143 util.functional.unique_list_values = function(list) {
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;
151 dump('exiting util/functional.js\n');