]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/util/util.js
78eb9f002d0970d42d8d85cb1d278e89d0204b6c
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / util / util.js
1 sdump('D_TRACE','Loading util.js\n');
2
3 var timer = {};
4 var counter = {};
5 var consider_Timeout_default = false;
6
7 function a_get( obj, i ) { return obj[i]; } // for use in closures inside loops
8
9 function consider_Timeout( f, t, b) {
10         sdump('D_TIMEOUT', arg_dump(arguments,{0:true,1:true,2:true}));
11         if (b) {
12                 setTimeout(f,t);
13         } else {
14                 if (consider_Timeout_default)
15                         setTimeout(f,t);
16                 else
17                         f();
18         }
19 }
20
21 function parse_render_string( obj_string, render_string, regexp ) {
22         sdump('D_UTIL', arg_dump(arguments,{0:true,1:true}));
23         var cmd;
24         try {
25                 if (!regexp) regexp = /\$\$/g;
26                 if (render_string.slice(0,1) == '.') {
27                         cmd = obj_string + render_string;
28                 } else {
29                         cmd = render_string.replace( regexp, obj_string );
30                 }
31
32         } catch(E) {
33
34                 sdump('D_ERROR',E);
35         }
36         sdump('D_UTIL', 'cmd = ' + cmd + '\n');
37         return cmd;
38 }
39
40 function getString( key ) {
41         var s = '';
42         var bundles = mw.document.getElementById('string_bundles');
43         sdump('D_STRING','bundles = ' + bundles + ' bundles.childNodes.length = ' + bundles.childNodes.length + '\n');
44         for (var i = 0; i < bundles.childNodes.length; i++) {
45                 var bundle = bundles.childNodes[i];
46                 sdump('D_STRING','\ttrying bundle = ' + bundle + '\n');
47                 try {
48
49                         var string = bundle.getString( key );
50                         if (string) {
51                                 s = string;
52                                 sdump('D_STRING','\tfound\n');
53                         } else {
54                                 sdump('D_STRING','\tnot found\n');
55                         }
56
57                 } catch(E) {
58                         sdump('D_ERROR','string: ' + key + ' not found\n');
59                         s = key;
60                 }
61         }
62         sdump('D_STRING',key + '=' + s + '\n');
63         return s;
64 }
65
66 function getFormattedString( key, strArray ) {
67         var s = '';
68         var bundles = mw.document.getElementById('string_bundles');
69         for (var i = i; i < bundles.childNodes.length; i++) {
70                 var bundle = bundles[i];
71                 try {
72
73                         var string = bundle.getFormattedString( key, strArray );
74                         if (string)
75                                 s = string;
76
77                 } catch(E) {
78                         sdump('D_ERROR','string: ' + key + ' not found\n');
79                         s = key;
80                 }
81         }
82         sdump('D_STRING',key + '(' + strArray + ')=' + s + '\n');
83         return s;
84 }
85
86 function string_to_array(s) {
87         var my_array = [];
88         for (var i = 0; i < s.length; i++ ) {
89                 my_array.push( s.charAt(i) );
90         }
91         return my_array;
92 }
93
94 function yesno(value) {
95         switch(value) {
96                 case true: case 'true': case '1': case 'on':
97                         return 'Yes';
98                 default: 
99                         return 'No';
100         }
101 }
102
103 function dollars_float_to_cents_integer( money ) {
104         // careful to avoid fractions of pennies
105         var money_s = money.toString();
106         // FIXME: strip miscellaneous characters
107         var marray = money_s.split(".");
108         var dollars = marray[0];
109         var cents = marray[1];
110         try {
111                 if (cents.length < 2) {
112                         cents = cents + '0';
113                 }
114         } catch(E) {
115                 // I'm not sure why these are getting thrown, especially with the code still working
116                 sdump('D_ERROR',"cents.length? " + E + "\n");
117         }
118         try {
119                 if (cents.length > 2) {
120                         sdump('D_ERROR',"We don't round money\n");
121                         cents = cents.substr(0,2);
122                 }
123         } catch(E) {
124                 sdump('D_ERROR',"cents.length? " + E + "\n");
125         }
126         var total = 0;
127         try {
128                 if (parseInt(cents)) total += parseInt(cents);
129         } catch(E) {
130                 sdump('D_ERROR',"parseInt(cents)? " + E + "\n");
131         }
132         try {
133                 if (parseInt(dollars)) total += (parseInt(dollars) * 100);
134         } catch(E) {
135                 sdump('D_ERROR',"parseInt(dollars)? " + E + "\n");
136         }
137         return total;   
138 }
139
140 function cents_as_dollars( cents ) {
141         cents = cents.toString(); 
142         // FIXME: strip miscellaneous characters
143         try {
144                 switch( cents.length ) {
145                         case 0: cents = '000'; break;
146                         case 1: cents = '00' + cents; break;
147                 }
148         } catch(E) {
149                 sdump('D_ERROR',"cents_as_dollars: cents.length? " + E + "\n");
150         }
151         return cents.substr(0,cents.length-2) + '.' + cents.substr(cents.length - 2);
152 }
153
154 function db_date2Date(date) {
155         var y  = date.substr(0,4);
156         var mo = date.substr(5,2);
157         var d  = date.substr(8,2);
158         var h  = date.substr(11,2);
159         var mi = date.substr(14,2);
160         var s  = date.substr(17,2);
161         return new Date(y,mo,d,h,mi,s);
162 }
163
164 function formatted_date(date,format) {
165         // pass in a Date object or epoch seconds or a postgres style date string (2005-07-19 10:38:25.211964-04)
166         if (typeof(date) == 'string') {
167                 if (date.match(/:/) || date.match(/-/)) {
168                         date = db_date2Date(date);
169                 } else {
170                         date = new Date( parseInt( date + '000' ) );
171                 }
172         }
173         var mm = date.getMonth() + 1; mm = mm.toString(); if (mm.length == 1) mm = '0' +mm;
174         var dd = date.getDate().toString(); if (dd.length == 1) dd = '0' +dd;
175         var yyyy = date.getFullYear().toString();
176         var yy = yyyy.substr(2);
177         var H = date.getHours(); H = H.toString(); if (H.length == 1) H = '0' + H;
178         var I = date.getHours(); if (I > 12) I -= 12; I = I.toString();
179         var M = date.getMinutes(); M = M.toString(); if (M.length == 1) M = '0' + M;
180         var s = format;
181         s = s.replace( /%m/g, mm );
182         s = s.replace( /%d/g, dd );
183         s = s.replace( /%Y/g, yyyy );
184         s = s.replace( /%D/g, mm + '/' + dd + '/' + yy );
185         s = s.replace( /%F/g, yyyy + '-' + mm + '-' + dd );
186         s = s.replace( /%H/g, H );
187         s = s.replace( /%I/g, I );
188         s = s.replace( /%M/g, M );
189         return s;
190 }
191
192 function interval_to_seconds ( $interval ) {
193
194         $interval = $interval.replace( /and/, ',' );
195         $interval = $interval.replace( /,/, ' ' );
196
197         var $amount = 0;
198         var results = $interval.match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/g);  
199         for (var i in results) {
200                 var result = results[i].match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/ );
201                 if (result[2] == 's') $amount += result[1] ;
202                 if (result[2] == 'm') $amount += 60 * result[1] ;
203                 if (result[2] == 'h') $amount += 60 * 60 * result[1] ;
204                 if (result[2] == 'd') $amount += 60 * 60 * 24 * result[1] ;
205                 if (result[2] == 'w') $amount += 60 * 60 * 24 * 7 * result[1] ;
206                 if (result[2] == 'M') $amount += ((60 * 60 * 24 * 365)/12) * result[1] ;
207                 if (result[2] == 'y') $amount += 60 * 60 * 24 * 365 * result[1] ;
208         }
209         return $amount;
210 }
211
212 /*
213 function debug() {
214         var s = '';
215         for (var i = 0; i < arguments.length; i++) {
216                 s = s + arguments[i];
217         }
218         //sdump('D_UTIL','debug:' + s + '\n');
219 }
220 */
221
222 function counter_init(id) {
223         counter[id] = 0;
224 }
225
226 function counter_incr(id) {
227         if (! counter[id]) { counter_init(id); }
228         return ++counter[id];
229 }
230
231 function counter_peek(id) {
232         if (! counter[id]) { return 0; }
233         return counter[id];
234 }
235
236 function timer_init(id) {
237         timer[id] = (new Date).getTime();
238 }
239
240 function timer_elapsed(id) {
241         if (! timer[id]) { timer_init(id); }
242         var ms = (new Date).getTime() - timer[id];
243         return( ms + 'ms (' + ms/1000 + 's)' );
244 }
245
246 function dump_ns_node( node ) {
247         return (
248         'id=<' + 
249         node[fieldmap["Fieldmapper::biblio::record_node"].fields.id.position] 
250         + '>  intra-id=<' + 
251         node[fieldmap["Fieldmapper::biblio::record_node"].fields.intra_doc_id.position]
252         + '>  name=<' + 
253         node[fieldmap["Fieldmapper::biblio::record_node"].fields.name.position]
254         + '>  node_type=<' + 
255         node[fieldmap["Fieldmapper::biblio::record_node"].fields.type.position]
256         + '>  parent_node=<' + 
257         node[fieldmap["Fieldmapper::biblio::record_node"].fields.parent_node.position]
258         + '>  '
259         );
260 }
261
262 function nodeset2tree(ns) {
263         for (var i in ns) {
264                 if (ns[i].parent_node) {
265                         ns_addChild( 
266                                 ns, 
267                                 ns[i].parent_node, 
268                                 ns[i].intra_doc_id 
269                         );
270                 }
271         }
272         return ns;
273 }
274
275 function ns_addChild(ns,p,c) {
276         if (! ns[p].children ) { ns[p].children = []; }
277         ns[p].children.push(ns[c]);
278 }
279
280 function print_tabs(t) {
281         var r = '';
282         for (var j = 0; j < t; j++ ) { r = r + "\t"; }
283         return r;
284 }
285
286 function pretty_print(s) {
287         var r = ''; var t = 0;
288         for (var i in s) {
289                 if (s[i] == '{') {
290                         r = r + "\n" + print_tabs(t) + s[i]; t++;
291                         r = r + "\n" + print_tabs(t);
292                 } else if (s[i] == '[') {
293                         r = r + "\n" + print_tabs(t) + s[i]; t++;
294                         r = r + "\n" + print_tabs(t);
295                 } else if (s[i] == '}') {
296                         t--; r = r + "\n" + print_tabs(t) + s[i]; 
297                         r = r + "\n" + print_tabs(t);
298                 } else if (s[i] == ']') { 
299                         t--; r = r + "\n" + print_tabs(t) + s[i];
300                         r = r + "\n" + print_tabs(t);
301                 } else if (s[i] == ',') {
302                         r = r + s[i]; 
303                         r = r + "\n" + print_tabs(t);
304                 } else {
305                         r = r + s[i];
306                 }
307         }
308         return r;
309 }
310
311 function super_dump(o,t) {
312         var s = "\n";
313         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
314         s = s + "=-=-=\n";
315         s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
316         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
317         s = s + "typeof = " + typeof(o) + "\n";
318         try {
319                 var string = new XMLSerializer().serializeToString(o);
320                 return( string + "\n" );
321         } catch( E ) {
322                 var i;
323                 var c = 0;
324                 for (i in o) {
325                         switch(typeof(i)) {
326                                 case 'object':
327                                         s = s + super_dump(i,t+1);
328                                         break;
329                                 default :
330                                         var value = o[i];
331                                         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
332                                         s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
333                                         if (typeof(value) == 'object') {
334                                                 value = super_dump(value,t+1);
335                                         }
336                                         s = s + "\ttoString:" + i.toString() + "\tvalue:" + value + "\n";
337                                         break;
338                         }
339                 }
340                 return( s + "\n" );
341         }
342 }
343
344 function super_dump_norecurse(o,t) {
345         var s = "\n";
346         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
347         s = s + "=-=-=\n";
348         s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
349         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
350         s = s + "typeof = " + typeof(o) + "\n";
351         try {
352                 var string = new XMLSerializer().serializeToString(o);
353                 return( string + "\n" );
354         } catch( E ) {
355                 var i;
356                 var c = 0;
357                 for (i in o) {
358                         switch(typeof(i)) {
359                                 default :
360                                         var value = o[i];
361                                         for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
362                                         s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
363                                         s = s + "\ttoString:" + i.toString() + "\n";
364                                         break;
365                         }
366                 }
367                 return( s + "\n" );
368         }
369 }
370
371