1 sdump('D_TRACE','Loading util.js\n');
5 var consider_Timeout_default = false;
7 function a_get( obj, i ) { return obj[i]; } // for use in closures inside loops
9 function consider_Timeout( f, t, b) {
10 sdump('D_TIMEOUT', arg_dump(arguments,{0:true,1:true,2:true}));
14 if (consider_Timeout_default)
21 function parse_render_string( obj_string, render_string, regexp ) {
22 sdump('D_UTIL', arg_dump(arguments,{0:true,1:true}));
25 if (!regexp) regexp = /\$\$/g;
26 if (render_string.slice(0,1) == '.') {
27 cmd = obj_string + render_string;
29 cmd = render_string.replace( regexp, obj_string );
36 sdump('D_UTIL', 'cmd = ' + cmd + '\n');
40 function getString( key ) {
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');
49 var string = bundle.getString( key );
52 sdump('D_STRING','\tfound\n');
54 sdump('D_STRING','\tnot found\n');
58 sdump('D_ERROR','string: ' + key + ' not found\n');
62 sdump('D_STRING',key + '=' + s + '\n');
66 function getFormattedString( key, strArray ) {
68 var bundles = mw.document.getElementById('string_bundles');
69 for (var i = i; i < bundles.childNodes.length; i++) {
70 var bundle = bundles[i];
73 var string = bundle.getFormattedString( key, strArray );
78 sdump('D_ERROR','string: ' + key + ' not found\n');
82 sdump('D_STRING',key + '(' + strArray + ')=' + s + '\n');
86 function string_to_array(s) {
88 for (var i = 0; i < s.length; i++ ) {
89 my_array.push( s.charAt(i) );
94 function yesno(value) {
96 case true: case 'true': case '1': case 'on':
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];
111 if (cents.length < 2) {
115 // I'm not sure why these are getting thrown, especially with the code still working
116 sdump('D_ERROR',"cents.length? " + E + "\n");
119 if (cents.length > 2) {
120 sdump('D_ERROR',"We don't round money\n");
121 cents = cents.substr(0,2);
124 sdump('D_ERROR',"cents.length? " + E + "\n");
128 if (parseInt(cents)) total += parseInt(cents);
130 sdump('D_ERROR',"parseInt(cents)? " + E + "\n");
133 if (parseInt(dollars)) total += (parseInt(dollars) * 100);
135 sdump('D_ERROR',"parseInt(dollars)? " + E + "\n");
140 function cents_as_dollars( cents ) {
141 cents = cents.toString();
142 // FIXME: strip miscellaneous characters
144 switch( cents.length ) {
145 case 0: cents = '000'; break;
146 case 1: cents = '00' + cents; break;
149 sdump('D_ERROR',"cents_as_dollars: cents.length? " + E + "\n");
151 return cents.substr(0,cents.length-2) + '.' + cents.substr(cents.length - 2);
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);
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);
170 date = new Date( parseInt( date + '000' ) );
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;
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 );
192 function interval_to_seconds ( $interval ) {
194 $interval = $interval.replace( /and/, ',' );
195 $interval = $interval.replace( /,/, ' ' );
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] ;
215 for (var i = 0; i < arguments.length; i++) {
216 s = s + arguments[i];
218 //sdump('D_UTIL','debug:' + s + '\n');
222 function counter_init(id) {
226 function counter_incr(id) {
227 if (! counter[id]) { counter_init(id); }
228 return ++counter[id];
231 function counter_peek(id) {
232 if (! counter[id]) { return 0; }
236 function timer_init(id) {
237 timer[id] = (new Date).getTime();
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)' );
246 function dump_ns_node( node ) {
249 node[fieldmap["Fieldmapper::biblio::record_node"].fields.id.position]
251 node[fieldmap["Fieldmapper::biblio::record_node"].fields.intra_doc_id.position]
253 node[fieldmap["Fieldmapper::biblio::record_node"].fields.name.position]
255 node[fieldmap["Fieldmapper::biblio::record_node"].fields.type.position]
256 + '> parent_node=<' +
257 node[fieldmap["Fieldmapper::biblio::record_node"].fields.parent_node.position]
262 function nodeset2tree(ns) {
264 if (ns[i].parent_node) {
275 function ns_addChild(ns,p,c) {
276 if (! ns[p].children ) { ns[p].children = []; }
277 ns[p].children.push(ns[c]);
280 function print_tabs(t) {
282 for (var j = 0; j < t; j++ ) { r = r + "\t"; }
286 function pretty_print(s) {
287 var r = ''; var t = 0;
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] == ',') {
303 r = r + "\n" + print_tabs(t);
311 function super_dump(o,t) {
313 for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
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";
319 var string = new XMLSerializer().serializeToString(o);
320 return( string + "\n" );
327 s = s + super_dump(i,t+1);
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);
336 s = s + "\ttoString:" + i.toString() + "\tvalue:" + value + "\n";
344 function super_dump_norecurse(o,t) {
346 for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
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";
352 var string = new XMLSerializer().serializeToString(o);
353 return( string + "\n" );
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";