]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/opac/common/js/sprintf.js
fixed session cookie to work with IE
[Evergreen.git] / Open-ILS / web / opac / common / js / sprintf.js
1 /* Copyright (c) 2005 Scott S. McCoy
2  * This was originally a non-object oriented interface
3
4 /* Function printf(format_string,arguments...)
5  * Javascript emulation of the C printf function (modifiers and argument types 
6  *    "p" and "n" are not supported due to language restrictions)
7  *
8  * Copyright 2003 K&L Productions. All rights reserved
9  * http://www.klproductions.com 
10  *
11  * Terms of use: This function can be used free of charge IF this header is not
12  *               modified and remains with the function code.
13  * 
14  * Legal: Use this code at your own risk. K&L Productions assumes NO resposibility
15  *        for anything.
16  ********************************************************************************/
17
18 String.prototype.sprintf = function () {
19   var fstring = this.toString();
20
21   var pad = function(str,ch,len) { var ps='';
22       for(var i=0; i<Math.abs(len); i++) ps+=ch;
23       return len>0?str+ps:ps+str;
24   }
25   var processFlags = function(flags,width,rs,arg) { 
26       var pn = function(flags,arg,rs) {
27           if(arg>=0) { 
28               if(flags.indexOf(' ')>=0) rs = ' ' + rs;
29               else if(flags.indexOf('+')>=0) rs = '+' + rs;
30           }
31           else
32               rs = '-' + rs;
33           return rs;
34       }
35       var iWidth = parseInt(width,10);
36       if(width.charAt(0) == '0') {
37           var ec=0;
38           if(flags.indexOf(' ')>=0 || flags.indexOf('+')>=0) ec++;
39           if(rs.length<(iWidth-ec)) rs = pad(rs,'0',rs.length-(iWidth-ec));
40           return pn(flags,arg,rs);
41       }
42       rs = pn(flags,arg,rs);
43       if(rs.length<iWidth) {
44           if(flags.indexOf('-')<0) rs = pad(rs,' ',rs.length-iWidth);
45           else rs = pad(rs,' ',iWidth - rs.length);
46       }    
47       return rs;
48   }
49   var converters = new Array();
50   converters['c'] = function(flags,width,precision,arg) { 
51       if (typeof(arg) == 'number') return String.fromCharCode(arg);
52       if (typeof(arg) == 'string') return arg.charAt(0);
53       return '';
54   }
55   converters['d'] = function(flags,width,precision,arg) { 
56       return converters['i'](flags,width,precision,arg); 
57   }
58   converters['u'] = function(flags,width,precision,arg) { 
59       return converters['i'](flags,width,precision,Math.abs(arg)); 
60   }
61   converters['i'] =  function(flags,width,precision,arg) {
62       var iPrecision=parseInt(precision);
63       var rs = ((Math.abs(arg)).toString().split('.'))[0];
64       if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
65       return processFlags(flags,width,rs,arg); 
66   }
67   converters['E'] = function(flags,width,precision,arg) {
68       return (converters['e'](flags,width,precision,arg)).toUpperCase();
69   }
70   converters['e'] = function(flags,width,precision,arg) {
71       iPrecision = parseInt(precision);
72       if(isNaN(iPrecision)) iPrecision = 6;
73       rs = (Math.abs(arg)).toExponential(iPrecision);
74       if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs.replace(/^(.*)(e.*)$/,'$1.$2');
75       return processFlags(flags,width,rs,arg);        
76   }
77   converters['f'] = function(flags,width,precision,arg) { 
78       iPrecision = parseInt(precision);
79       if(isNaN(iPrecision)) iPrecision = 6;
80       rs = (Math.abs(arg)).toFixed(iPrecision);
81       if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs + '.';
82       return processFlags(flags,width,rs,arg);
83   }
84   converters['G'] = function(flags,width,precision,arg) { 
85       return (converters['g'](flags,width,precision,arg)).toUpperCase();
86   }
87   converters['g'] = function(flags,width,precision,arg) {
88       iPrecision = parseInt(precision);
89       absArg = Math.abs(arg);
90       rse = absArg.toExponential();
91       rsf = absArg.toFixed(6);
92       if(!isNaN(iPrecision)) { 
93           rsep = absArg.toExponential(iPrecision);
94           rse = rsep.length < rse.length ? rsep : rse;
95           rsfp = absArg.toFixed(iPrecision);
96           rsf = rsfp.length < rsf.length ? rsfp : rsf;
97       }
98       if(rse.indexOf('.')<0 && flags.indexOf('#')>=0) rse = rse.replace(/^(.*)(e.*)$/,'$1.$2');
99       if(rsf.indexOf('.')<0 && flags.indexOf('#')>=0) rsf = rsf + '.';
100       rs = rse.length<rsf.length ? rse : rsf;
101       return processFlags(flags,width,rs,arg);        
102   }  
103   converters['o'] = function(flags,width,precision,arg) { 
104       var iPrecision=parseInt(precision);
105       var rs = Math.round(Math.abs(arg)).toString(8);
106       if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
107       if(flags.indexOf('#')>=0) rs='0'+rs;
108       return processFlags(flags,width,rs,arg); 
109   }
110   converters['X'] = function(flags,width,precision,arg) { 
111       return (converters['x'](flags,width,precision,arg)).toUpperCase();
112   }
113   converters['x'] = function(flags,width,precision,arg) { 
114       var iPrecision=parseInt(precision);
115       arg = Math.abs(arg);
116       var rs = Math.round(arg).toString(16);
117       if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
118       if(flags.indexOf('#')>=0) rs='0x'+rs;
119       return processFlags(flags,width,rs,arg); 
120   }
121   converters['s'] = function(flags,width,precision,arg) { 
122       var iPrecision=parseInt(precision);
123       var rs = arg;
124       if(rs.length > iPrecision) rs = rs.substring(0,iPrecision);
125       return processFlags(flags,width,rs,0);
126   }
127
128   farr = fstring.split('%');
129   retstr = farr[0];
130   fpRE = /^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/;
131   for(var i = 1; i<farr.length; i++) { 
132       fps=fpRE.exec(farr[i]);
133       if(!fps) continue;
134       if(arguments[i-1]!=null) {
135           retstr+=converters[fps[4]](fps[1],fps[2],fps[3],arguments[i-1]);
136       }
137       retstr += fps[5];
138   }
139   return retstr;
140 }
141