/adei/ui

To get this branch, use:
bzr branch http://darksoft.org/webbzr/adei/ui

« back to all changes in this revision

Viewing changes to js/tools.js

  • Committer: Suren A. Chilingaryan
  • Date: 2008-04-02 10:23:22 UTC
  • Revision ID: csa@dside.dyndns.org-20080402102322-okib92sicg2dx3o3
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
function adeiReportError(msg, module_name, module) {
 
2
    if (typeof module_name == "undefined")
 
3
        alert(msg);
 
4
    else
 
5
        alert("Error in '" + module_name + "': " + msg);
 
6
        
 
7
}
 
8
 
 
9
function adeiReportException(e, msg, module_name, module) {
 
10
    var emsg;
 
11
    if (msg) emsg = msg + ", " + translate("error: ");
 
12
    else emsg = translate("Exception caught, error: ");
 
13
 
 
14
    if (e.description) emsg += e.description;
 
15
    else if (e.message) emsg += e.message;
 
16
    else emsg += translate("Unknown error");
 
17
    
 
18
    if (e.fileName) {
 
19
        emsg += "(" + e.fileName;
 
20
        if (e.lineNumber) emsg += ":" + e.lineNumber;
 
21
        emsg += ")";
 
22
    }
 
23
    
 
24
    if (e.stack) {
 
25
        emsg += "\n\n" + e.stack;
 
26
    }
 
27
 
 
28
    adeiReportError(emsg, module_name, module);
 
29
}
 
30
 
 
31
 
 
32
function adeiReplaceProp(props, prop, value) {
 
33
    /* To be implemented */
 
34
}
 
35
 
 
36
function adeiDateFormat(d, range) {
 
37
    var mydate = new Date(Math.floor(d)*1000);
 
38
    if ((range)&&(range <= adei.cfg.subsecond_threshold)) {
 
39
        var ds = d.toString();
 
40
        var subsecs = ds.indexOf('.');
 
41
        if (subsecs >= 0) return dateFormat(mydate) + '.' + ds.substr(subsecs + 1);
 
42
        else return dateFormat(mydate);
 
43
    } else return dateFormat(mydate);
 
44
}
 
45
 
 
46
function adeiDateParse(d) {
 
47
    var subsecs = d.indexOf('.');
 
48
    if (subsecs < 0) return Date.parse(d + " UTC") / 1000;
 
49
    return Math.floor(Date.parse(d.substr(0,subsecs) + " UTC") / 1000) + '.' + d.substr(subsecs + 1);
 
50
}
 
51
 
 
52
function adeiMathPreciseSubstract(a, b) {
 
53
    var ra, rb;
 
54
    var astr = a.toString();
 
55
    var bstr = b.toString();
 
56
 
 
57
    var pos = astr.indexOf(".");
 
58
    if (pos < 0) ra = 0;
 
59
    else ra = parseFloat("0." + astr.substr(pos + 1));
 
60
 
 
61
    pos = bstr.indexOf(".");
 
62
    if (pos < 0) rb = 0;
 
63
    else rb = parseFloat("0." + bstr.substr(pos + 1));
 
64
 
 
65
    if ((ra)||(rb)) {
 
66
        var ia = Math.floor(a);
 
67
        var ib = Math.floor(b);
 
68
 
 
69
        var r = ra - rb;
 
70
        if (r < 0) {
 
71
            var rstr = (r+1).toString();
 
72
            pos = rstr.indexOf('.');
 
73
            return (ia - ib - 1).toString() + rstr.substr(pos);
 
74
        } else if (r > 0) {
 
75
            var rstr = r.toString();
 
76
            pos = rstr.indexOf('.');
 
77
            return (ia - ib).toString() + rstr.substr(pos);
 
78
        } else return ia - ib;
 
79
    } 
 
80
    return a - b;       
 
81
}
 
82
 
 
83
function adeiMathPreciseAdd(a, b) {
 
84
    var ra, rb;
 
85
 
 
86
    var astr = a.toString();
 
87
    var bstr = b.toString();
 
88
    
 
89
    var pos = astr.indexOf(".");
 
90
    if (pos < 0) ra = 0;
 
91
    else ra = parseFloat("0." + astr.substr(pos + 1));
 
92
 
 
93
    pos = bstr.indexOf(".");
 
94
    if (pos < 0) rb = 0;
 
95
    else rb = parseFloat("0." + bstr.substr(pos + 1));
 
96
 
 
97
    if ((ra)||(rb)) {
 
98
        var ia = Math.floor(a);
 
99
        var ib = Math.floor(b);
 
100
 
 
101
        var r = ra + rb;
 
102
        if (r > 1) {
 
103
            var rstr = r.toString();
 
104
            pos = rstr.indexOf('.');
 
105
            return (ia + ib + 1).toString() + rstr.substr(pos);
 
106
        } else if (r < 1) {
 
107
            var rstr = r.toString();
 
108
            pos = rstr.indexOf('.');
 
109
            return (ia + ib).toString() + rstr.substr(pos);
 
110
        } else return ia + ib + 1;
 
111
    } 
 
112
    return a + b;       
 
113
}
 
114
 
 
115
function translate(msg) {
 
116
    var str = msg;
 
117
 
 
118
    if (!arguments || arguments.length < 2 || !RegExp) {
 
119
        return str;
 
120
    }
 
121
    
 
122
    var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
 
123
    var a = b = [], numSubstitutions = 0, numMatches = 0;
 
124
    while (a = re.exec(str))
 
125
    {
 
126
        var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
 
127
        var pPrecision = a[5], pType = a[6], rightPart = a[7];
 
128
 
 
129
        numMatches++;
 
130
        if (pType == '%')
 
131
        {
 
132
            subst = '%';
 
133
        }
 
134
        else
 
135
        {
 
136
            numSubstitutions++;
 
137
            if (numSubstitutions >= arguments.length)
 
138
            {
 
139
                alert('Error! Not enough function arguments (' + (arguments.length - 1) + ', excluding the string)\nfor the number of substitution parameters in string (' + numSubstitutions + ' so far).');
 
140
            }
 
141
            var param = arguments[numSubstitutions];
 
142
            var pad = '';
 
143
            if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
 
144
            else if (pPad) pad = pPad;
 
145
            var justifyRight = true;
 
146
            if (pJustify && pJustify === "-") justifyRight = false;
 
147
            var minLength = -1;
 
148
            if (pMinLength) minLength = parseInt(pMinLength);
 
149
            var precision = -1;
 
150
            if (pPrecision && pType == 'f') precision = parseInt(pPrecision.substring(1));
 
151
            var subst = param;
 
152
            if (pType == 'b') subst = parseInt(param).toString(2);
 
153
            else if (pType == 'c') subst = String.fromCharCode(parseInt(param));
 
154
            else if (pType == 'd') subst = parseInt(param) ? parseInt(param) : 0;
 
155
            else if (pType == 'u') subst = Math.abs(param);
 
156
            else if (pType == 'f') subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param);
 
157
            else if (pType == 'o') subst = parseInt(param).toString(8);
 
158
            else if (pType == 's') subst = param;
 
159
            else if (pType == 'x') subst = ('' + parseInt(param).toString(16)).toLowerCase();
 
160
            else if (pType == 'X') subst = ('' + parseInt(param).toString(16)).toUpperCase();
 
161
        }
 
162
        str = leftpart + subst + rightPart;
 
163
    }
 
164
    return str;
 
165
}
 
166
 
 
167
// This code is in the public domain. Feel free to link back to http://jan.moesen.nu/
 
168
function sprintf()
 
169
{
 
170
    if (!arguments || arguments.length < 1 || !RegExp)
 
171
    {
 
172
        return;
 
173
    }
 
174
    var str = arguments[0];
 
175
    var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
 
176
    var a = b = [], numSubstitutions = 0, numMatches = 0;
 
177
    while (a = re.exec(str))
 
178
    {
 
179
        var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
 
180
        var pPrecision = a[5], pType = a[6], rightPart = a[7];
 
181
 
 
182
        //alert(a + '\n' + [a[0], leftpart, pPad, pJustify, pMinLength, pPrecision);
 
183
 
 
184
        numMatches++;
 
185
        if (pType == '%')
 
186
        {
 
187
            subst = '%';
 
188
        }
 
189
        else
 
190
        {
 
191
            numSubstitutions++;
 
192
            if (numSubstitutions >= arguments.length)
 
193
            {
 
194
                alert('Error! Not enough function arguments (' + (arguments.length - 1) + ', excluding the string)\nfor the number of substitution parameters in string (' + numSubstitutions + ' so far).');
 
195
            }
 
196
            var param = arguments[numSubstitutions];
 
197
            var pad = '';
 
198
            if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
 
199
            else if (pPad) pad = pPad;
 
200
            var justifyRight = true;
 
201
            if (pJustify && pJustify === "-") justifyRight = false;
 
202
            var minLength = -1;
 
203
            if (pMinLength) minLength = parseInt(pMinLength);
 
204
            var precision = -1;
 
205
            if (pPrecision && pType == 'f') precision = parseInt(pPrecision.substring(1));
 
206
            var subst = param;
 
207
            if (pType == 'b') subst = parseInt(param).toString(2);
 
208
            else if (pType == 'c') subst = String.fromCharCode(parseInt(param));
 
209
            else if (pType == 'd') subst = parseInt(param) ? parseInt(param) : 0;
 
210
            else if (pType == 'u') subst = Math.abs(param);
 
211
            else if (pType == 'f') subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param);
 
212
            else if (pType == 'o') subst = parseInt(param).toString(8);
 
213
            else if (pType == 's') subst = param;
 
214
            else if (pType == 'x') subst = ('' + parseInt(param).toString(16)).toLowerCase();
 
215
            else if (pType == 'X') subst = ('' + parseInt(param).toString(16)).toUpperCase();
 
216
        }
 
217
        str = leftpart + subst + rightPart;
 
218
    }
 
219
    return str;
 
220
}