~ubuntu-branches/ubuntu/quantal/enigmail/quantal-security

« back to all changes in this revision

Viewing changes to build/pgo/js-input/date-format-xparb.html

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2013-09-13 16:02:15 UTC
  • mfrom: (0.12.16)
  • Revision ID: package-import@ubuntu.com-20130913160215-u3g8nmwa0pdwagwc
Tags: 2:1.5.2-0ubuntu0.12.10.1
* New upstream release v1.5.2 for Thunderbird 24

* Build enigmail using a stripped down Thunderbird 17 build system, as it's
  now quite difficult to build the way we were doing previously, with the
  latest Firefox build system
* Add debian/patches/no_libxpcom.patch - Don't link against libxpcom, as it
  doesn't exist anymore (but exists in the build system)
* Add debian/patches/use_sdk.patch - Use the SDK version of xpt.py and
  friends
* Drop debian/patches/ipc-pipe_rename.diff (not needed anymore)
* Drop debian/patches/makefile_depth.diff (not needed anymore)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE html>
2
 
<head>
3
 
<!--
4
 
 Copyright (C) 2007 Apple Inc.  All rights reserved.
5
 
 
6
 
 Redistribution and use in source and binary forms, with or without
7
 
 modification, are permitted provided that the following conditions
8
 
 are met:
9
 
 1. Redistributions of source code must retain the above copyright
10
 
    notice, this list of conditions and the following disclaimer.
11
 
 2. Redistributions in binary form must reproduce the above copyright
12
 
    notice, this list of conditions and the following disclaimer in the
13
 
    documentation and/or other materials provided with the distribution.
14
 
 
15
 
 THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16
 
 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
 
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18
 
 PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19
 
 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20
 
 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21
 
 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22
 
 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23
 
 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
 
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
26
 
-->
27
 
 
28
 
<title>SunSpider date-format-xparb</title>
29
 
 
30
 
</head>
31
 
 
32
 
<body>
33
 
<h3>date-format-xparb</h3>
34
 
<div id="console">
35
 
</div>
36
 
 
37
 
<script>
38
 
 
39
 
var _sunSpiderStartDate = new Date();
40
 
 
41
 
/*
42
 
 * Copyright (C) 2004 Baron Schwartz <baron at sequent dot org>
43
 
 *
44
 
 * This program is free software; you can redistribute it and/or modify it
45
 
 * under the terms of the GNU Lesser General Public License as published by the
46
 
 * Free Software Foundation, version 2.1.
47
 
 *
48
 
 * This program is distributed in the hope that it will be useful, but WITHOUT
49
 
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
50
 
 * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
51
 
 * details.
52
 
 */
53
 
 
54
 
Date.parseFunctions = {count:0};
55
 
Date.parseRegexes = [];
56
 
Date.formatFunctions = {count:0};
57
 
 
58
 
Date.prototype.dateFormat = function(format) {
59
 
    if (Date.formatFunctions[format] == null) {
60
 
        Date.createNewFormat(format);
61
 
    }
62
 
    var func = Date.formatFunctions[format];
63
 
    return this[func]();
64
 
}
65
 
 
66
 
Date.createNewFormat = function(format) {
67
 
    var funcName = "format" + Date.formatFunctions.count++;
68
 
    Date.formatFunctions[format] = funcName;
69
 
    var code = "Date.prototype." + funcName + " = function(){return ";
70
 
    var special = false;
71
 
    var ch = '';
72
 
    for (var i = 0; i < format.length; ++i) {
73
 
        ch = format.charAt(i);
74
 
        if (!special && ch == "\\") {
75
 
            special = true;
76
 
        }
77
 
        else if (special) {
78
 
            special = false;
79
 
            code += "'" + String.escape(ch) + "' + ";
80
 
        }
81
 
        else {
82
 
            code += Date.getFormatCode(ch);
83
 
        }
84
 
    }
85
 
    eval(code.substring(0, code.length - 3) + ";}");
86
 
}
87
 
 
88
 
Date.getFormatCode = function(character) {
89
 
    switch (character) {
90
 
    case "d":
91
 
        return "String.leftPad(this.getDate(), 2, '0') + ";
92
 
    case "D":
93
 
        return "Date.dayNames[this.getDay()].substring(0, 3) + ";
94
 
    case "j":
95
 
        return "this.getDate() + ";
96
 
    case "l":
97
 
        return "Date.dayNames[this.getDay()] + ";
98
 
    case "S":
99
 
        return "this.getSuffix() + ";
100
 
    case "w":
101
 
        return "this.getDay() + ";
102
 
    case "z":
103
 
        return "this.getDayOfYear() + ";
104
 
    case "W":
105
 
        return "this.getWeekOfYear() + ";
106
 
    case "F":
107
 
        return "Date.monthNames[this.getMonth()] + ";
108
 
    case "m":
109
 
        return "String.leftPad(this.getMonth() + 1, 2, '0') + ";
110
 
    case "M":
111
 
        return "Date.monthNames[this.getMonth()].substring(0, 3) + ";
112
 
    case "n":
113
 
        return "(this.getMonth() + 1) + ";
114
 
    case "t":
115
 
        return "this.getDaysInMonth() + ";
116
 
    case "L":
117
 
        return "(this.isLeapYear() ? 1 : 0) + ";
118
 
    case "Y":
119
 
        return "this.getFullYear() + ";
120
 
    case "y":
121
 
        return "('' + this.getFullYear()).substring(2, 4) + ";
122
 
    case "a":
123
 
        return "(this.getHours() < 12 ? 'am' : 'pm') + ";
124
 
    case "A":
125
 
        return "(this.getHours() < 12 ? 'AM' : 'PM') + ";
126
 
    case "g":
127
 
        return "((this.getHours() %12) ? this.getHours() % 12 : 12) + ";
128
 
    case "G":
129
 
        return "this.getHours() + ";
130
 
    case "h":
131
 
        return "String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";
132
 
    case "H":
133
 
        return "String.leftPad(this.getHours(), 2, '0') + ";
134
 
    case "i":
135
 
        return "String.leftPad(this.getMinutes(), 2, '0') + ";
136
 
    case "s":
137
 
        return "String.leftPad(this.getSeconds(), 2, '0') + ";
138
 
    case "O":
139
 
        return "this.getGMTOffset() + ";
140
 
    case "T":
141
 
        return "this.getTimezone() + ";
142
 
    case "Z":
143
 
        return "(this.getTimezoneOffset() * -60) + ";
144
 
    default:
145
 
        return "'" + String.escape(character) + "' + ";
146
 
    }
147
 
}
148
 
 
149
 
Date.parseDate = function(input, format) {
150
 
    if (Date.parseFunctions[format] == null) {
151
 
        Date.createParser(format);
152
 
    }
153
 
    var func = Date.parseFunctions[format];
154
 
    return Date[func](input);
155
 
}
156
 
 
157
 
Date.createParser = function(format) {
158
 
    var funcName = "parse" + Date.parseFunctions.count++;
159
 
    var regexNum = Date.parseRegexes.length;
160
 
    var currentGroup = 1;
161
 
    Date.parseFunctions[format] = funcName;
162
 
 
163
 
    var code = "Date." + funcName + " = function(input){\n"
164
 
        + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\n"
165
 
        + "var d = new Date();\n"
166
 
        + "y = d.getFullYear();\n"
167
 
        + "m = d.getMonth();\n"
168
 
        + "d = d.getDate();\n"
169
 
        + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
170
 
        + "if (results && results.length > 0) {"
171
 
    var regex = "";
172
 
 
173
 
    var special = false;
174
 
    var ch = '';
175
 
    for (var i = 0; i < format.length; ++i) {
176
 
        ch = format.charAt(i);
177
 
        if (!special && ch == "\\") {
178
 
            special = true;
179
 
        }
180
 
        else if (special) {
181
 
            special = false;
182
 
            regex += String.escape(ch);
183
 
        }
184
 
        else {
185
 
            obj = Date.formatCodeToRegex(ch, currentGroup);
186
 
            currentGroup += obj.g;
187
 
            regex += obj.s;
188
 
            if (obj.g && obj.c) {
189
 
                code += obj.c;
190
 
            }
191
 
        }
192
 
    }
193
 
 
194
 
    code += "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
195
 
        + "{return new Date(y, m, d, h, i, s);}\n"
196
 
        + "else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
197
 
        + "{return new Date(y, m, d, h, i);}\n"
198
 
        + "else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n"
199
 
        + "{return new Date(y, m, d, h);}\n"
200
 
        + "else if (y > 0 && m >= 0 && d > 0)\n"
201
 
        + "{return new Date(y, m, d);}\n"
202
 
        + "else if (y > 0 && m >= 0)\n"
203
 
        + "{return new Date(y, m);}\n"
204
 
        + "else if (y > 0)\n"
205
 
        + "{return new Date(y);}\n"
206
 
        + "}return null;}";
207
 
 
208
 
    Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$");
209
 
    eval(code);
210
 
}
211
 
 
212
 
Date.formatCodeToRegex = function(character, currentGroup) {
213
 
    switch (character) {
214
 
    case "D":
215
 
        return {g:0,
216
 
        c:null,
217
 
        s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};
218
 
    case "j":
219
 
    case "d":
220
 
        return {g:1,
221
 
            c:"d = parseInt(results[" + currentGroup + "], 10);\n",
222
 
            s:"(\\d{1,2})"};
223
 
    case "l":
224
 
        return {g:0,
225
 
            c:null,
226
 
            s:"(?:" + Date.dayNames.join("|") + ")"};
227
 
    case "S":
228
 
        return {g:0,
229
 
            c:null,
230
 
            s:"(?:st|nd|rd|th)"};
231
 
    case "w":
232
 
        return {g:0,
233
 
            c:null,
234
 
            s:"\\d"};
235
 
    case "z":
236
 
        return {g:0,
237
 
            c:null,
238
 
            s:"(?:\\d{1,3})"};
239
 
    case "W":
240
 
        return {g:0,
241
 
            c:null,
242
 
            s:"(?:\\d{2})"};
243
 
    case "F":
244
 
        return {g:1,
245
 
            c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "].substring(0, 3)], 10);\n",
246
 
            s:"(" + Date.monthNames.join("|") + ")"};
247
 
    case "M":
248
 
        return {g:1,
249
 
            c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "]], 10);\n",
250
 
            s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};
251
 
    case "n":
252
 
    case "m":
253
 
        return {g:1,
254
 
            c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
255
 
            s:"(\\d{1,2})"};
256
 
    case "t":
257
 
        return {g:0,
258
 
            c:null,
259
 
            s:"\\d{1,2}"};
260
 
    case "L":
261
 
        return {g:0,
262
 
            c:null,
263
 
            s:"(?:1|0)"};
264
 
    case "Y":
265
 
        return {g:1,
266
 
            c:"y = parseInt(results[" + currentGroup + "], 10);\n",
267
 
            s:"(\\d{4})"};
268
 
    case "y":
269
 
        return {g:1,
270
 
            c:"var ty = parseInt(results[" + currentGroup + "], 10);\n"
271
 
                + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
272
 
            s:"(\\d{1,2})"};
273
 
    case "a":
274
 
        return {g:1,
275
 
            c:"if (results[" + currentGroup + "] == 'am') {\n"
276
 
                + "if (h == 12) { h = 0; }\n"
277
 
                + "} else { if (h < 12) { h += 12; }}",
278
 
            s:"(am|pm)"};
279
 
    case "A":
280
 
        return {g:1,
281
 
            c:"if (results[" + currentGroup + "] == 'AM') {\n"
282
 
                + "if (h == 12) { h = 0; }\n"
283
 
                + "} else { if (h < 12) { h += 12; }}",
284
 
            s:"(AM|PM)"};
285
 
    case "g":
286
 
    case "G":
287
 
    case "h":
288
 
    case "H":
289
 
        return {g:1,
290
 
            c:"h = parseInt(results[" + currentGroup + "], 10);\n",
291
 
            s:"(\\d{1,2})"};
292
 
    case "i":
293
 
        return {g:1,
294
 
            c:"i = parseInt(results[" + currentGroup + "], 10);\n",
295
 
            s:"(\\d{2})"};
296
 
    case "s":
297
 
        return {g:1,
298
 
            c:"s = parseInt(results[" + currentGroup + "], 10);\n",
299
 
            s:"(\\d{2})"};
300
 
    case "O":
301
 
        return {g:0,
302
 
            c:null,
303
 
            s:"[+-]\\d{4}"};
304
 
    case "T":
305
 
        return {g:0,
306
 
            c:null,
307
 
            s:"[A-Z]{3}"};
308
 
    case "Z":
309
 
        return {g:0,
310
 
            c:null,
311
 
            s:"[+-]\\d{1,5}"};
312
 
    default:
313
 
        return {g:0,
314
 
            c:null,
315
 
            s:String.escape(character)};
316
 
    }
317
 
}
318
 
 
319
 
Date.prototype.getTimezone = function() {
320
 
    return this.toString().replace(
321
 
        /^.*? ([A-Z]{3}) [0-9]{4}.*$/, "$1").replace(
322
 
        /^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3");
323
 
}
324
 
 
325
 
Date.prototype.getGMTOffset = function() {
326
 
    return (this.getTimezoneOffset() > 0 ? "-" : "+")
327
 
        + String.leftPad(Math.floor(this.getTimezoneOffset() / 60), 2, "0")
328
 
        + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
329
 
}
330
 
 
331
 
Date.prototype.getDayOfYear = function() {
332
 
    var num = 0;
333
 
    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
334
 
    for (var i = 0; i < this.getMonth(); ++i) {
335
 
        num += Date.daysInMonth[i];
336
 
    }
337
 
    return num + this.getDate() - 1;
338
 
}
339
 
 
340
 
Date.prototype.getWeekOfYear = function() {
341
 
    // Skip to Thursday of this week
342
 
    var now = this.getDayOfYear() + (4 - this.getDay());
343
 
    // Find the first Thursday of the year
344
 
    var jan1 = new Date(this.getFullYear(), 0, 1);
345
 
    var then = (7 - jan1.getDay() + 4);
346
 
    document.write(then);
347
 
    return String.leftPad(((now - then) / 7) + 1, 2, "0");
348
 
}
349
 
 
350
 
Date.prototype.isLeapYear = function() {
351
 
    var year = this.getFullYear();
352
 
    return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
353
 
}
354
 
 
355
 
Date.prototype.getFirstDayOfMonth = function() {
356
 
    var day = (this.getDay() - (this.getDate() - 1)) % 7;
357
 
    return (day < 0) ? (day + 7) : day;
358
 
}
359
 
 
360
 
Date.prototype.getLastDayOfMonth = function() {
361
 
    var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
362
 
    return (day < 0) ? (day + 7) : day;
363
 
}
364
 
 
365
 
Date.prototype.getDaysInMonth = function() {
366
 
    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
367
 
    return Date.daysInMonth[this.getMonth()];
368
 
}
369
 
 
370
 
Date.prototype.getSuffix = function() {
371
 
    switch (this.getDate()) {
372
 
        case 1:
373
 
        case 21:
374
 
        case 31:
375
 
            return "st";
376
 
        case 2:
377
 
        case 22:
378
 
            return "nd";
379
 
        case 3:
380
 
        case 23:
381
 
            return "rd";
382
 
        default:
383
 
            return "th";
384
 
    }
385
 
}
386
 
 
387
 
String.escape = function(string) {
388
 
    return string.replace(/('|\\)/g, "\\$1");
389
 
}
390
 
 
391
 
String.leftPad = function (val, size, ch) {
392
 
    var result = new String(val);
393
 
    if (ch == null) {
394
 
        ch = " ";
395
 
    }
396
 
    while (result.length < size) {
397
 
        result = ch + result;
398
 
    }
399
 
    return result;
400
 
}
401
 
 
402
 
Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
403
 
Date.monthNames =
404
 
   ["January",
405
 
    "February",
406
 
    "March",
407
 
    "April",
408
 
    "May",
409
 
    "June",
410
 
    "July",
411
 
    "August",
412
 
    "September",
413
 
    "October",
414
 
    "November",
415
 
    "December"];
416
 
Date.dayNames =
417
 
   ["Sunday",
418
 
    "Monday",
419
 
    "Tuesday",
420
 
    "Wednesday",
421
 
    "Thursday",
422
 
    "Friday",
423
 
    "Saturday"];
424
 
Date.y2kYear = 50;
425
 
Date.monthNumbers = {
426
 
    Jan:0,
427
 
    Feb:1,
428
 
    Mar:2,
429
 
    Apr:3,
430
 
    May:4,
431
 
    Jun:5,
432
 
    Jul:6,
433
 
    Aug:7,
434
 
    Sep:8,
435
 
    Oct:9,
436
 
    Nov:10,
437
 
    Dec:11};
438
 
Date.patterns = {
439
 
    ISO8601LongPattern:"Y-m-d H:i:s",
440
 
    ISO8601ShortPattern:"Y-m-d",
441
 
    ShortDatePattern: "n/j/Y",
442
 
    LongDatePattern: "l, F d, Y",
443
 
    FullDateTimePattern: "l, F d, Y g:i:s A",
444
 
    MonthDayPattern: "F d",
445
 
    ShortTimePattern: "g:i A",
446
 
    LongTimePattern: "g:i:s A",
447
 
    SortableDateTimePattern: "Y-m-d\\TH:i:s",
448
 
    UniversalSortableDateTimePattern: "Y-m-d H:i:sO",
449
 
    YearMonthPattern: "F, Y"};
450
 
 
451
 
var date = new Date("1/1/2007 1:11:11");
452
 
 
453
 
for (i = 0; i < 4000; ++i) {
454
 
    var shortFormat = date.dateFormat("Y-m-d");
455
 
    var longFormat = date.dateFormat("l, F d, Y g:i:s A");
456
 
    date.setTime(date.getTime() + 84266956);
457
 
}
458
 
 
459
 
 
460
 
var _sunSpiderInterval = new Date() - _sunSpiderStartDate;
461
 
 
462
 
document.getElementById("console").innerHTML = _sunSpiderInterval;
463
 
</script>
464
 
 
465
 
 
466
 
</body>
467
 
</html>