1 sdump('D_TRACE','Loading util.js\n');
5 var consider_Timeout_default = false;
7 function consider_Timeout( f, t, b) {
8 sdump('D_TIMEOUT', arg_dump(arguments,{0:true,1:true,2:true}));
12 if (consider_Timeout_default)
19 function parse_render_string( obj_string, render_string, regexp ) {
20 sdump('D_UTIL', arg_dump(arguments,{0:true,1:true}));
23 if (!regexp) regexp = /\$\$/g;
24 if (render_string.slice(0,1) == '.') {
25 cmd = obj_string + render_string;
27 cmd = render_string.replace( regexp, obj_string );
34 sdump('D_UTIL', 'cmd = ' + cmd + '\n');
38 function getString( key ) {
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');
47 var string = bundle.getString( key );
50 sdump('D_STRING','\tfound\n');
52 sdump('D_STRING','\tnot found\n');
56 sdump('D_ERROR',E + '\n');
59 sdump('D_STRING',key + '=' + s + '\n');
63 function getFormattedString( key, strArray ) {
65 var bundles = mw.document.getElementById('string_bundles');
66 for (var i = i; i < bundles.childNodes.length; i++) {
67 var bundle = bundles[i];
70 var string = bundle.getFormattedString( key, strArray );
75 sdump('D_ERROR',E + '\n');
78 sdump('D_STRING',key + '(' + strArray + ')=' + s + '\n');
82 function string_to_array(s) {
84 for (var i = 0; i < s.length; i++ ) {
85 my_array.push( s.charAt(i) );
90 function yesno(value) {
92 case true: case 'true': case '1': case 'on':
99 function dollars_float_to_cents_integer( money ) {
100 // careful to avoid fractions of pennies
101 var money_s = money.toString();
102 // FIXME: strip miscellaneous characters
103 var marray = money_s.split(".");
104 var dollars = marray[0];
105 var cents = marray[1];
107 if (cents.length < 2) {
111 // I'm not sure why these are getting thrown, especially with the code still working
112 sdump('D_ERROR',"cents.length? " + E + "\n");
115 if (cents.length > 2) {
116 sdump('D_ERROR',"We don't round money\n");
117 cents = cents.substr(0,2);
120 sdump('D_ERROR',"cents.length? " + E + "\n");
124 if (parseInt(cents)) total += parseInt(cents);
126 sdump('D_ERROR',"parseInt(cents)? " + E + "\n");
129 if (parseInt(dollars)) total += (parseInt(dollars) * 100);
131 sdump('D_ERROR',"parseInt(dollars)? " + E + "\n");
136 function cents_as_dollars( cents ) {
137 cents = cents.toString();
138 // FIXME: strip miscellaneous characters
140 switch( cents.length ) {
141 case 0: cents = '000'; break;
142 case 1: cents = '00' + cents; break;
145 sdump('D_ERROR',"cents_as_dollars: cents.length? " + E + "\n");
147 return cents.substr(0,cents.length-2) + '.' + cents.substr(cents.length - 2);
150 function formatted_date(date,format) {
151 // pass in a Date object or epoch seconds
152 if (typeof(date) == 'string') {
153 date = new Date( parseInt( date + '000' ) );
155 var mm = date.getMonth() + 1;
157 if (mm.length == 1) mm = '0' +mm;
158 var dd = date.getDate().toString();
159 if (dd.length == 1) dd = '0' +dd;
160 var yyyy = date.getFullYear().toString();
161 var s = format.replace( /%m/g, mm );
162 s = s.replace( /%d/g, dd );
163 s = s.replace( /%Y/g, yyyy );
167 function interval_to_seconds ( $interval ) {
169 $interval = $interval.replace( /and/, ',' );
170 $interval = $interval.replace( /,/, ' ' );
173 var results = $interval.match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/g);
174 for (var i in results) {
175 var result = results[i].match( /\s*\+?\s*(\d+)\s*(\w{1})\w*\s*/ );
176 if (result[2] == 's') $amount += result[1] ;
177 if (result[2] == 'm') $amount += 60 * result[1] ;
178 if (result[2] == 'h') $amount += 60 * 60 * result[1] ;
179 if (result[2] == 'd') $amount += 60 * 60 * 24 * result[1] ;
180 if (result[2] == 'w') $amount += 60 * 60 * 24 * 7 * result[1] ;
181 if (result[2] == 'M') $amount += ((60 * 60 * 24 * 365)/12) * result[1] ;
182 if (result[2] == 'y') $amount += 60 * 60 * 24 * 365 * result[1] ;
190 for (var i = 0; i < arguments.length; i++) {
191 s = s + arguments[i];
193 //sdump('D_UTIL','debug:' + s + '\n');
197 function counter_init(id) {
201 function counter_incr(id) {
202 if (! counter[id]) { counter_init(id); }
203 return ++counter[id];
206 function counter_peek(id) {
207 if (! counter[id]) { return 0; }
211 function timer_init(id) {
212 timer[id] = (new Date).getTime();
215 function timer_elapsed(id) {
216 if (! timer[id]) { timer_init(id); }
217 var ms = (new Date).getTime() - timer[id];
218 return( ms + 'ms (' + ms/1000 + 's)' );
221 function dump_ns_node( node ) {
224 node[fieldmap["Fieldmapper::biblio::record_node"].fields.id.position]
226 node[fieldmap["Fieldmapper::biblio::record_node"].fields.intra_doc_id.position]
228 node[fieldmap["Fieldmapper::biblio::record_node"].fields.name.position]
230 node[fieldmap["Fieldmapper::biblio::record_node"].fields.type.position]
231 + '> parent_node=<' +
232 node[fieldmap["Fieldmapper::biblio::record_node"].fields.parent_node.position]
237 function nodeset2tree(ns) {
239 if (ns[i].parent_node) {
250 function ns_addChild(ns,p,c) {
251 if (! ns[p].children ) { ns[p].children = []; }
252 ns[p].children.push(ns[c]);
255 function print_tabs(t) {
257 for (var j = 0; j < t; j++ ) { r = r + "\t"; }
261 function pretty_print(s) {
262 var r = ''; var t = 0;
265 r = r + "\n" + print_tabs(t) + s[i]; t++;
266 r = r + "\n" + print_tabs(t);
267 } else if (s[i] == '[') {
268 r = r + "\n" + print_tabs(t) + s[i]; t++;
269 r = r + "\n" + print_tabs(t);
270 } else if (s[i] == '}') {
271 t--; r = r + "\n" + print_tabs(t) + s[i];
272 r = r + "\n" + print_tabs(t);
273 } else if (s[i] == ']') {
274 t--; r = r + "\n" + print_tabs(t) + s[i];
275 r = r + "\n" + print_tabs(t);
276 } else if (s[i] == ',') {
278 r = r + "\n" + print_tabs(t);
286 function super_dump(o,t) {
288 for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
290 s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
291 for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
292 s = s + "typeof = " + typeof(o) + "\n";
294 var string = new XMLSerializer().serializeToString(o);
295 return( string + "\n" );
302 s = s + super_dump(i,t+1);
306 for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
307 s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
308 if (typeof(value) == 'object') {
309 value = super_dump(value,t+1);
311 s = s + "\ttoString:" + i.toString() + "\tvalue:" + value + "\n";
319 function super_dump_norecurse(o,t) {
321 for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
323 s = s + 'o.constructor == Array = ' + (o.constructor == Array) + '\n';
324 for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
325 s = s + "typeof = " + typeof(o) + "\n";
327 var string = new XMLSerializer().serializeToString(o);
328 return( string + "\n" );
336 for (var ii = 0; ii < t; ii++) { s = s + '\t'; }
337 s = s + "\tMember#" + c++ + "\tType:" + typeof(value);
338 s = s + "\ttoString:" + i.toString() + "\n";