a95f10518fe385064ecd3505e495932bb5f3e3a6
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / util / util.js
1 sdump('D_TRACE','Loading util.js\n');
2
3 var counter = {};
4 var consider_Timeout_default = false;
5
6 function a_get( obj, i ) { return obj[i]; } // for use in closures inside loops
7
8 function consider_Timeout( f, t, b) {
9         sdump('D_TIMEOUT', arg_dump(arguments,{0:true,1:true,2:true}));
10         if (b) {
11                 setTimeout(f,t);
12         } else {
13                 if (consider_Timeout_default)
14                         setTimeout(f,t);
15                 else
16                         f();
17         }
18 }
19
20 function parse_render_string( obj_string, render_string, regexp ) {
21         sdump('D_UTIL', arg_dump(arguments,{0:true,1:true}));
22         var cmd;
23         try {
24                 if (!regexp) regexp = /\$\$/g;
25                 if (render_string.slice(0,1) == '.') {
26                         cmd = obj_string + render_string;
27                 } else {
28                         cmd = render_string.replace( regexp, obj_string );
29                 }
30
31         } catch(E) {
32
33                 sdump('D_ERROR',E);
34         }
35         sdump('D_UTIL', 'cmd = ' + cmd + '\n');
36         return cmd;
37 }
38
39 function getString( key ) {
40         var s = '';
41         var bundles = mw.document.getElementById('string_bundles');
42         sdump('D_STRING','bundles = ' + bundles + ' bundles.childNodes.length = ' + bundles.childNodes.length + '\n');
43         for (var i = 0; i < bundles.childNodes.length; i++) {
44                 var bundle = bundles.childNodes[i];
45                 sdump('D_STRING','\ttrying bundle = ' + bundle + '\n');
46                 try {
47
48                         var string = bundle.getString( key );
49                         if (string) {
50                                 s = string;
51                                 sdump('D_STRING','\tfound\n');
52                         } else {
53                                 sdump('D_STRING','\tnot found\n');
54                         }
55
56                 } catch(E) {
57                         sdump('D_ERROR','string: ' + key + ' not found\n');
58                         s = key;
59                 }
60         }
61         sdump('D_STRING',key + '=' + s + '\n');
62         return s;
63 }
64
65 function getFormattedString( key, strArray ) {
66         var s = '';
67         var bundles = mw.document.getElementById('string_bundles');
68         for (var i = i; i < bundles.childNodes.length; i++) {
69                 var bundle = bundles[i];
70                 try {
71
72                         var string = bundle.getFormattedString( key, strArray );
73                         if (string)
74                                 s = string;
75
76                 } catch(E) {
77                         sdump('D_ERROR','string: ' + key + ' not found\n');
78                         s = key;
79                 }
80         }
81         sdump('D_STRING',key + '(' + strArray + ')=' + s + '\n');
82         return s;
83 }
84
85 function string_to_array(s) {
86         var my_array = [];
87         for (var i = 0; i < s.length; i++ ) {
88                 my_array.push( s.charAt(i) );
89         }
90         return my_array;
91 }
92
93 function yesno(value) {
94         switch(value) {
95                 case true: case 'true': case '1': case 'on':
96                         return 'Yes';
97                 default: 
98                         return 'No';
99         }
100 }
101
102 function dollars_float_to_cents_integer( money ) {
103         // careful to avoid fractions of pennies
104         var money_s = money.toString();
105         // FIXME: strip miscellaneous characters
106         var marray = money_s.split(".");
107         var dollars = marray[0];
108         var cents = marray[1];
109         try {
110                 if (cents.length < 2) {
111                         cents = cents + '0';
112                 }
113         } catch(E) {
114                 // I'm not sure why these are getting thrown, especially with the code still working
115                 sdump('D_ERROR',"cents.length? " + E + "\n");
116         }
117         try {
118                 if (cents.length > 2) {
119                         sdump('D_ERROR',"We don't round money\n");
120                         cents = cents.substr(0,2);
121                 }
122         } catch(E) {
123                 sdump('D_ERROR',"cents.length? " + E + "\n");
124         }
125         var total = 0;
126         try {
127                 if (parseInt(cents)) total += parseInt(cents);
128         } catch(E) {
129                 sdump('D_ERROR',"parseInt(cents)? " + E + "\n");
130         }
131         try {
132                 if (parseInt(dollars)) total += (parseInt(dollars) * 100);
133         } catch(E) {
134                 sdump('D_ERROR',"parseInt(dollars)? " + E + "\n");
135         }
136         return total;   
137 }
138
139 function cents_as_dollars( cents ) {
140         cents = cents.toString(); 
141         // FIXME: strip miscellaneous characters
142         try {
143                 switch( cents.length ) {
144                         case 0: cents = '000'; break;
145                         case 1: cents = '00' + cents; break;
146                 }
147         } catch(E) {
148                 sdump('D_ERROR',"cents_as_dollars: cents.length? " + E + "\n");
149         }
150         return cents.substr(0,cents.length-2) + '.' + cents.substr(cents.length - 2);
151 }
152
153 /*
154 function debug() {
155         var s = '';
156         for (var i = 0; i < arguments.length; i++) {
157                 s = s + arguments[i];
158         }
159         //sdump('D_UTIL','debug:' + s + '\n');
160 }
161 */
162
163 function counter_init(id) {
164         counter[id] = 0;
165 }
166
167 function counter_incr(id) {
168         if (! counter[id]) { counter_init(id); }
169         return ++counter[id];
170 }
171
172 function counter_peek(id) {
173         if (! counter[id]) { return 0; }
174         return counter[id];
175 }
176
177 function dump_ns_node( node ) {
178         return (
179         'id=<' + 
180         node[fieldmap["Fieldmapper::biblio::record_node"].fields.id.position] 
181         + '>  intra-id=<' + 
182         node[fieldmap["Fieldmapper::biblio::record_node"].fields.intra_doc_id.position]
183         + '>  name=<' + 
184         node[fieldmap["Fieldmapper::biblio::record_node"].fields.name.position]
185         + '>  node_type=<' + 
186         node[fieldmap["Fieldmapper::biblio::record_node"].fields.type.position]
187         + '>  parent_node=<' + 
188         node[fieldmap["Fieldmapper::biblio::record_node"].fields.parent_node.position]
189         + '>  '
190         );
191 }
192
193 function nodeset2tree(ns) {
194         for (var i in ns) {
195                 if (ns[i].parent_node) {
196                         ns_addChild( 
197                                 ns, 
198                                 ns[i].parent_node, 
199                                 ns[i].intra_doc_id 
200                         );
201                 }
202         }
203         return ns;
204 }
205
206 function ns_addChild(ns,p,c) {
207         if (! ns[p].children ) { ns[p].children = []; }
208         ns[p].children.push(ns[c]);
209 }
210
211 function print_tabs(t) {
212         var r = '';
213         for (var j = 0; j < t; j++ ) { r = r + "\t"; }
214         return r;
215 }
216
217 function pretty_print(s) {
218         var r = ''; var t = 0;
219         for (var i in s) {
220                 if (s[i] == '{') {
221                         r = r + "\n" + print_tabs(t) + s[i]; t++;
222                         r = r + "\n" + print_tabs(t);
223                 } else if (s[i] == '[') {
224                         r = r + "\n" + print_tabs(t) + s[i]; t++;
225                         r = r + "\n" + print_tabs(t);
226                 } else if (s[i] == '}') {
227                         t--; r = r + "\n" + print_tabs(t) + s[i]; 
228                         r = r + "\n" + print_tabs(t);
229                 } else if (s[i] == ']') { 
230                         t--; r = r + "\n" + print_tabs(t) + s[i];
231                         r = r + "\n" + print_tabs(t);
232                 } else if (s[i] == ',') {
233                         r = r + s[i]; 
234                         r = r + "\n" + print_tabs(t);
235                 } else {
236                         r = r + s[i];
237                 }
238         }
239         return r;
240 }
241
242 function super_dump(o,t) {
243         var s = "\n";
244         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
245         s = s + "=-=-=\n";
246         s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
247         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
248         s = s + "typeof = " + typeof(o) + "\n";
249         try {
250                 var string = new XMLSerializer().serializeToString(o);
251                 return( string + "\n" );
252         } catch( E ) {
253                 var i;
254                 var c = 0;
255                 for (i in o) {
256                         switch(typeof(i)) {
257                                 case 'object':
258                                         s = s + super_dump(i,t+1);
259                                         break;
260                                 default :
261                                         var value = o[i];
262                                         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
263                                         s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
264                                         if (typeof(value) == 'object') {
265                                                 value = super_dump(value,t+1);
266                                         }
267                                         s = s + "\ttoString:" + i.toString() + "\tvalue:" + value + "\n";
268                                         break;
269                         }
270                 }
271                 return( s + "\n" );
272         }
273 }
274
275 function super_dump_norecurse(o,t) {
276         var s = "\n";
277         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
278         s = s + "=-=-=\n";
279         s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
280         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
281         s = s + "typeof = " + typeof(o) + "\n";
282         try {
283                 var string = new XMLSerializer().serializeToString(o);
284                 return( string + "\n" );
285         } catch( E ) {
286                 var i;
287                 var c = 0;
288                 for (i in o) {
289                         switch(typeof(i)) {
290                                 default :
291                                         var value = o[i];
292                                         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
293                                         s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
294                                         s = s + "\ttoString:" + i.toString() + "\n";
295                                         break;
296                         }
297                 }
298                 return( s + "\n" );
299         }
300 }
301
302