www-thermferm/jqwidgets/globalization/globalize.js

Mon, 25 Mar 2024 17:14:56 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 25 Mar 2024 17:14:56 +0100
changeset 650
0b215e4b814e
parent 617
b216f9d4b917
permissions
-rw-r--r--

Brought the retry attempts to read the DHT11 sensors to the main devices loop. The actual read function is now very simple. Called every 30 seconds when all is well, or 2 seconds if something is wrong.

617
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1 /* tslint:disable */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
2 /* eslint-disable */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
3 /*!
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
4 * Globalize
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
5 *
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
6 * http://github.com/jquery/globalize
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
7 *
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
8 * Copyright Software Freedom Conservancy, Inc.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
9 * Dual licensed under the MIT or GPL Version 2 licenses.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
10 * http://jquery.org/license
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
11 */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
12
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
13 (function( window, undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
14 if (document.Globalize) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
15 return;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
16 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
17
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
18 var Globalize,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
19 // private variables
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
20 regexHex,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
21 regexInfinity,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
22 regexParseFloat,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
23 regexTrim,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
24 // private JavaScript utility functions
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
25 arrayIndexOf,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
26 endsWith,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
27 extend,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
28 isArray,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
29 isFunction,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
30 isObject,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
31 startsWith,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
32 trim,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
33 truncate,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
34 zeroPad,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
35 // private Globalization utility functions
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
36 appendPreOrPostMatch,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
37 expandFormat,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
38 formatDate,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
39 formatNumber,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
40 getTokenRegExp,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
41 getEra,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
42 getEraYear,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
43 parseExact,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
44 parseNegativePattern;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
45
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
46 // Global variable (Globalize) or CommonJS module (globalize)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
47 Globalize = function( cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
48 return new Globalize.prototype.init( cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
49 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
50
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
51 if ( typeof require !== "undefined" &&
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
52 typeof exports !== "undefined" &&
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
53 typeof module !== "undefined" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
54 // Assume CommonJS
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
55 module.exports = Globalize;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
56 } else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
57 // Export as global variable
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
58 window.Globalize = Globalize;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
59 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
60
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
61 Globalize.cultures = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
62
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
63 Globalize.prototype = {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
64 constructor: Globalize,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
65 init: function( cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
66 this.cultures = Globalize.cultures;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
67 this.cultureSelector = cultureSelector;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
68
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
69 return this;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
70 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
71 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
72 Globalize.prototype.init.prototype = Globalize.prototype;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
73
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
74 // 1. When defining a culture, all fields are required except the ones stated as optional.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
75 // 2. Each culture should have a ".calendars" object with at least one calendar named "standard"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
76 // which serves as the default calendar in use by that culture.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
77 // 3. Each culture should have a ".calendar" object which is the current calendar being used,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
78 // it may be dynamically changed at any time to one of the calendars in ".calendars".
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
79 Globalize.cultures[ "default" ] = {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
80 // A unique name for the culture in the form <language code>-<country/region code>
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
81 name: "en",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
82 // the name of the culture in the english language
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
83 englishName: "English",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
84 // the name of the culture in its own language
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
85 nativeName: "English",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
86 // whether the culture uses right-to-left text
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
87 isRTL: false,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
88 // "language" is used for so-called "specific" cultures.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
89 // For example, the culture "es-CL" means "Spanish, in Chili".
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
90 // It represents the Spanish-speaking culture as it is in Chili,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
91 // which might have different formatting rules or even translations
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
92 // than Spanish in Spain. A "neutral" culture is one that is not
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
93 // specific to a region. For example, the culture "es" is the generic
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
94 // Spanish culture, which may be a more generalized version of the language
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
95 // that may or may not be what a specific culture expects.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
96 // For a specific culture like "es-CL", the "language" field refers to the
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
97 // neutral, generic culture information for the language it is using.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
98 // This is not always a simple matter of the string before the dash.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
99 // For example, the "zh-Hans" culture is netural (Simplified Chinese).
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
100 // And the "zh-SG" culture is Simplified Chinese in Singapore, whose lanugage
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
101 // field is "zh-CHS", not "zh".
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
102 // This field should be used to navigate from a specific culture to it's
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
103 // more general, neutral culture. If a culture is already as general as it
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
104 // can get, the language may refer to itself.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
105 language: "en",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
106 // numberFormat defines general number formatting rules, like the digits in
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
107 // each grouping, the group separator, and how negative numbers are displayed.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
108 numberFormat: {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
109 // [negativePattern]
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
110 // Note, numberFormat.pattern has no "positivePattern" unlike percent and currency,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
111 // but is still defined as an array for consistency with them.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
112 // negativePattern: one of "(n)|-n|- n|n-|n -"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
113 pattern: [ "-n" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
114 // number of decimal places normally shown
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
115 decimals: 2,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
116 // string that separates number groups, as in 1,000,000
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
117 ",": ",",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
118 // string that separates a number from the fractional portion, as in 1.99
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
119 ".": ".",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
120 // array of numbers indicating the size of each number group.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
121 // TODO: more detailed description and example
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
122 groupSizes: [ 3 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
123 // symbol used for positive numbers
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
124 "+": "+",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
125 // symbol used for negative numbers
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
126 "-": "-",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
127 // symbol used for NaN (Not-A-Number)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
128 "NaN": "NaN",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
129 // symbol used for Negative Infinity
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
130 negativeInfinity: "-Infinity",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
131 // symbol used for Positive Infinity
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
132 positiveInfinity: "Infinity",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
133 percent: {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
134 // [negativePattern, positivePattern]
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
135 // negativePattern: one of "-n %|-n%|-%n|%-n|%n-|n-%|n%-|-% n|n %-|% n-|% -n|n- %"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
136 // positivePattern: one of "n %|n%|%n|% n"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
137 pattern: [ "-n %", "n %" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
138 // number of decimal places normally shown
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
139 decimals: 2,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
140 // array of numbers indicating the size of each number group.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
141 // TODO: more detailed description and example
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
142 groupSizes: [ 3 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
143 // string that separates number groups, as in 1,000,000
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
144 ",": ",",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
145 // string that separates a number from the fractional portion, as in 1.99
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
146 ".": ".",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
147 // symbol used to represent a percentage
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
148 symbol: "%"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
149 },
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
150 currency: {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
151 // [negativePattern, positivePattern]
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
152 // negativePattern: one of "($n)|-$n|$-n|$n-|(n$)|-n$|n-$|n$-|-n $|-$ n|n $-|$ n-|$ -n|n- $|($ n)|(n $)"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
153 // positivePattern: one of "$n|n$|$ n|n $"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
154 pattern: [ "($n)", "$n" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
155 // number of decimal places normally shown
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
156 decimals: 2,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
157 // array of numbers indicating the size of each number group.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
158 // TODO: more detailed description and example
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
159 groupSizes: [ 3 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
160 // string that separates number groups, as in 1,000,000
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
161 ",": ",",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
162 // string that separates a number from the fractional portion, as in 1.99
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
163 ".": ".",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
164 // symbol used to represent currency
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
165 symbol: "$"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
166 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
167 },
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
168 // calendars defines all the possible calendars used by this culture.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
169 // There should be at least one defined with name "standard", and is the default
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
170 // calendar used by the culture.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
171 // A calendar contains information about how dates are formatted, information about
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
172 // the calendar's eras, a standard set of the date formats,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
173 // translations for day and month names, and if the calendar is not based on the Gregorian
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
174 // calendar, conversion functions to and from the Gregorian calendar.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
175 calendars: {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
176 standard: {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
177 // name that identifies the type of calendar this is
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
178 name: "Gregorian_USEnglish",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
179 // separator of parts of a date (e.g. "/" in 11/05/1955)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
180 "/": "/",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
181 // separator of parts of a time (e.g. ":" in 05:44 PM)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
182 ":": ":",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
183 // the first day of the week (0 = Sunday, 1 = Monday, etc)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
184 firstDay: 0,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
185 days: {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
186 // full day names
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
187 names: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
188 // abbreviated day names
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
189 namesAbbr: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
190 // shortest day names
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
191 namesShort: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ]
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
192 },
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
193 months: {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
194 // full month names (13 months for lunar calendards -- 13th month should be "" if not lunar)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
195 names: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
196 // abbreviated month names
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
197 namesAbbr: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" ]
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
198 },
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
199 // AM and PM designators in one of these forms:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
200 // The usual view, and the upper and lower case versions
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
201 // [ standard, lowercase, uppercase ]
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
202 // The culture does not use AM or PM (likely all standard date formats use 24 hour time)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
203 // null
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
204 AM: [ "AM", "am", "AM" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
205 PM: [ "PM", "pm", "PM" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
206 eras: [
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
207 // eras in reverse chronological order.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
208 // name: the name of the era in this culture (e.g. A.D., C.E.)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
209 // start: when the era starts in ticks (gregorian, gmt), null if it is the earliest supported era.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
210 // offset: offset in years from gregorian calendar
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
211 {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
212 "name": "A.D.",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
213 "start": null,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
214 "offset": 0
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
215 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
216 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
217 // when a two digit year is given, it will never be parsed as a four digit
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
218 // year greater than this year (in the appropriate era for the culture)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
219 // Set it as a full year (e.g. 2029) or use an offset format starting from
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
220 // the current year: "+19" would correspond to 2029 if the current year 2010.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
221 twoDigitYearMax: 2029,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
222 // set of predefined date and time patterns used by the culture
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
223 // these represent the format someone in this culture would expect
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
224 // to see given the portions of the date that are shown.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
225 patterns: {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
226 // short date pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
227 d: "M/d/yyyy",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
228 // long date pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
229 D: "dddd, MMMM dd, yyyy",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
230 // short time pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
231 t: "h:mm tt",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
232 // long time pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
233 T: "h:mm:ss tt",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
234 // long date, short time pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
235 f: "dddd, MMMM dd, yyyy h:mm tt",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
236 // long date, long time pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
237 F: "dddd, MMMM dd, yyyy h:mm:ss tt",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
238 // month/day pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
239 M: "MMMM dd",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
240 // month/year pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
241 Y: "yyyy MMMM",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
242 // S is a sortable format that does not vary by culture
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
243 S: "yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
244 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
245 // optional fields for each calendar:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
246 /*
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
247 monthsGenitive:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
248 Same as months but used when the day preceeds the month.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
249 Omit if the culture has no genitive distinction in month names.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
250 For an explaination of genitive months, see http://blogs.msdn.com/michkap/archive/2004/12/25/332259.aspx
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
251 convert:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
252 Allows for the support of non-gregorian based calendars. This convert object is used to
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
253 to convert a date to and from a gregorian calendar date to handle parsing and formatting.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
254 The two functions:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
255 fromGregorian( date )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
256 Given the date as a parameter, return an array with parts [ year, month, day ]
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
257 corresponding to the non-gregorian based year, month, and day for the calendar.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
258 toGregorian( year, month, day )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
259 Given the non-gregorian year, month, and day, return a new Date() object
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
260 set to the corresponding date in the gregorian calendar.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
261 */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
262 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
263 },
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
264 // For localized strings
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
265 messages: {}
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
266 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
267
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
268 Globalize.cultures[ "default" ].calendar = Globalize.cultures[ "default" ].calendars.standard;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
269
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
270 Globalize.cultures.en = Globalize.cultures[ "default" ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
271
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
272 Globalize.cultureSelector = "en";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
273
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
274 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
275 // private variables
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
276 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
277
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
278 regexHex = /^0x[a-f0-9]+$/i;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
279 regexInfinity = /^[+\-]?infinity$/i;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
280 regexParseFloat = /^[+\-]?\d*\.?\d*(e[+\-]?\d+)?$/;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
281 regexTrim = /^\s+|\s+$/g;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
282
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
283 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
284 // private JavaScript utility functions
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
285 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
286
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
287 arrayIndexOf = function( array, item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
288 if ( array.indexOf ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
289 return array.indexOf( item );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
290 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
291 for ( var i = 0, length = array.length; i < length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
292 if ( array[i] === item ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
293 return i;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
294 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
295 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
296 return -1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
297 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
298
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
299 endsWith = function( value, pattern ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
300 return value.substr( value.length - pattern.length ) === pattern;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
301 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
302
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
303 extend = function() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
304 var options, name, src, copy, copyIsArray, clone,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
305 target = arguments[0] || {},
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
306 i = 1,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
307 length = arguments.length,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
308 deep = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
309
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
310 // Handle a deep copy situation
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
311 if ( typeof target === "boolean" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
312 deep = target;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
313 target = arguments[1] || {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
314 // skip the boolean and the target
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
315 i = 2;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
316 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
317
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
318 // Handle case when target is a string or something (possible in deep copy)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
319 if ( typeof target !== "object" && !isFunction(target) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
320 target = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
321 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
322
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
323 for ( ; i < length; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
324 // Only deal with non-null/undefined values
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
325 if ( (options = arguments[ i ]) != null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
326 // Extend the base object
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
327 for ( name in options ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
328 src = target[ name ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
329 copy = options[ name ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
330
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
331 // Prevent never-ending loop
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
332 if ( target === copy ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
333 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
334 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
335
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
336 // Recurse if we're merging plain objects or arrays
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
337 if ( deep && copy && ( isObject(copy) || (copyIsArray = isArray(copy)) ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
338 if ( copyIsArray ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
339 copyIsArray = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
340 clone = src && isArray(src) ? src : [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
341
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
342 } else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
343 clone = src && isObject(src) ? src : {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
344 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
345
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
346 // Never move original objects, clone them
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
347 target[ name ] = extend( deep, clone, copy );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
348
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
349 // Don't bring in undefined values
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
350 } else if ( copy !== undefined ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
351 target[ name ] = copy;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
352 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
353 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
354 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
355 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
356
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
357 // Return the modified object
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
358 return target;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
359 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
360
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
361 isArray = Array.isArray || function( obj ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
362 return Object.prototype.toString.call( obj ) === "[object Array]";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
363 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
364
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
365 isFunction = function( obj ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
366 return Object.prototype.toString.call( obj ) === "[object Function]";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
367 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
368
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
369 isObject = function( obj ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
370 return Object.prototype.toString.call( obj ) === "[object Object]";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
371 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
372
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
373 startsWith = function( value, pattern ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
374 return value.indexOf( pattern ) === 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
375 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
376
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
377 trim = function( value ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
378 return ( value + "" ).replace( regexTrim, "" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
379 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
380
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
381 truncate = function( value ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
382 if ( isNaN( value ) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
383 return NaN;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
384 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
385 return Math[ value < 0 ? "ceil" : "floor" ]( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
386 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
387
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
388 zeroPad = function( str, count, left ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
389 var l;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
390 for ( l = str.length; l < count; l += 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
391 str = ( left ? ("0" + str) : (str + "0") );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
392 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
393 return str;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
394 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
395
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
396 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
397 // private Globalization utility functions
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
398 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
399
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
400 appendPreOrPostMatch = function( preMatch, strings ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
401 // appends pre- and post- token match strings while removing escaped characters.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
402 // Returns a single quote count which is used to determine if the token occurs
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
403 // in a string literal.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
404 var quoteCount = 0,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
405 escaped = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
406 for ( var i = 0, il = preMatch.length; i < il; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
407 var c = preMatch.charAt( i );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
408 switch ( c ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
409 case "\'":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
410 if ( escaped ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
411 strings.push( "\'" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
412 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
413 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
414 quoteCount++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
415 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
416 escaped = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
417 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
418 case "\\":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
419 if ( escaped ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
420 strings.push( "\\" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
421 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
422 escaped = !escaped;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
423 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
424 default:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
425 strings.push( c );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
426 escaped = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
427 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
428 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
429 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
430 return quoteCount;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
431 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
432
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
433 expandFormat = function( cal, format ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
434 // expands unspecified or single character date formats into the full pattern.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
435 format = format || "F";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
436 var pattern,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
437 patterns = cal.patterns,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
438 len = format.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
439 if ( len === 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
440 pattern = patterns[ format ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
441 if ( !pattern ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
442 throw "Invalid date format string \'" + format + "\'.";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
443 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
444 format = pattern;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
445 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
446 else if ( len === 2 && format.charAt(0) === "%" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
447 // %X escape format -- intended as a custom format string that is only one character, not a built-in format.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
448 format = format.charAt( 1 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
449 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
450 return format;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
451 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
452
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
453 formatDate = function( value, format, culture ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
454 var cal = culture.calendar,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
455 convert = cal.convert,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
456 ret;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
457
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
458 if ( !format || !format.length || format === "i" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
459 if ( culture && culture.name.length ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
460 if ( convert ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
461 // non-gregorian calendar, so we cannot use built-in toLocaleString()
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
462 ret = formatDate( value, cal.patterns.F, culture );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
463 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
464 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
465 var eraDate = new Date( value.getTime() ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
466 era = getEra( value, cal.eras );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
467 eraDate.setFullYear( getEraYear(value, cal, era) );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
468 ret = eraDate.toLocaleString();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
469 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
470 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
471 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
472 ret = value.toString();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
473 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
474 return ret;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
475 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
476
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
477 var eras = cal.eras,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
478 sortable = format === "s";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
479 format = expandFormat( cal, format );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
480
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
481 // Start with an empty string
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
482 ret = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
483 var hour,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
484 zeros = [ "0", "00", "000" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
485 foundDay,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
486 checkedDay,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
487 dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
488 quoteCount = 0,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
489 tokenRegExp = getTokenRegExp(),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
490 converted;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
491
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
492 //function padZeros( num, c ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
493 // var r, s = num + "";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
494 // if ( c > 1 && s.length < c ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
495 // r = ( zeros[c - 2] + s);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
496 // return r.substr( r.length - c, c );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
497 // }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
498 // else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
499 // r = s;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
500 // }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
501 // return r;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
502 //}
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
503
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
504 function padZeros(num, c) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
505 if (num < 0) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
506 return "-" + padZeros(-num, c);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
507 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
508 var r, s = num + "";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
509 if (c > 1 && s.length < c) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
510 r = (zeros[c - 2] + s);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
511 return r.substr(r.length - c, c);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
512 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
513 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
514 r = s;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
515 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
516 return r;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
517 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
518
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
519 function hasDay() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
520 if ( foundDay || checkedDay ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
521 return foundDay;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
522 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
523 foundDay = dayPartRegExp.test( format );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
524 checkedDay = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
525 return foundDay;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
526 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
527
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
528 function getPart( date, part ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
529 if ( converted ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
530 return converted[ part ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
531 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
532 switch ( part ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
533 case 0:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
534 return date.getFullYear();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
535 case 1:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
536 return date.getMonth();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
537 case 2:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
538 return date.getDate();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
539 default:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
540 throw "Invalid part value " + part;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
541 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
542 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
543
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
544 if ( !sortable && convert ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
545 converted = convert.fromGregorian( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
546 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
547
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
548 for ( ; ; ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
549 // Save the current index
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
550 var index = tokenRegExp.lastIndex,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
551 // Look for the next pattern
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
552 ar = tokenRegExp.exec( format );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
553
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
554 // Append the text before the pattern (or the end of the string if not found)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
555 var preMatch = format.slice( index, ar ? ar.index : format.length );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
556 quoteCount += appendPreOrPostMatch( preMatch, ret );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
557
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
558 if ( !ar ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
559 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
560 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
561
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
562 // do not replace any matches that occur inside a string literal.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
563 if ( quoteCount % 2 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
564 ret.push( ar[0] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
565 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
566 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
567
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
568 var current = ar[ 0 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
569 clength = current.length;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
570
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
571 switch ( current ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
572 case "ddd":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
573 //Day of the week, as a three-letter abbreviation
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
574 case "dddd":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
575 // Day of the week, using the full name
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
576 var names = ( clength === 3 ) ? cal.days.namesAbbr : cal.days.names;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
577 ret.push( names[value.getDay()] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
578 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
579 case "d":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
580 // Day of month, without leading zero for single-digit days
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
581 case "dd":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
582 // Day of month, with leading zero for single-digit days
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
583 foundDay = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
584 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
585 padZeros( getPart(value, 2), clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
586 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
587 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
588 case "MMM":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
589 // Month, as a three-letter abbreviation
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
590 case "MMMM":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
591 // Month, using the full name
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
592 var part = getPart( value, 1 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
593 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
594 ( cal.monthsGenitive && hasDay() ) ?
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
595 ( cal.monthsGenitive[ clength === 3 ? "namesAbbr" : "names" ][ part ] ) :
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
596 ( cal.months[ clength === 3 ? "namesAbbr" : "names" ][ part ] )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
597 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
598 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
599 case "M":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
600 // Month, as digits, with no leading zero for single-digit months
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
601 case "MM":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
602 // Month, as digits, with leading zero for single-digit months
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
603 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
604 padZeros( getPart(value, 1) + 1, clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
605 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
606 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
607 case "y":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
608 // Year, as two digits, but with no leading zero for years less than 10
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
609 case "yy":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
610 // Year, as two digits, with leading zero for years less than 10
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
611 case "yyyy":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
612 // Year represented by four full digits
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
613 part = converted ? converted[ 0 ] : getEraYear( value, cal, getEra(value, eras), sortable );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
614 if ( clength < 4 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
615 part = part % 100;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
616 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
617 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
618 padZeros( part, clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
619 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
620 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
621 case "h":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
622 // Hours with no leading zero for single-digit hours, using 12-hour clock
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
623 case "hh":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
624 // Hours with leading zero for single-digit hours, using 12-hour clock
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
625 hour = value.getHours() % 12;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
626 if ( hour === 0 ) hour = 12;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
627 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
628 padZeros( hour, clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
629 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
630 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
631 case "H":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
632 // Hours with no leading zero for single-digit hours, using 24-hour clock
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
633 case "HH":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
634 // Hours with leading zero for single-digit hours, using 24-hour clock
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
635 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
636 padZeros( value.getHours(), clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
637 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
638 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
639 case "m":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
640 // Minutes with no leading zero for single-digit minutes
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
641 case "mm":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
642 // Minutes with leading zero for single-digit minutes
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
643 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
644 padZeros( value.getMinutes(), clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
645 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
646 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
647 case "s":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
648 // Seconds with no leading zero for single-digit seconds
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
649 case "ss":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
650 // Seconds with leading zero for single-digit seconds
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
651 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
652 padZeros( value.getSeconds(), clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
653 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
654 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
655 case "t":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
656 // One character am/pm indicator ("a" or "p")
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
657 case "tt":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
658 // Multicharacter am/pm indicator
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
659 part = value.getHours() < 12 ? ( cal.AM ? cal.AM[0] : " " ) : ( cal.PM ? cal.PM[0] : " " );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
660 ret.push( clength === 1 ? part.charAt(0) : part );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
661 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
662 case "f":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
663 // Deciseconds
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
664 case "ff":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
665 // Centiseconds
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
666 case "fff":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
667 // Milliseconds
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
668 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
669 padZeros( value.getMilliseconds(), 3 ).substr( 0, clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
670 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
671 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
672 case "z":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
673 // Time zone offset, no leading zero
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
674 case "zz":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
675 // Time zone offset with leading zero
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
676 hour = value.getTimezoneOffset() / 60;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
677 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
678 ( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), clength )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
679 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
680 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
681 case "zzz":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
682 // Time zone offset with leading zero
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
683 hour = value.getTimezoneOffset() / 60;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
684 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
685 ( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), 2 ) +
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
686 // Hard coded ":" separator, rather than using cal.TimeSeparator
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
687 // Repeated here for consistency, plus ":" was already assumed in date parsing.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
688 ":" + padZeros( Math.abs(value.getTimezoneOffset() % 60), 2 )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
689 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
690 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
691 case "g":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
692 case "gg":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
693 if ( cal.eras ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
694 ret.push(
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
695 cal.eras[ getEra(value, eras) ].name
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
696 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
697 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
698 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
699 case "/":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
700 ret.push( cal["/"] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
701 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
702 default:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
703 throw "Invalid date format pattern \'" + current + "\'.";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
704 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
705 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
706 return ret.join( "" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
707 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
708
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
709 // formatNumber
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
710 (function() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
711 var expandNumber;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
712
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
713 expandNumber = function( number, precision, formatInfo ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
714 var groupSizes = formatInfo.groupSizes,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
715 curSize = groupSizes[ 0 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
716 curGroupIndex = 1,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
717 factor = Math.pow( 10, precision ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
718 rounded = Math.round( number * factor ) / factor;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
719
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
720 if ( !isFinite(rounded) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
721 rounded = number;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
722 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
723 number = rounded;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
724
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
725 var numberString = number+"",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
726 right = "",
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
727 split = numberString.split( /e/i ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
728 exponent = split.length > 1 ? parseInt( split[1], 10 ) : 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
729 numberString = split[ 0 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
730 split = numberString.split( "." );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
731 numberString = split[ 0 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
732 right = split.length > 1 ? split[ 1 ] : "";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
733
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
734 var l;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
735 if ( exponent > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
736 right = zeroPad( right, exponent, false );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
737 numberString += right.slice( 0, exponent );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
738 right = right.substr( exponent );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
739 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
740 else if ( exponent < 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
741 exponent = -exponent;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
742 numberString = zeroPad( numberString, exponent + 1, true );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
743 right = numberString.slice( -exponent, numberString.length ) + right;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
744 numberString = numberString.slice( 0, -exponent );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
745 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
746
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
747 if ( precision > 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
748 right = formatInfo[ "." ] +
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
749 ( (right.length > precision) ? right.slice(0, precision) : zeroPad(right, precision) );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
750 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
751 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
752 right = "";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
753 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
754
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
755 var stringIndex = numberString.length - 1,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
756 sep = formatInfo[ "," ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
757 ret = "";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
758
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
759 while ( stringIndex >= 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
760 if ( curSize === 0 || curSize > stringIndex ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
761 return numberString.slice( 0, stringIndex + 1 ) + ( ret.length ? (sep + ret + right) : right );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
762 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
763 ret = numberString.slice( stringIndex - curSize + 1, stringIndex + 1 ) + ( ret.length ? (sep + ret) : "" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
764
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
765 stringIndex -= curSize;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
766
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
767 if ( curGroupIndex < groupSizes.length ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
768 curSize = groupSizes[ curGroupIndex ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
769 curGroupIndex++;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
770 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
771 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
772
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
773 return numberString.slice( 0, stringIndex + 1 ) + sep + ret + right;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
774 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
775
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
776 formatNumber = function( value, format, culture ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
777 if ( !isFinite(value) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
778 if ( value === Infinity ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
779 return culture.numberFormat.positiveInfinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
780 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
781 if ( value === -Infinity ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
782 return culture.numberFormat.negativeInfinity;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
783 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
784 return culture.numberFormat.NaN;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
785 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
786 if ( !format || format === "i" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
787 return culture.name.length ? value.toLocaleString() : value.toString();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
788 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
789 format = format || "D";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
790
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
791 var nf = culture.numberFormat,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
792 number = Math.abs( value ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
793 precision = -1,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
794 pattern;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
795 if ( format.length > 1 ) precision = parseInt( format.slice(1), 10 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
796
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
797 var current = format.charAt( 0 ).toUpperCase(),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
798 formatInfo;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
799
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
800 switch ( current ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
801 case "D":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
802 pattern = "n";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
803 number = truncate( number );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
804 if ( precision !== -1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
805 number = zeroPad( "" + number, precision, true );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
806 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
807 if ( value < 0 ) number = "-" + number;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
808 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
809 case "N":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
810 formatInfo = nf;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
811 /* falls through */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
812 case "C":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
813 formatInfo = formatInfo || nf.currency;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
814 /* falls through */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
815 case "P":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
816 formatInfo = formatInfo || nf.percent;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
817 pattern = value < 0 ? formatInfo.pattern[ 0 ] : ( formatInfo.pattern[1] || "n" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
818 if ( precision === -1 ) precision = formatInfo.decimals;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
819 number = expandNumber( number * (current === "P" ? 100 : 1), precision, formatInfo );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
820 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
821 default:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
822 throw "Bad number format specifier: " + current;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
823 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
824
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
825 var patternParts = /n|\$|-|%/g,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
826 ret = "";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
827 for ( ; ; ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
828 var index = patternParts.lastIndex,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
829 ar = patternParts.exec( pattern );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
830
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
831 ret += pattern.slice( index, ar ? ar.index : pattern.length );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
832
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
833 if ( !ar ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
834 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
835 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
836
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
837 switch ( ar[0] ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
838 case "n":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
839 ret += number;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
840 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
841 case "$":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
842 ret += nf.currency.symbol;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
843 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
844 case "-":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
845 // don't make 0 negative
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
846 if ( /[1-9]/.test(number) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
847 ret += nf[ "-" ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
848 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
849 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
850 case "%":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
851 ret += nf.percent.symbol;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
852 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
853 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
854 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
855
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
856 return ret;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
857 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
858
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
859 }());
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
860
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
861 getTokenRegExp = function() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
862 // regular expression for matching date and time tokens in format strings.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
863 return (/\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g);
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
864 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
865
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
866 getEra = function( date, eras ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
867 if ( !eras ) return 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
868 var start, ticks = date.getTime();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
869 for ( var i = 0, l = eras.length; i < l; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
870 start = eras[ i ].start;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
871 if ( start === null || ticks >= start ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
872 return i;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
873 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
874 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
875 return 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
876 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
877
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
878 getEraYear = function( date, cal, era, sortable ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
879 var year = date.getFullYear();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
880 if ( !sortable && cal.eras ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
881 // convert normal gregorian year to era-shifted gregorian
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
882 // year by subtracting the era offset
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
883 year -= cal.eras[ era ].offset;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
884 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
885 return year;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
886 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
887
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
888 // parseExact
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
889 (function() {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
890 var expandYear,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
891 getDayIndex,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
892 getMonthIndex,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
893 getParseRegExp,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
894 outOfRange,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
895 toUpper,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
896 toUpperArray;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
897
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
898 expandYear = function( cal, year ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
899 // expands 2-digit year into 4 digits.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
900 if ( year < 100 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
901 var now = new Date(),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
902 era = getEra( now ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
903 curr = getEraYear( now, cal, era ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
904 twoDigitYearMax = cal.twoDigitYearMax;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
905 twoDigitYearMax = typeof twoDigitYearMax === "string" ? new Date().getFullYear() % 100 + parseInt( twoDigitYearMax, 10 ) : twoDigitYearMax;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
906 year += curr - ( curr % 100 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
907 if ( year > twoDigitYearMax ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
908 year -= 100;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
909 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
910 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
911 return year;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
912 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
913
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
914 getDayIndex = function ( cal, value, abbr ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
915 var ret,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
916 days = cal.days,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
917 upperDays = cal._upperDays;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
918 if ( !upperDays ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
919 cal._upperDays = upperDays = [
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
920 toUpperArray( days.names ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
921 toUpperArray( days.namesAbbr ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
922 toUpperArray( days.namesShort )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
923 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
924 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
925 value = toUpper( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
926 if ( abbr ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
927 ret = arrayIndexOf( upperDays[1], value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
928 if ( ret === -1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
929 ret = arrayIndexOf( upperDays[2], value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
930 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
931 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
932 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
933 ret = arrayIndexOf( upperDays[0], value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
934 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
935 return ret;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
936 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
937
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
938 getMonthIndex = function( cal, value, abbr ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
939 var months = cal.months,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
940 monthsGen = cal.monthsGenitive || cal.months,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
941 upperMonths = cal._upperMonths,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
942 upperMonthsGen = cal._upperMonthsGen;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
943 if ( !upperMonths ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
944 cal._upperMonths = upperMonths = [
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
945 toUpperArray( months.names ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
946 toUpperArray( months.namesAbbr )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
947 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
948 cal._upperMonthsGen = upperMonthsGen = [
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
949 toUpperArray( monthsGen.names ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
950 toUpperArray( monthsGen.namesAbbr )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
951 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
952 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
953 value = toUpper( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
954 var i = arrayIndexOf( abbr ? upperMonths[1] : upperMonths[0], value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
955 if ( i < 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
956 i = arrayIndexOf( abbr ? upperMonthsGen[1] : upperMonthsGen[0], value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
957 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
958 return i;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
959 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
960
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
961 getParseRegExp = function( cal, format ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
962 // converts a format string into a regular expression with groups that
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
963 // can be used to extract date fields from a date string.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
964 // check for a cached parse regex.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
965 var re = cal._parseRegExp;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
966 if ( !re ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
967 cal._parseRegExp = re = {};
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
968 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
969 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
970 var reFormat = re[ format ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
971 if ( reFormat ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
972 return reFormat;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
973 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
974 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
975
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
976 // expand single digit formats, then escape regular expression characters.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
977 var expFormat = expandFormat( cal, format ).replace( /([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1" ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
978 regexp = [ "^" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
979 groups = [],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
980 index = 0,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
981 quoteCount = 0,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
982 tokenRegExp = getTokenRegExp(),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
983 match;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
984
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
985 // iterate through each date token found.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
986 while ( (match = tokenRegExp.exec(expFormat)) !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
987 var preMatch = expFormat.slice( index, match.index );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
988 index = tokenRegExp.lastIndex;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
989
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
990 // don't replace any matches that occur inside a string literal.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
991 quoteCount += appendPreOrPostMatch( preMatch, regexp );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
992 if ( quoteCount % 2 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
993 regexp.push( match[0] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
994 continue;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
995 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
996
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
997 // add a regex group for the token.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
998 var m = match[ 0 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
999 len = m.length,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1000 add;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1001 switch ( m ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1002 case "dddd": case "ddd":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1003 case "MMMM": case "MMM":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1004 case "gg": case "g":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1005 add = "(\\D+)";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1006 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1007 case "tt": case "t":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1008 add = "(\\D*)";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1009 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1010 case "yyyy":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1011 case "fff":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1012 case "ff":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1013 case "f":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1014 add = "(\\d{" + len + "})";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1015 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1016 case "dd": case "d":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1017 case "MM": case "M":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1018 case "yy": case "y":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1019 case "HH": case "H":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1020 case "hh": case "h":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1021 case "mm": case "m":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1022 case "ss": case "s":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1023 add = "(\\d\\d?)";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1024 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1025 case "zzz":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1026 add = "([+-]?\\d\\d?:\\d{2})";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1027 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1028 case "zz": case "z":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1029 add = "([+-]?\\d\\d?)";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1030 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1031 case "/":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1032 add = "(\\/)";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1033 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1034 default:
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1035 throw "Invalid date format pattern \'" + m + "\'.";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1036 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1037 if ( add ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1038 regexp.push( add );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1039 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1040 groups.push( match[0] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1041 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1042 appendPreOrPostMatch( expFormat.slice(index), regexp );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1043 regexp.push( "$" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1044
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1045 // allow whitespace to differ when matching formats.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1046 var regexpStr = regexp.join( "" ).replace( /\s+/g, "\\s+" ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1047 parseRegExp = { "regExp": regexpStr, "groups": groups };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1048
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1049 // cache the regex for this format.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1050 return re[ format ] = parseRegExp;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1051 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1052
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1053 outOfRange = function( value, low, high ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1054 return value < low || value > high;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1055 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1056
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1057 toUpper = function( value ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1058 // "he-IL" has non-breaking space in weekday names.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1059 return value.split( "\u00A0" ).join( " " ).toUpperCase();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1060 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1061
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1062 toUpperArray = function( arr ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1063 var results = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1064 for ( var i = 0, l = arr.length; i < l; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1065 results[ i ] = toUpper( arr[i] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1066 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1067 return results;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1068 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1069
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1070 parseExact = function( value, format, culture ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1071 // try to parse the date string by matching against the format string
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1072 // while using the specified culture for date field names.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1073 value = trim( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1074 var cal = culture.calendar,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1075 // convert date formats into regular expressions with groupings.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1076 // use the regexp to determine the input format and extract the date fields.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1077 parseInfo = getParseRegExp( cal, format ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1078 match = new RegExp( parseInfo.regExp ).exec( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1079 if ( match === null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1080 return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1081 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1082 // found a date format that matches the input.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1083 var groups = parseInfo.groups,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1084 era = null, year = null, month = null, date = null, weekDay = null,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1085 hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1086 pmHour = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1087 // iterate the format groups to extract and set the date fields.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1088 for ( var j = 0, jl = groups.length; j < jl; j++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1089 var matchGroup = match[ j + 1 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1090 if ( matchGroup ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1091 var current = groups[ j ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1092 clength = current.length,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1093 matchInt = parseInt( matchGroup, 10 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1094 switch ( current ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1095 case "dd": case "d":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1096 // Day of month.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1097 date = matchInt;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1098 // check that date is generally in valid range, also checking overflow below.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1099 if ( outOfRange(date, 1, 31) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1100 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1101 case "MMM": case "MMMM":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1102 month = getMonthIndex( cal, matchGroup, clength === 3 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1103 if ( outOfRange(month, 0, 11) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1104 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1105 case "M": case "MM":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1106 // Month.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1107 month = matchInt - 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1108 if ( outOfRange(month, 0, 11) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1109 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1110 case "y": case "yy":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1111 case "yyyy":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1112 year = clength < 4 ? expandYear( cal, matchInt ) : matchInt;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1113 if ( outOfRange(year, 0, 9999) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1114 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1115 case "h": case "hh":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1116 // Hours (12-hour clock).
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1117 hour = matchInt;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1118 if ( hour === 12 ) hour = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1119 if ( outOfRange(hour, 0, 11) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1120 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1121 case "H": case "HH":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1122 // Hours (24-hour clock).
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1123 hour = matchInt;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1124 if ( outOfRange(hour, 0, 23) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1125 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1126 case "m": case "mm":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1127 // Minutes.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1128 min = matchInt;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1129 if ( outOfRange(min, 0, 59) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1130 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1131 case "s": case "ss":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1132 // Seconds.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1133 sec = matchInt;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1134 if ( outOfRange(sec, 0, 59) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1135 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1136 case "tt": case "t":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1137 // AM/PM designator.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1138 // see if it is standard, upper, or lower case PM. If not, ensure it is at least one of
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1139 // the AM tokens. If not, fail the parse for this format.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1140 pmHour = cal.PM && ( matchGroup === cal.PM[0] || matchGroup === cal.PM[1] || matchGroup === cal.PM[2] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1141 if (
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1142 !pmHour && (
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1143 !cal.AM || ( matchGroup !== cal.AM[0] && matchGroup !== cal.AM[1] && matchGroup !== cal.AM[2] )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1144 )
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1145 ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1146 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1147 case "f":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1148 // Deciseconds.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1149 case "ff":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1150 // Centiseconds.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1151 case "fff":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1152 // Milliseconds.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1153 msec = matchInt * Math.pow( 10, 3 - clength );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1154 if ( outOfRange(msec, 0, 999) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1155 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1156 case "ddd":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1157 // Day of week.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1158 case "dddd":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1159 // Day of week.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1160 weekDay = getDayIndex( cal, matchGroup, clength === 3 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1161 if ( outOfRange(weekDay, 0, 6) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1162 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1163 case "zzz":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1164 // Time zone offset in +/- hours:min.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1165 var offsets = matchGroup.split( /:/ );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1166 if ( offsets.length !== 2 ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1167 hourOffset = parseInt( offsets[0], 10 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1168 if ( outOfRange(hourOffset, -12, 13) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1169 var minOffset = parseInt( offsets[1], 10 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1170 if ( outOfRange(minOffset, 0, 59) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1171 tzMinOffset = ( hourOffset * 60 ) + ( startsWith(matchGroup, "-") ? -minOffset : minOffset );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1172 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1173 case "z": case "zz":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1174 // Time zone offset in +/- hours.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1175 hourOffset = matchInt;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1176 if ( outOfRange(hourOffset, -12, 13) ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1177 tzMinOffset = hourOffset * 60;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1178 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1179 case "g": case "gg":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1180 var eraName = matchGroup;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1181 if ( !eraName || !cal.eras ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1182 eraName = trim( eraName.toLowerCase() );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1183 for ( var i = 0, l = cal.eras.length; i < l; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1184 if ( eraName === cal.eras[i].name.toLowerCase() ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1185 era = i;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1186 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1187 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1188 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1189 // could not find an era with that name
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1190 if ( era === null ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1191 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1192 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1193 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1194 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1195 var result = new Date(), defaultYear, convert = cal.convert;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1196 defaultYear = convert ? convert.fromGregorian( result )[ 0 ] : result.getFullYear();
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1197 if ( year === null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1198 year = defaultYear;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1199 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1200 else if ( cal.eras ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1201 // year must be shifted to normal gregorian year
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1202 // but not if year was not specified, its already normal gregorian
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1203 // per the main if clause above.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1204 year += cal.eras[( era || 0 )].offset;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1205 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1206 // set default day and month to 1 and January, so if unspecified, these are the defaults
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1207 // instead of the current day/month.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1208 if ( month === null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1209 month = 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1210 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1211 if ( date === null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1212 date = 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1213 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1214 // now have year, month, and date, but in the culture's calendar.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1215 // convert to gregorian if necessary
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1216 if ( convert ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1217 result = convert.toGregorian( year, month, date );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1218 // conversion failed, must be an invalid match
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1219 if ( result === null ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1220 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1221 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1222 // have to set year, month and date together to avoid overflow based on current date.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1223 result.setFullYear( year, month, date );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1224 // check to see if date overflowed for specified month (only checked 1-31 above).
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1225 if ( result.getDate() !== date ) return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1226 // invalid day of week.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1227 if ( weekDay !== null && result.getDay() !== weekDay ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1228 return null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1229 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1230 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1231 // if pm designator token was found make sure the hours fit the 24-hour clock.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1232 if ( pmHour && hour < 12 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1233 hour += 12;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1234 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1235 result.setHours( hour, min, sec, msec );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1236 if ( tzMinOffset !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1237 // adjust timezone to utc before applying local offset.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1238 var adjustedMin = result.getMinutes() - ( tzMinOffset + result.getTimezoneOffset() );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1239 // Safari limits hours and minutes to the range of -127 to 127. We need to use setHours
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1240 // to ensure both these fields will not exceed this range. adjustedMin will range
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1241 // somewhere between -1440 and 1500, so we only need to split this into hours.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1242 result.setHours( result.getHours() + parseInt(adjustedMin / 60, 10), adjustedMin % 60 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1243 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1244 return result;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1245 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1246 }());
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1247
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1248 parseNegativePattern = function( value, nf, negativePattern ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1249 var neg = nf[ "-" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1250 pos = nf[ "+" ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1251 ret;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1252 switch ( negativePattern ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1253 case "n -":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1254 neg = " " + neg;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1255 pos = " " + pos;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1256 /* falls through */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1257 case "n-":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1258 if ( endsWith(value, neg) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1259 ret = [ "-", value.substr(0, value.length - neg.length) ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1260 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1261 else if ( endsWith(value, pos) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1262 ret = [ "+", value.substr(0, value.length - pos.length) ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1263 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1264 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1265 case "- n":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1266 neg += " ";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1267 pos += " ";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1268 /* falls through */
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1269 case "-n":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1270 if ( startsWith(value, neg) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1271 ret = [ "-", value.substr(neg.length) ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1272 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1273 else if ( startsWith(value, pos) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1274 ret = [ "+", value.substr(pos.length) ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1275 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1276 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1277 case "(n)":
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1278 if ( startsWith(value, "(") && endsWith(value, ")") ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1279 ret = [ "-", value.substr(1, value.length - 2) ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1280 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1281 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1282 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1283 return ret || [ "", value ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1284 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1285
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1286 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1287 // public instance functions
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1288 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1289
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1290 Globalize.prototype.findClosestCulture = function( cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1291 return Globalize.findClosestCulture.call( this, cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1292 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1293
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1294 Globalize.prototype.format = function( value, format, cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1295 return Globalize.format.call( this, value, format, cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1296 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1297
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1298 Globalize.prototype.localize = function( key, cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1299 return Globalize.localize.call( this, key, cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1300 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1301
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1302 Globalize.prototype.parseInt = function( value, radix, cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1303 return Globalize.parseInt.call( this, value, radix, cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1304 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1305
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1306 Globalize.prototype.parseFloat = function( value, radix, cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1307 return Globalize.parseFloat.call( this, value, radix, cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1308 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1309
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1310 Globalize.prototype.culture = function( cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1311 return Globalize.culture.call( this, cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1312 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1313
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1314 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1315 // public singleton functions
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1316 //
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1317
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1318 Globalize.addCultureInfo = function( cultureName, baseCultureName, info ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1319
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1320 var base = {},
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1321 isNew = false;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1322
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1323 if ( typeof cultureName !== "string" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1324 // cultureName argument is optional string. If not specified, assume info is first
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1325 // and only argument. Specified info deep-extends current culture.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1326 info = cultureName;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1327 cultureName = this.culture().name;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1328 base = this.cultures[ cultureName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1329 } else if ( typeof baseCultureName !== "string" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1330 // baseCultureName argument is optional string. If not specified, assume info is second
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1331 // argument. Specified info deep-extends specified culture.
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1332 // If specified culture does not exist, create by deep-extending default
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1333 info = baseCultureName;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1334 isNew = ( this.cultures[ cultureName ] == null );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1335 base = this.cultures[ cultureName ] || this.cultures[ "default" ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1336 } else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1337 // cultureName and baseCultureName specified. Assume a new culture is being created
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1338 // by deep-extending an specified base culture
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1339 isNew = true;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1340 base = this.cultures[ baseCultureName ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1341 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1342
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1343 this.cultures[ cultureName ] = extend(true, {},
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1344 base,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1345 info
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1346 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1347 // Make the standard calendar the current culture if it's a new culture
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1348 if ( isNew ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1349 this.cultures[ cultureName ].calendar = this.cultures[ cultureName ].calendars.standard;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1350 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1351 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1352
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1353 Globalize.findClosestCulture = function( name ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1354 var match;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1355 if ( !name ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1356 return this.findClosestCulture( this.cultureSelector ) || this.cultures[ "default" ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1357 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1358 if ( typeof name === "string" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1359 name = name.split( "," );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1360 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1361 if ( isArray(name) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1362 var lang,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1363 cultures = this.cultures,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1364 list = name,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1365 i, l = list.length,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1366 prioritized = [];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1367 for ( i = 0; i < l; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1368 name = trim( list[i] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1369 var pri, parts = name.split( ";" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1370 lang = trim( parts[0] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1371 if ( parts.length === 1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1372 pri = 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1373 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1374 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1375 name = trim( parts[1] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1376 if ( name.indexOf("q=") === 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1377 name = name.substr( 2 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1378 pri = parseFloat( name );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1379 pri = isNaN( pri ) ? 0 : pri;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1380 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1381 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1382 pri = 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1383 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1384 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1385 prioritized.push({ lang: lang, pri: pri });
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1386 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1387 prioritized.sort(function( a, b ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1388 if ( a.pri < b.pri ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1389 return 1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1390 } else if ( a.pri > b.pri ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1391 return -1;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1392 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1393 return 0;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1394 });
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1395 // exact match
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1396 for ( i = 0; i < l; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1397 lang = prioritized[ i ].lang;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1398 match = cultures[ lang ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1399 if ( match ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1400 return match;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1401 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1402 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1403
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1404 // neutral language match
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1405 for ( i = 0; i < l; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1406 lang = prioritized[ i ].lang;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1407 do {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1408 var index = lang.lastIndexOf( "-" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1409 if ( index === -1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1410 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1411 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1412 // strip off the last part. e.g. en-US => en
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1413 lang = lang.substr( 0, index );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1414 match = cultures[ lang ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1415 if ( match ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1416 return match;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1417 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1418 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1419 while ( 1 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1420 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1421
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1422 // last resort: match first culture using that language
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1423 for ( i = 0; i < l; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1424 lang = prioritized[ i ].lang;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1425 for ( var cultureKey in cultures ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1426 var culture = cultures[ cultureKey ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1427 if ( culture.language == lang ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1428 return culture;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1429 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1430 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1431 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1432 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1433 else if ( typeof name === "object" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1434 return name;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1435 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1436 return match || null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1437 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1438
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1439 Globalize.format = function( value, format, cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1440 var culture = this.findClosestCulture( cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1441 if ( value instanceof Date ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1442 value = formatDate( value, format, culture );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1443 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1444 else if ( typeof value === "number" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1445 value = formatNumber( value, format, culture );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1446 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1447 return value;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1448 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1449
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1450 Globalize.localize = function( key, cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1451 return this.findClosestCulture( cultureSelector ).messages[ key ] ||
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1452 this.cultures[ "default" ].messages[ key ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1453 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1454
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1455 Globalize.parseDate = function( value, formats, culture ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1456 culture = this.findClosestCulture( culture );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1457
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1458 var date, prop, patterns;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1459 if ( formats ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1460 if ( typeof formats === "string" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1461 formats = [ formats ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1462 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1463 if ( formats.length ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1464 for ( var i = 0, l = formats.length; i < l; i++ ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1465 var format = formats[ i ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1466 if ( format ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1467 date = parseExact( value, format, culture );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1468 if ( date ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1469 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1470 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1471 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1472 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1473 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1474 } else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1475 patterns = culture.calendar.patterns;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1476 for ( prop in patterns ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1477 date = parseExact( value, patterns[prop], culture );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1478 if ( date ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1479 break;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1480 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1481 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1482 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1483
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1484 return date || null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1485 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1486
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1487 Globalize.parseInt = function( value, radix, cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1488 return truncate( Globalize.parseFloat(value, radix, cultureSelector) );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1489 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1490
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1491 Globalize.parseFloat = function( value, radix, cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1492 // radix argument is optional
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1493 if ( typeof radix !== "number" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1494 cultureSelector = radix;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1495 radix = 10;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1496 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1497
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1498 var culture = this.findClosestCulture( cultureSelector );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1499 var ret = NaN,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1500 nf = culture.numberFormat;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1501
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1502 if ( value.indexOf(culture.numberFormat.currency.symbol) > -1 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1503 // remove currency symbol
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1504 value = value.replace( culture.numberFormat.currency.symbol, "" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1505 // replace decimal seperator
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1506 value = value.replace( culture.numberFormat.currency["."], culture.numberFormat["."] );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1507 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1508
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1509 //Remove percentage character from number string before parsing
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1510 if ( value.indexOf(culture.numberFormat.percent.symbol) > -1){
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1511 value = value.replace( culture.numberFormat.percent.symbol, "" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1512 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1513
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1514 // remove spaces: leading, trailing and between - and number. Used for negative currency pt-BR
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1515 value = value.replace( / /g, "" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1516
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1517 // allow infinity or hexidecimal
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1518 if ( regexInfinity.test(value) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1519 ret = parseFloat( value );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1520 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1521 else if ( !radix && regexHex.test(value) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1522 ret = parseInt( value, 16 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1523 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1524 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1525
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1526 // determine sign and number
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1527 var signInfo = parseNegativePattern( value, nf, nf.pattern[0] ),
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1528 sign = signInfo[ 0 ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1529 num = signInfo[ 1 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1530
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1531 // #44 - try parsing as "(n)"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1532 if ( sign === "" && nf.pattern[0] !== "(n)" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1533 signInfo = parseNegativePattern( value, nf, "(n)" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1534 sign = signInfo[ 0 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1535 num = signInfo[ 1 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1536 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1537
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1538 // try parsing as "-n"
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1539 if ( sign === "" && nf.pattern[0] !== "-n" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1540 signInfo = parseNegativePattern( value, nf, "-n" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1541 sign = signInfo[ 0 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1542 num = signInfo[ 1 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1543 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1544
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1545 sign = sign || "+";
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1546
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1547 // determine exponent and number
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1548 var exponent,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1549 intAndFraction,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1550 exponentPos = num.indexOf( "e" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1551 if ( exponentPos < 0 ) exponentPos = num.indexOf( "E" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1552 if ( exponentPos < 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1553 intAndFraction = num;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1554 exponent = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1555 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1556 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1557 intAndFraction = num.substr( 0, exponentPos );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1558 exponent = num.substr( exponentPos + 1 );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1559 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1560 // determine decimal position
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1561 var integer,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1562 fraction,
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1563 decSep = nf[ "." ],
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1564 decimalPos = intAndFraction.indexOf( decSep );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1565 if ( decimalPos < 0 ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1566 integer = intAndFraction;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1567 fraction = null;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1568 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1569 else {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1570 integer = intAndFraction.substr( 0, decimalPos );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1571 fraction = intAndFraction.substr( decimalPos + decSep.length );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1572 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1573 // handle groups (e.g. 1,000,000)
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1574 var groupSep = nf[ "," ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1575 integer = integer.split( groupSep ).join( "" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1576 var altGroupSep = groupSep.replace( /\u00A0/g, " " );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1577 if ( groupSep !== altGroupSep ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1578 integer = integer.split( altGroupSep ).join( "" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1579 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1580 // build a natively parsable number string
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1581 var p = sign + integer;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1582 if ( fraction !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1583 p += "." + fraction;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1584 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1585 if ( exponent !== null ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1586 // exponent itself may have a number patternd
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1587 var expSignInfo = parseNegativePattern( exponent, nf, "-n" );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1588 p += "e" + ( expSignInfo[0] || "+" ) + expSignInfo[ 1 ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1589 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1590 if ( regexParseFloat.test(p) ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1591 ret = parseFloat( p );
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1592 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1593 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1594 return ret;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1595 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1596
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1597 Globalize.culture = function( cultureSelector ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1598 // setter
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1599 if ( typeof cultureSelector !== "undefined" ) {
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1600 this.cultureSelector = cultureSelector;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1601 }
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1602 // getter
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1603 return this.findClosestCulture( cultureSelector ) || this.cultures[ "default" ];
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1604 };
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1605
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1606 document.Globalize = Globalize;
b216f9d4b917 Upgraded jqwidgets
Michiel Broek <mbroek@mbse.eu>
parents: 511
diff changeset
1607 }(this));

mercurial