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