0a9d011d2231efe82a513383b8591e4974f819ef
[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 function debug() {
154         var s = '';
155         for (var i = 0; i < arguments.length; i++) {
156                 s = s + arguments[i];
157         }
158         //sdump('D_UTIL','debug:' + s + '\n');
159         dump('debug:' + s + '\n');
160 }
161
162 function counter_init(id) {
163         counter[id] = 0;
164 }
165
166 function counter_incr(id) {
167         if (! counter[id]) { counter_init(id); }
168         return ++counter[id];
169 }
170
171 function counter_peek(id) {
172         if (! counter[id]) { return 0; }
173         return counter[id];
174 }
175
176 function dump_ns_node( node ) {
177         return (
178         'id=<' + 
179         node[fieldmap["Fieldmapper::biblio::record_node"].fields.id.position] 
180         + '>  intra-id=<' + 
181         node[fieldmap["Fieldmapper::biblio::record_node"].fields.intra_doc_id.position]
182         + '>  name=<' + 
183         node[fieldmap["Fieldmapper::biblio::record_node"].fields.name.position]
184         + '>  node_type=<' + 
185         node[fieldmap["Fieldmapper::biblio::record_node"].fields.type.position]
186         + '>  parent_node=<' + 
187         node[fieldmap["Fieldmapper::biblio::record_node"].fields.parent_node.position]
188         + '>  '
189         );
190 }
191
192 function nodeset2tree(ns) {
193         for (var i in ns) {
194                 if (ns[i].parent_node) {
195                         ns_addChild( 
196                                 ns, 
197                                 ns[i].parent_node, 
198                                 ns[i].intra_doc_id 
199                         );
200                 }
201         }
202         return ns;
203 }
204
205 function ns_addChild(ns,p,c) {
206         if (! ns[p].children ) { ns[p].children = []; }
207         ns[p].children.push(ns[c]);
208 }
209
210 function print_tabs(t) {
211         var r = '';
212         for (var j = 0; j < t; j++ ) { r = r + "\t"; }
213         return r;
214 }
215
216 function pretty_print(s) {
217         var r = ''; var t = 0;
218         for (var i in s) {
219                 if (s[i] == '{') {
220                         r = r + "\n" + print_tabs(t) + s[i]; t++;
221                         r = r + "\n" + print_tabs(t);
222                 } else if (s[i] == '[') {
223                         r = r + "\n" + print_tabs(t) + s[i]; t++;
224                         r = r + "\n" + print_tabs(t);
225                 } else if (s[i] == '}') {
226                         t--; r = r + "\n" + print_tabs(t) + s[i]; 
227                         r = r + "\n" + print_tabs(t);
228                 } else if (s[i] == ']') { 
229                         t--; r = r + "\n" + print_tabs(t) + s[i];
230                         r = r + "\n" + print_tabs(t);
231                 } else if (s[i] == ',') {
232                         r = r + s[i]; 
233                         r = r + "\n" + print_tabs(t);
234                 } else {
235                         r = r + s[i];
236                 }
237         }
238         return r;
239 }
240
241 function super_dump(o,t) {
242         var s = "\n";
243         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
244         s = s + "=-=-=\n";
245         s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
246         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
247         s = s + "typeof = " + typeof(o) + "\n";
248         try {
249                 var string = new XMLSerializer().serializeToString(o);
250                 return( string + "\n" );
251         } catch( E ) {
252                 var i;
253                 var c = 0;
254                 for (i in o) {
255                         switch(typeof(i)) {
256                                 case 'object':
257                                         s = s + super_dump(i,t+1);
258                                         break;
259                                 default :
260                                         var value = o[i];
261                                         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
262                                         s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
263                                         if (typeof(value) == 'object') {
264                                                 value = super_dump(value,t+1);
265                                         }
266                                         s = s + "\ttoString:" + i.toString() + "\tvalue:" + value + "\n";
267                                         break;
268                         }
269                 }
270                 return( s + "\n" );
271         }
272 }
273
274 function super_dump_norecurse(o,t) {
275         var s = "\n";
276         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
277         s = s + "=-=-=\n";
278         s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
279         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
280         s = s + "typeof = " + typeof(o) + "\n";
281         try {
282                 var string = new XMLSerializer().serializeToString(o);
283                 return( string + "\n" );
284         } catch( E ) {
285                 var i;
286                 var c = 0;
287                 for (i in o) {
288                         switch(typeof(i)) {
289                                 default :
290                                         var value = o[i];
291                                         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
292                                         s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
293                                         s = s + "\ttoString:" + i.toString() + "\n";
294                                         break;
295                         }
296                 }
297                 return( s + "\n" );
298         }
299 }
300
301