datejs-rails 1.1.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/README.md +9 -6
- data/Rakefile +21 -0
- data/app/assets/javascripts/date.js +8 -0
- data/changelog.md +4 -0
- data/datejs-rails.gemspec +13 -0
- data/vendor/assets/javascripts/date/af-ZA.js +195 -0
- data/vendor/assets/javascripts/date/ar-AE.js +195 -0
- data/vendor/assets/javascripts/date/ar-BH.js +195 -0
- data/vendor/assets/javascripts/date/ar-DZ.js +195 -0
- data/vendor/assets/javascripts/date/ar-EG.js +195 -0
- data/vendor/assets/javascripts/date/ar-IQ.js +195 -0
- data/vendor/assets/javascripts/date/ar-JO.js +195 -0
- data/vendor/assets/javascripts/date/ar-KW.js +195 -0
- data/vendor/assets/javascripts/date/ar-LB.js +195 -0
- data/vendor/assets/javascripts/date/ar-LY.js +195 -0
- data/vendor/assets/javascripts/date/ar-MA.js +195 -0
- data/vendor/assets/javascripts/date/ar-OM.js +195 -0
- data/vendor/assets/javascripts/date/ar-QA.js +195 -0
- data/vendor/assets/javascripts/date/ar-SA.js +195 -0
- data/vendor/assets/javascripts/date/ar-SY.js +195 -0
- data/vendor/assets/javascripts/date/ar-TN.js +195 -0
- data/vendor/assets/javascripts/date/ar-YE.js +195 -0
- data/vendor/assets/javascripts/date/az-Cyrl-AZ.js +195 -0
- data/vendor/assets/javascripts/date/az-Latn-AZ.js +195 -0
- data/vendor/assets/javascripts/date/be-BY.js +195 -0
- data/vendor/assets/javascripts/date/bg-BG.js +195 -0
- data/vendor/assets/javascripts/date/bs-Latn-BA.js +195 -0
- data/vendor/assets/javascripts/date/ca-ES.js +195 -0
- data/vendor/assets/javascripts/date/core.js +871 -0
- data/vendor/assets/javascripts/date/cs-CZ.js +195 -0
- data/vendor/assets/javascripts/date/cy-GB.js +195 -0
- data/vendor/assets/javascripts/date/da-DK.js +195 -0
- data/vendor/assets/javascripts/date/date.js +21 -0
- data/vendor/assets/javascripts/date/de-AT.js +195 -0
- data/vendor/assets/javascripts/date/de-CH.js +195 -0
- data/vendor/assets/javascripts/date/de-DE.js +195 -0
- data/vendor/assets/javascripts/date/de-LI.js +195 -0
- data/vendor/assets/javascripts/date/de-LU.js +195 -0
- data/vendor/assets/javascripts/date/dv-MV.js +195 -0
- data/vendor/assets/javascripts/date/el-GR.js +195 -0
- data/vendor/assets/javascripts/date/en-029.js +195 -0
- data/vendor/assets/javascripts/date/en-AU.js +195 -0
- data/vendor/assets/javascripts/date/en-BZ.js +195 -0
- data/vendor/assets/javascripts/date/en-CA.js +195 -0
- data/vendor/assets/javascripts/date/en-GB.js +195 -0
- data/vendor/assets/javascripts/date/en-IE.js +195 -0
- data/vendor/assets/javascripts/date/en-JM.js +195 -0
- data/vendor/assets/javascripts/date/en-NZ.js +195 -0
- data/vendor/assets/javascripts/date/en-PH.js +195 -0
- data/vendor/assets/javascripts/date/en-TT.js +195 -0
- data/vendor/assets/javascripts/date/en-US.js +195 -0
- data/vendor/assets/javascripts/date/en-ZA.js +195 -0
- data/vendor/assets/javascripts/date/en-ZW.js +195 -0
- data/vendor/assets/javascripts/date/es-AR.js +195 -0
- data/vendor/assets/javascripts/date/es-BO.js +195 -0
- data/vendor/assets/javascripts/date/es-CL.js +195 -0
- data/vendor/assets/javascripts/date/es-CO.js +195 -0
- data/vendor/assets/javascripts/date/es-CR.js +195 -0
- data/vendor/assets/javascripts/date/es-DO.js +195 -0
- data/vendor/assets/javascripts/date/es-EC.js +195 -0
- data/vendor/assets/javascripts/date/es-ES.js +195 -0
- data/vendor/assets/javascripts/date/es-GT.js +195 -0
- data/vendor/assets/javascripts/date/es-HN.js +195 -0
- data/vendor/assets/javascripts/date/es-MX.js +195 -0
- data/vendor/assets/javascripts/date/es-NI.js +195 -0
- data/vendor/assets/javascripts/date/es-PA.js +195 -0
- data/vendor/assets/javascripts/date/es-PE.js +195 -0
- data/vendor/assets/javascripts/date/es-PR.js +195 -0
- data/vendor/assets/javascripts/date/es-PY.js +195 -0
- data/vendor/assets/javascripts/date/es-SV.js +195 -0
- data/vendor/assets/javascripts/date/es-UY.js +195 -0
- data/vendor/assets/javascripts/date/es-VE.js +195 -0
- data/vendor/assets/javascripts/date/et-EE.js +195 -0
- data/vendor/assets/javascripts/date/eu-ES.js +195 -0
- data/vendor/assets/javascripts/{datejs-extras.js → date/extras.js} +1 -1
- data/vendor/assets/javascripts/date/fa-IR.js +195 -0
- data/vendor/assets/javascripts/date/fi-FI.js +195 -0
- data/vendor/assets/javascripts/date/fo-FO.js +195 -0
- data/vendor/assets/javascripts/date/fr-BE.js +195 -0
- data/vendor/assets/javascripts/date/fr-CA.js +195 -0
- data/vendor/assets/javascripts/date/fr-CH.js +195 -0
- data/vendor/assets/javascripts/date/fr-FR.js +195 -0
- data/vendor/assets/javascripts/date/fr-LU.js +195 -0
- data/vendor/assets/javascripts/date/fr-MC.js +195 -0
- data/vendor/assets/javascripts/date/gl-ES.js +195 -0
- data/vendor/assets/javascripts/date/gu-IN.js +195 -0
- data/vendor/assets/javascripts/date/he-IL.js +195 -0
- data/vendor/assets/javascripts/date/hi-IN.js +195 -0
- data/vendor/assets/javascripts/date/hr-BA.js +195 -0
- data/vendor/assets/javascripts/date/hr-HR.js +195 -0
- data/vendor/assets/javascripts/date/hu-HU.js +195 -0
- data/vendor/assets/javascripts/date/hy-AM.js +195 -0
- data/vendor/assets/javascripts/date/id-ID.js +195 -0
- data/vendor/assets/javascripts/date/is-IS.js +195 -0
- data/vendor/assets/javascripts/date/it-CH.js +195 -0
- data/vendor/assets/javascripts/date/it-IT.js +195 -0
- data/vendor/assets/javascripts/date/ja-JP.js +195 -0
- data/vendor/assets/javascripts/date/ka-GE.js +195 -0
- data/vendor/assets/javascripts/date/kk-KZ.js +195 -0
- data/vendor/assets/javascripts/date/kn-IN.js +195 -0
- data/vendor/assets/javascripts/date/ko-KR.js +195 -0
- data/vendor/assets/javascripts/date/kok-IN.js +195 -0
- data/vendor/assets/javascripts/date/ky-KG.js +195 -0
- data/vendor/assets/javascripts/date/lt-LT.js +195 -0
- data/vendor/assets/javascripts/date/lv-LV.js +195 -0
- data/vendor/assets/javascripts/date/mi-NZ.js +195 -0
- data/vendor/assets/javascripts/date/mk-MK.js +195 -0
- data/vendor/assets/javascripts/date/mn-MN.js +195 -0
- data/vendor/assets/javascripts/date/mr-IN.js +195 -0
- data/vendor/assets/javascripts/date/ms-BN.js +195 -0
- data/vendor/assets/javascripts/date/ms-MY.js +195 -0
- data/vendor/assets/javascripts/date/mt-MT.js +195 -0
- data/vendor/assets/javascripts/date/nb-NO.js +195 -0
- data/vendor/assets/javascripts/date/nl-BE.js +195 -0
- data/vendor/assets/javascripts/date/nl-NL.js +195 -0
- data/vendor/assets/javascripts/date/nn-NO.js +195 -0
- data/vendor/assets/javascripts/date/ns-ZA.js +195 -0
- data/vendor/assets/javascripts/date/pa-IN.js +195 -0
- data/vendor/assets/javascripts/date/parser.js +1170 -0
- data/vendor/assets/javascripts/date/pl-PL.js +195 -0
- data/vendor/assets/javascripts/date/pt-BR.js +195 -0
- data/vendor/assets/javascripts/date/pt-PT.js +195 -0
- data/vendor/assets/javascripts/date/quz-BO.js +195 -0
- data/vendor/assets/javascripts/date/quz-EC.js +195 -0
- data/vendor/assets/javascripts/date/quz-PE.js +195 -0
- data/vendor/assets/javascripts/date/ro-RO.js +195 -0
- data/vendor/assets/javascripts/date/ru-RU.js +195 -0
- data/vendor/assets/javascripts/date/sa-IN.js +195 -0
- data/vendor/assets/javascripts/date/se-FI.js +195 -0
- data/vendor/assets/javascripts/date/se-NO.js +195 -0
- data/vendor/assets/javascripts/date/se-SE.js +195 -0
- data/vendor/assets/javascripts/date/sk-SK.js +195 -0
- data/vendor/assets/javascripts/date/sl-SI.js +195 -0
- data/vendor/assets/javascripts/date/sma-NO.js +195 -0
- data/vendor/assets/javascripts/date/sma-SE.js +195 -0
- data/vendor/assets/javascripts/date/smj-NO.js +195 -0
- data/vendor/assets/javascripts/date/smj-SE.js +195 -0
- data/vendor/assets/javascripts/date/smn-FI.js +195 -0
- data/vendor/assets/javascripts/date/sms-FI.js +195 -0
- data/vendor/assets/javascripts/date/sq-AL.js +195 -0
- data/vendor/assets/javascripts/date/sr-Cyrl-BA.js +195 -0
- data/vendor/assets/javascripts/date/sr-Cyrl-CS.js +195 -0
- data/vendor/assets/javascripts/date/sr-Latn-BA.js +195 -0
- data/vendor/assets/javascripts/date/sr-Latn-CS.js +195 -0
- data/vendor/assets/javascripts/date/sugarpak.js +476 -0
- data/vendor/assets/javascripts/date/sv-FI.js +195 -0
- data/vendor/assets/javascripts/date/sv-SE.js +195 -0
- data/vendor/assets/javascripts/date/sw-KE.js +195 -0
- data/vendor/assets/javascripts/date/syr-SY.js +195 -0
- data/vendor/assets/javascripts/date/ta-IN.js +195 -0
- data/vendor/assets/javascripts/date/te-IN.js +195 -0
- data/vendor/assets/javascripts/date/th-TH.js +195 -0
- data/vendor/assets/javascripts/date/time.js +269 -0
- data/vendor/assets/javascripts/date/tn-ZA.js +195 -0
- data/vendor/assets/javascripts/date/tr-TR.js +195 -0
- data/vendor/assets/javascripts/date/tt-RU.js +195 -0
- data/vendor/assets/javascripts/date/uk-UA.js +195 -0
- data/vendor/assets/javascripts/date/ur-PK.js +195 -0
- data/vendor/assets/javascripts/date/uz-Cyrl-UZ.js +195 -0
- data/vendor/assets/javascripts/date/uz-Latn-UZ.js +195 -0
- data/vendor/assets/javascripts/date/vi-VN.js +195 -0
- data/vendor/assets/javascripts/date/xh-ZA.js +195 -0
- data/vendor/assets/javascripts/date/zh-CN.js +195 -0
- data/vendor/assets/javascripts/date/zh-HK.js +195 -0
- data/vendor/assets/javascripts/date/zh-MO.js +195 -0
- data/vendor/assets/javascripts/date/zh-SG.js +195 -0
- data/vendor/assets/javascripts/date/zh-TW.js +195 -0
- data/vendor/assets/javascripts/date/zu-ZA.js +195 -0
- metadata +221 -188
- data/vendor/assets/javascripts/date-af-ZA.js +0 -104
- data/vendor/assets/javascripts/date-ar-AE.js +0 -104
- data/vendor/assets/javascripts/date-ar-BH.js +0 -104
- data/vendor/assets/javascripts/date-ar-DZ.js +0 -104
- data/vendor/assets/javascripts/date-ar-EG.js +0 -104
- data/vendor/assets/javascripts/date-ar-IQ.js +0 -104
- data/vendor/assets/javascripts/date-ar-JO.js +0 -104
- data/vendor/assets/javascripts/date-ar-KW.js +0 -104
- data/vendor/assets/javascripts/date-ar-LB.js +0 -104
- data/vendor/assets/javascripts/date-ar-LY.js +0 -104
- data/vendor/assets/javascripts/date-ar-MA.js +0 -104
- data/vendor/assets/javascripts/date-ar-OM.js +0 -104
- data/vendor/assets/javascripts/date-ar-QA.js +0 -104
- data/vendor/assets/javascripts/date-ar-SA.js +0 -104
- data/vendor/assets/javascripts/date-ar-SY.js +0 -104
- data/vendor/assets/javascripts/date-ar-TN.js +0 -104
- data/vendor/assets/javascripts/date-ar-YE.js +0 -104
- data/vendor/assets/javascripts/date-az-Cyrl-AZ.js +0 -104
- data/vendor/assets/javascripts/date-az-Latn-AZ.js +0 -104
- data/vendor/assets/javascripts/date-be-BY.js +0 -104
- data/vendor/assets/javascripts/date-bg-BG.js +0 -104
- data/vendor/assets/javascripts/date-bs-Latn-BA.js +0 -104
- data/vendor/assets/javascripts/date-ca-ES.js +0 -104
- data/vendor/assets/javascripts/date-cs-CZ.js +0 -104
- data/vendor/assets/javascripts/date-cy-GB.js +0 -104
- data/vendor/assets/javascripts/date-da-DK.js +0 -104
- data/vendor/assets/javascripts/date-de-AT.js +0 -104
- data/vendor/assets/javascripts/date-de-CH.js +0 -104
- data/vendor/assets/javascripts/date-de-DE.js +0 -104
- data/vendor/assets/javascripts/date-de-LI.js +0 -104
- data/vendor/assets/javascripts/date-de-LU.js +0 -104
- data/vendor/assets/javascripts/date-dv-MV.js +0 -104
- data/vendor/assets/javascripts/date-el-GR.js +0 -104
- data/vendor/assets/javascripts/date-en-029.js +0 -104
- data/vendor/assets/javascripts/date-en-AU.js +0 -104
- data/vendor/assets/javascripts/date-en-BZ.js +0 -104
- data/vendor/assets/javascripts/date-en-CA.js +0 -104
- data/vendor/assets/javascripts/date-en-GB.js +0 -104
- data/vendor/assets/javascripts/date-en-IE.js +0 -104
- data/vendor/assets/javascripts/date-en-JM.js +0 -104
- data/vendor/assets/javascripts/date-en-NZ.js +0 -104
- data/vendor/assets/javascripts/date-en-PH.js +0 -104
- data/vendor/assets/javascripts/date-en-TT.js +0 -104
- data/vendor/assets/javascripts/date-en-US.js +0 -104
- data/vendor/assets/javascripts/date-en-ZA.js +0 -104
- data/vendor/assets/javascripts/date-en-ZW.js +0 -104
- data/vendor/assets/javascripts/date-es-AR.js +0 -104
- data/vendor/assets/javascripts/date-es-BO.js +0 -104
- data/vendor/assets/javascripts/date-es-CL.js +0 -104
- data/vendor/assets/javascripts/date-es-CO.js +0 -104
- data/vendor/assets/javascripts/date-es-CR.js +0 -104
- data/vendor/assets/javascripts/date-es-DO.js +0 -104
- data/vendor/assets/javascripts/date-es-EC.js +0 -104
- data/vendor/assets/javascripts/date-es-ES.js +0 -104
- data/vendor/assets/javascripts/date-es-GT.js +0 -104
- data/vendor/assets/javascripts/date-es-HN.js +0 -104
- data/vendor/assets/javascripts/date-es-MX.js +0 -104
- data/vendor/assets/javascripts/date-es-NI.js +0 -104
- data/vendor/assets/javascripts/date-es-PA.js +0 -104
- data/vendor/assets/javascripts/date-es-PE.js +0 -104
- data/vendor/assets/javascripts/date-es-PR.js +0 -104
- data/vendor/assets/javascripts/date-es-PY.js +0 -104
- data/vendor/assets/javascripts/date-es-SV.js +0 -104
- data/vendor/assets/javascripts/date-es-UY.js +0 -104
- data/vendor/assets/javascripts/date-es-VE.js +0 -104
- data/vendor/assets/javascripts/date-et-EE.js +0 -104
- data/vendor/assets/javascripts/date-eu-ES.js +0 -104
- data/vendor/assets/javascripts/date-fa-IR.js +0 -104
- data/vendor/assets/javascripts/date-fi-FI.js +0 -104
- data/vendor/assets/javascripts/date-fo-FO.js +0 -104
- data/vendor/assets/javascripts/date-fr-BE.js +0 -104
- data/vendor/assets/javascripts/date-fr-CA.js +0 -104
- data/vendor/assets/javascripts/date-fr-CH.js +0 -104
- data/vendor/assets/javascripts/date-fr-FR.js +0 -104
- data/vendor/assets/javascripts/date-fr-LU.js +0 -104
- data/vendor/assets/javascripts/date-fr-MC.js +0 -104
- data/vendor/assets/javascripts/date-gl-ES.js +0 -104
- data/vendor/assets/javascripts/date-gu-IN.js +0 -104
- data/vendor/assets/javascripts/date-he-IL.js +0 -104
- data/vendor/assets/javascripts/date-hi-IN.js +0 -104
- data/vendor/assets/javascripts/date-hr-BA.js +0 -104
- data/vendor/assets/javascripts/date-hr-HR.js +0 -104
- data/vendor/assets/javascripts/date-hu-HU.js +0 -104
- data/vendor/assets/javascripts/date-hy-AM.js +0 -104
- data/vendor/assets/javascripts/date-id-ID.js +0 -104
- data/vendor/assets/javascripts/date-is-IS.js +0 -104
- data/vendor/assets/javascripts/date-it-CH.js +0 -104
- data/vendor/assets/javascripts/date-it-IT.js +0 -104
- data/vendor/assets/javascripts/date-ja-JP.js +0 -104
- data/vendor/assets/javascripts/date-ka-GE.js +0 -104
- data/vendor/assets/javascripts/date-kk-KZ.js +0 -104
- data/vendor/assets/javascripts/date-kn-IN.js +0 -104
- data/vendor/assets/javascripts/date-ko-KR.js +0 -104
- data/vendor/assets/javascripts/date-kok-IN.js +0 -104
- data/vendor/assets/javascripts/date-ky-KG.js +0 -104
- data/vendor/assets/javascripts/date-lt-LT.js +0 -104
- data/vendor/assets/javascripts/date-lv-LV.js +0 -104
- data/vendor/assets/javascripts/date-mi-NZ.js +0 -104
- data/vendor/assets/javascripts/date-mk-MK.js +0 -104
- data/vendor/assets/javascripts/date-mn-MN.js +0 -104
- data/vendor/assets/javascripts/date-mr-IN.js +0 -104
- data/vendor/assets/javascripts/date-ms-BN.js +0 -104
- data/vendor/assets/javascripts/date-ms-MY.js +0 -104
- data/vendor/assets/javascripts/date-mt-MT.js +0 -104
- data/vendor/assets/javascripts/date-nb-NO.js +0 -104
- data/vendor/assets/javascripts/date-nl-BE.js +0 -104
- data/vendor/assets/javascripts/date-nl-NL.js +0 -104
- data/vendor/assets/javascripts/date-nn-NO.js +0 -104
- data/vendor/assets/javascripts/date-ns-ZA.js +0 -104
- data/vendor/assets/javascripts/date-pa-IN.js +0 -104
- data/vendor/assets/javascripts/date-pl-PL.js +0 -104
- data/vendor/assets/javascripts/date-pt-BR.js +0 -104
- data/vendor/assets/javascripts/date-pt-PT.js +0 -104
- data/vendor/assets/javascripts/date-quz-BO.js +0 -104
- data/vendor/assets/javascripts/date-quz-EC.js +0 -104
- data/vendor/assets/javascripts/date-quz-PE.js +0 -104
- data/vendor/assets/javascripts/date-ro-RO.js +0 -104
- data/vendor/assets/javascripts/date-ru-RU.js +0 -104
- data/vendor/assets/javascripts/date-sa-IN.js +0 -104
- data/vendor/assets/javascripts/date-se-FI.js +0 -104
- data/vendor/assets/javascripts/date-se-NO.js +0 -104
- data/vendor/assets/javascripts/date-se-SE.js +0 -104
- data/vendor/assets/javascripts/date-sk-SK.js +0 -104
- data/vendor/assets/javascripts/date-sl-SI.js +0 -104
- data/vendor/assets/javascripts/date-sma-NO.js +0 -104
- data/vendor/assets/javascripts/date-sma-SE.js +0 -104
- data/vendor/assets/javascripts/date-smj-NO.js +0 -104
- data/vendor/assets/javascripts/date-smj-SE.js +0 -104
- data/vendor/assets/javascripts/date-smn-FI.js +0 -104
- data/vendor/assets/javascripts/date-sms-FI.js +0 -104
- data/vendor/assets/javascripts/date-sq-AL.js +0 -104
- data/vendor/assets/javascripts/date-sr-Cyrl-BA.js +0 -104
- data/vendor/assets/javascripts/date-sr-Cyrl-CS.js +0 -104
- data/vendor/assets/javascripts/date-sr-Latn-BA.js +0 -104
- data/vendor/assets/javascripts/date-sr-Latn-CS.js +0 -104
- data/vendor/assets/javascripts/date-sv-FI.js +0 -104
- data/vendor/assets/javascripts/date-sv-SE.js +0 -104
- data/vendor/assets/javascripts/date-sw-KE.js +0 -104
- data/vendor/assets/javascripts/date-syr-SY.js +0 -104
- data/vendor/assets/javascripts/date-ta-IN.js +0 -104
- data/vendor/assets/javascripts/date-te-IN.js +0 -104
- data/vendor/assets/javascripts/date-th-TH.js +0 -104
- data/vendor/assets/javascripts/date-tn-ZA.js +0 -104
- data/vendor/assets/javascripts/date-tr-TR.js +0 -104
- data/vendor/assets/javascripts/date-tt-RU.js +0 -104
- data/vendor/assets/javascripts/date-uk-UA.js +0 -104
- data/vendor/assets/javascripts/date-ur-PK.js +0 -104
- data/vendor/assets/javascripts/date-uz-Cyrl-UZ.js +0 -104
- data/vendor/assets/javascripts/date-uz-Latn-UZ.js +0 -104
- data/vendor/assets/javascripts/date-vi-VN.js +0 -104
- data/vendor/assets/javascripts/date-xh-ZA.js +0 -104
- data/vendor/assets/javascripts/date-zh-CN.js +0 -104
- data/vendor/assets/javascripts/date-zh-HK.js +0 -104
- data/vendor/assets/javascripts/date-zh-MO.js +0 -104
- data/vendor/assets/javascripts/date-zh-SG.js +0 -104
- data/vendor/assets/javascripts/date-zh-TW.js +0 -104
- data/vendor/assets/javascripts/date-zu-ZA.js +0 -104
- data/vendor/assets/javascripts/date.js +0 -104
|
@@ -0,0 +1,1170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @version: 1.0 Alpha-1
|
|
3
|
+
* @author: Coolite Inc. http://www.coolite.com/
|
|
4
|
+
* @date: 2008-04-13
|
|
5
|
+
* @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved.
|
|
6
|
+
* @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/.
|
|
7
|
+
* @website: http://www.datejs.com/
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
(function () {
|
|
11
|
+
Date.Parsing = {
|
|
12
|
+
Exception: function (s) {
|
|
13
|
+
this.message = "Parse error at '" + s.substring(0, 10) + " ...'";
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
var $P = Date.Parsing;
|
|
18
|
+
var _ = $P.Operators = {
|
|
19
|
+
//
|
|
20
|
+
// Tokenizers
|
|
21
|
+
//
|
|
22
|
+
rtoken: function (r) { // regex token
|
|
23
|
+
return function (s) {
|
|
24
|
+
var mx = s.match(r);
|
|
25
|
+
if (mx) {
|
|
26
|
+
return ([ mx[0], s.substring(mx[0].length) ]);
|
|
27
|
+
} else {
|
|
28
|
+
throw new $P.Exception(s);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
},
|
|
32
|
+
token: function (s) { // whitespace-eating token
|
|
33
|
+
return function (s) {
|
|
34
|
+
return _.rtoken(new RegExp("^\s*" + s + "\s*"))(s);
|
|
35
|
+
// Removed .strip()
|
|
36
|
+
// return _.rtoken(new RegExp("^\s*" + s + "\s*"))(s).strip();
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
stoken: function (s) { // string token
|
|
40
|
+
return _.rtoken(new RegExp("^" + s));
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
//
|
|
44
|
+
// Atomic Operators
|
|
45
|
+
//
|
|
46
|
+
|
|
47
|
+
until: function (p) {
|
|
48
|
+
return function (s) {
|
|
49
|
+
var qx = [], rx = null;
|
|
50
|
+
while (s.length) {
|
|
51
|
+
try {
|
|
52
|
+
rx = p.call(this, s);
|
|
53
|
+
} catch (e) {
|
|
54
|
+
qx.push(rx[0]);
|
|
55
|
+
s = rx[1];
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
return [ qx, s ];
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
many: function (p) {
|
|
64
|
+
return function (s) {
|
|
65
|
+
var rx = [], r = null;
|
|
66
|
+
while (s.length) {
|
|
67
|
+
try {
|
|
68
|
+
r = p.call(this, s);
|
|
69
|
+
} catch (e) {
|
|
70
|
+
return [ rx, s ];
|
|
71
|
+
}
|
|
72
|
+
rx.push(r[0]);
|
|
73
|
+
s = r[1];
|
|
74
|
+
}
|
|
75
|
+
return [ rx, s ];
|
|
76
|
+
};
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
// generator operators -- see below
|
|
80
|
+
optional: function (p) {
|
|
81
|
+
return function (s) {
|
|
82
|
+
var r = null;
|
|
83
|
+
try {
|
|
84
|
+
r = p.call(this, s);
|
|
85
|
+
} catch (e) {
|
|
86
|
+
return [ null, s ];
|
|
87
|
+
}
|
|
88
|
+
return [ r[0], r[1] ];
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
not: function (p) {
|
|
92
|
+
return function (s) {
|
|
93
|
+
try {
|
|
94
|
+
p.call(this, s);
|
|
95
|
+
} catch (e) {
|
|
96
|
+
return [null, s];
|
|
97
|
+
}
|
|
98
|
+
throw new $P.Exception(s);
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
ignore: function (p) {
|
|
102
|
+
return p ?
|
|
103
|
+
function (s) {
|
|
104
|
+
var r = null;
|
|
105
|
+
r = p.call(this, s);
|
|
106
|
+
return [null, r[1]];
|
|
107
|
+
} : null;
|
|
108
|
+
},
|
|
109
|
+
product: function () {
|
|
110
|
+
var px = arguments[0],
|
|
111
|
+
qx = Array.prototype.slice.call(arguments, 1), rx = [];
|
|
112
|
+
for (var i = 0 ; i < px.length ; i++) {
|
|
113
|
+
rx.push(_.each(px[i], qx));
|
|
114
|
+
}
|
|
115
|
+
return rx;
|
|
116
|
+
},
|
|
117
|
+
cache: function (rule) {
|
|
118
|
+
var cache = {}, r = null;
|
|
119
|
+
return function (s) {
|
|
120
|
+
try {
|
|
121
|
+
r = cache[s] = (cache[s] || rule.call(this, s));
|
|
122
|
+
} catch (e) {
|
|
123
|
+
r = cache[s] = e;
|
|
124
|
+
}
|
|
125
|
+
if (r instanceof $P.Exception) {
|
|
126
|
+
throw r;
|
|
127
|
+
} else {
|
|
128
|
+
return r;
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
// vector operators -- see below
|
|
134
|
+
any: function () {
|
|
135
|
+
var px = arguments;
|
|
136
|
+
return function (s) {
|
|
137
|
+
var r = null;
|
|
138
|
+
for (var i = 0; i < px.length; i++) {
|
|
139
|
+
if (px[i] == null) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
r = (px[i].call(this, s));
|
|
144
|
+
} catch (e) {
|
|
145
|
+
r = null;
|
|
146
|
+
}
|
|
147
|
+
if (r) {
|
|
148
|
+
return r;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
throw new $P.Exception(s);
|
|
152
|
+
};
|
|
153
|
+
},
|
|
154
|
+
each: function () {
|
|
155
|
+
var px = arguments;
|
|
156
|
+
return function (s) {
|
|
157
|
+
var rx = [], r = null;
|
|
158
|
+
for (var i = 0; i < px.length ; i++) {
|
|
159
|
+
if (px[i] == null) {
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
r = (px[i].call(this, s));
|
|
164
|
+
} catch (e) {
|
|
165
|
+
throw new $P.Exception(s);
|
|
166
|
+
}
|
|
167
|
+
rx.push(r[0]);
|
|
168
|
+
s = r[1];
|
|
169
|
+
}
|
|
170
|
+
return [ rx, s];
|
|
171
|
+
};
|
|
172
|
+
},
|
|
173
|
+
all: function () {
|
|
174
|
+
var px = arguments, _ = _;
|
|
175
|
+
return _.each(_.optional(px));
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
// delimited operators
|
|
179
|
+
sequence: function (px, d, c) {
|
|
180
|
+
d = d || _.rtoken(/^\s*/);
|
|
181
|
+
c = c || null;
|
|
182
|
+
|
|
183
|
+
if (px.length == 1) {
|
|
184
|
+
return px[0];
|
|
185
|
+
}
|
|
186
|
+
return function (s) {
|
|
187
|
+
var r = null, q = null;
|
|
188
|
+
var rx = [];
|
|
189
|
+
for (var i = 0; i < px.length ; i++) {
|
|
190
|
+
try {
|
|
191
|
+
r = px[i].call(this, s);
|
|
192
|
+
} catch (e) {
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
rx.push(r[0]);
|
|
196
|
+
try {
|
|
197
|
+
q = d.call(this, r[1]);
|
|
198
|
+
} catch (ex) {
|
|
199
|
+
q = null;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
s = q[1];
|
|
203
|
+
}
|
|
204
|
+
if (!r) {
|
|
205
|
+
throw new $P.Exception(s);
|
|
206
|
+
}
|
|
207
|
+
if (q) {
|
|
208
|
+
throw new $P.Exception(q[1]);
|
|
209
|
+
}
|
|
210
|
+
if (c) {
|
|
211
|
+
try {
|
|
212
|
+
r = c.call(this, r[1]);
|
|
213
|
+
} catch (ey) {
|
|
214
|
+
throw new $P.Exception(r[1]);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return [ rx, (r?r[1]:s) ];
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
|
|
221
|
+
//
|
|
222
|
+
// Composite Operators
|
|
223
|
+
//
|
|
224
|
+
|
|
225
|
+
between: function (d1, p, d2) {
|
|
226
|
+
d2 = d2 || d1;
|
|
227
|
+
var _fn = _.each(_.ignore(d1), p, _.ignore(d2));
|
|
228
|
+
return function (s) {
|
|
229
|
+
var rx = _fn.call(this, s);
|
|
230
|
+
return [[rx[0][0], r[0][2]], rx[1]];
|
|
231
|
+
};
|
|
232
|
+
},
|
|
233
|
+
list: function (p, d, c) {
|
|
234
|
+
d = d || _.rtoken(/^\s*/);
|
|
235
|
+
c = c || null;
|
|
236
|
+
return (p instanceof Array ?
|
|
237
|
+
_.each(_.product(p.slice(0, -1), _.ignore(d)), p.slice(-1), _.ignore(c)) :
|
|
238
|
+
_.each(_.many(_.each(p, _.ignore(d))), px, _.ignore(c)));
|
|
239
|
+
},
|
|
240
|
+
set: function (px, d, c) {
|
|
241
|
+
d = d || _.rtoken(/^\s*/);
|
|
242
|
+
c = c || null;
|
|
243
|
+
return function (s) {
|
|
244
|
+
// r is the current match, best the current 'best' match
|
|
245
|
+
// which means it parsed the most amount of input
|
|
246
|
+
var r = null, p = null, q = null, rx = null, best = [[], s], last = false;
|
|
247
|
+
|
|
248
|
+
// go through the rules in the given set
|
|
249
|
+
for (var i = 0; i < px.length ; i++) {
|
|
250
|
+
|
|
251
|
+
// last is a flag indicating whether this must be the last element
|
|
252
|
+
// if there is only 1 element, then it MUST be the last one
|
|
253
|
+
q = null;
|
|
254
|
+
p = null;
|
|
255
|
+
r = null;
|
|
256
|
+
last = (px.length == 1);
|
|
257
|
+
|
|
258
|
+
// first, we try simply to match the current pattern
|
|
259
|
+
// if not, try the next pattern
|
|
260
|
+
try {
|
|
261
|
+
r = px[i].call(this, s);
|
|
262
|
+
} catch (e) {
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// since we are matching against a set of elements, the first
|
|
267
|
+
// thing to do is to add r[0] to matched elements
|
|
268
|
+
rx = [[r[0]], r[1]];
|
|
269
|
+
|
|
270
|
+
// if we matched and there is still input to parse and
|
|
271
|
+
// we don't already know this is the last element,
|
|
272
|
+
// we're going to next check for the delimiter ...
|
|
273
|
+
// if there's none, or if there's no input left to parse
|
|
274
|
+
// than this must be the last element after all ...
|
|
275
|
+
if (r[1].length > 0 && ! last) {
|
|
276
|
+
try {
|
|
277
|
+
q = d.call(this, r[1]);
|
|
278
|
+
} catch (ex) {
|
|
279
|
+
last = true;
|
|
280
|
+
}
|
|
281
|
+
} else {
|
|
282
|
+
last = true;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// if we parsed the delimiter and now there's no more input,
|
|
286
|
+
// that means we shouldn't have parsed the delimiter at all
|
|
287
|
+
// so don't update r and mark this as the last element ...
|
|
288
|
+
if (!last && q[1].length === 0) {
|
|
289
|
+
last = true;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
// so, if this isn't the last element, we're going to see if
|
|
294
|
+
// we can get any more matches from the remaining (unmatched)
|
|
295
|
+
// elements ...
|
|
296
|
+
if (!last) {
|
|
297
|
+
|
|
298
|
+
// build a list of the remaining rules we can match against,
|
|
299
|
+
// i.e., all but the one we just matched against
|
|
300
|
+
var qx = [];
|
|
301
|
+
for (var j = 0; j < px.length ; j++) {
|
|
302
|
+
if (i != j) {
|
|
303
|
+
qx.push(px[j]);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// now invoke recursively set with the remaining input
|
|
308
|
+
// note that we don't include the closing delimiter ...
|
|
309
|
+
// we'll check for that ourselves at the end
|
|
310
|
+
p = _.set(qx, d).call(this, q[1]);
|
|
311
|
+
|
|
312
|
+
// if we got a non-empty set as a result ...
|
|
313
|
+
// (otw rx already contains everything we want to match)
|
|
314
|
+
if (p[0].length > 0) {
|
|
315
|
+
// update current result, which is stored in rx ...
|
|
316
|
+
// basically, pick up the remaining text from p[1]
|
|
317
|
+
// and concat the result from p[0] so that we don't
|
|
318
|
+
// get endless nesting ...
|
|
319
|
+
rx[0] = rx[0].concat(p[0]);
|
|
320
|
+
rx[1] = p[1];
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// at this point, rx either contains the last matched element
|
|
325
|
+
// or the entire matched set that starts with this element.
|
|
326
|
+
|
|
327
|
+
// now we just check to see if this variation is better than
|
|
328
|
+
// our best so far, in terms of how much of the input is parsed
|
|
329
|
+
if (rx[1].length < best[1].length) {
|
|
330
|
+
best = rx;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// if we've parsed all the input, then we're finished
|
|
334
|
+
if (best[1].length === 0) {
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// so now we've either gone through all the patterns trying them
|
|
340
|
+
// as the initial match; or we found one that parsed the entire
|
|
341
|
+
// input string ...
|
|
342
|
+
|
|
343
|
+
// if best has no matches, just return empty set ...
|
|
344
|
+
if (best[0].length === 0) {
|
|
345
|
+
return best;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// if a closing delimiter is provided, then we have to check it also
|
|
349
|
+
if (c) {
|
|
350
|
+
// we try this even if there is no remaining input because the pattern
|
|
351
|
+
// may well be optional or match empty input ...
|
|
352
|
+
try {
|
|
353
|
+
q = c.call(this, best[1]);
|
|
354
|
+
} catch (ey) {
|
|
355
|
+
throw new $P.Exception(best[1]);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// it parsed ... be sure to update the best match remaining input
|
|
359
|
+
best[1] = q[1];
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// if we're here, either there was no closing delimiter or we parsed it
|
|
363
|
+
// so now we have the best match; just return it!
|
|
364
|
+
return best;
|
|
365
|
+
};
|
|
366
|
+
},
|
|
367
|
+
forward: function (gr, fname) {
|
|
368
|
+
return function (s) {
|
|
369
|
+
return gr[fname].call(this, s);
|
|
370
|
+
};
|
|
371
|
+
},
|
|
372
|
+
|
|
373
|
+
//
|
|
374
|
+
// Translation Operators
|
|
375
|
+
//
|
|
376
|
+
replace: function (rule, repl) {
|
|
377
|
+
return function (s) {
|
|
378
|
+
var r = rule.call(this, s);
|
|
379
|
+
return [repl, r[1]];
|
|
380
|
+
};
|
|
381
|
+
},
|
|
382
|
+
process: function (rule, fn) {
|
|
383
|
+
return function (s) {
|
|
384
|
+
var r = rule.call(this, s);
|
|
385
|
+
return [fn.call(this, r[0]), r[1]];
|
|
386
|
+
};
|
|
387
|
+
},
|
|
388
|
+
min: function (min, rule) {
|
|
389
|
+
return function (s) {
|
|
390
|
+
var rx = rule.call(this, s);
|
|
391
|
+
if (rx[0].length < min) {
|
|
392
|
+
throw new $P.Exception(s);
|
|
393
|
+
}
|
|
394
|
+
return rx;
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
// Generator Operators And Vector Operators
|
|
401
|
+
|
|
402
|
+
// Generators are operators that have a signature of F(R) => R,
|
|
403
|
+
// taking a given rule and returning another rule, such as
|
|
404
|
+
// ignore, which parses a given rule and throws away the result.
|
|
405
|
+
|
|
406
|
+
// Vector operators are those that have a signature of F(R1,R2,...) => R,
|
|
407
|
+
// take a list of rules and returning a new rule, such as each.
|
|
408
|
+
|
|
409
|
+
// Generator operators are converted (via the following _generator
|
|
410
|
+
// function) into functions that can also take a list or array of rules
|
|
411
|
+
// and return an array of new rules as though the function had been
|
|
412
|
+
// called on each rule in turn (which is what actually happens).
|
|
413
|
+
|
|
414
|
+
// This allows generators to be used with vector operators more easily.
|
|
415
|
+
// Example:
|
|
416
|
+
// each(ignore(foo, bar)) instead of each(ignore(foo), ignore(bar))
|
|
417
|
+
|
|
418
|
+
// This also turns generators into vector operators, which allows
|
|
419
|
+
// constructs like:
|
|
420
|
+
// not(cache(foo, bar))
|
|
421
|
+
|
|
422
|
+
var _generator = function (op) {
|
|
423
|
+
return function () {
|
|
424
|
+
var args = null, rx = [];
|
|
425
|
+
if (arguments.length > 1) {
|
|
426
|
+
args = Array.prototype.slice.call(arguments);
|
|
427
|
+
} else if (arguments[0] instanceof Array) {
|
|
428
|
+
args = arguments[0];
|
|
429
|
+
}
|
|
430
|
+
if (args) {
|
|
431
|
+
for (var i = 0, px = args.shift() ; i < px.length ; i++) {
|
|
432
|
+
args.unshift(px[i]);
|
|
433
|
+
rx.push(op.apply(null, args));
|
|
434
|
+
args.shift();
|
|
435
|
+
return rx;
|
|
436
|
+
}
|
|
437
|
+
} else {
|
|
438
|
+
return op.apply(null, arguments);
|
|
439
|
+
}
|
|
440
|
+
};
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
var gx = "optional not ignore cache".split(/\s/);
|
|
444
|
+
|
|
445
|
+
for (var i = 0 ; i < gx.length ; i++) {
|
|
446
|
+
_[gx[i]] = _generator(_[gx[i]]);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
var _vector = function (op) {
|
|
450
|
+
return function () {
|
|
451
|
+
if (arguments[0] instanceof Array) {
|
|
452
|
+
return op.apply(null, arguments[0]);
|
|
453
|
+
} else {
|
|
454
|
+
return op.apply(null, arguments);
|
|
455
|
+
}
|
|
456
|
+
};
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
var vx = "each any all".split(/\s/);
|
|
460
|
+
|
|
461
|
+
for (var j = 0 ; j < vx.length ; j++) {
|
|
462
|
+
_[vx[j]] = _vector(_[vx[j]]);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
}());
|
|
466
|
+
|
|
467
|
+
(function () {
|
|
468
|
+
var $D = Date, $P = $D.prototype, $C = $D.CultureInfo;
|
|
469
|
+
|
|
470
|
+
var flattenAndCompact = function (ax) {
|
|
471
|
+
var rx = [];
|
|
472
|
+
for (var i = 0; i < ax.length; i++) {
|
|
473
|
+
if (ax[i] instanceof Array) {
|
|
474
|
+
rx = rx.concat(flattenAndCompact(ax[i]));
|
|
475
|
+
} else {
|
|
476
|
+
if (ax[i]) {
|
|
477
|
+
rx.push(ax[i]);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
return rx;
|
|
482
|
+
};
|
|
483
|
+
|
|
484
|
+
$D.Grammar = {};
|
|
485
|
+
|
|
486
|
+
$D.Translator = {
|
|
487
|
+
hour: function (s) {
|
|
488
|
+
return function () {
|
|
489
|
+
this.hour = Number(s);
|
|
490
|
+
};
|
|
491
|
+
},
|
|
492
|
+
minute: function (s) {
|
|
493
|
+
return function () {
|
|
494
|
+
this.minute = Number(s);
|
|
495
|
+
};
|
|
496
|
+
},
|
|
497
|
+
second: function (s) {
|
|
498
|
+
return function () {
|
|
499
|
+
this.second = Number(s);
|
|
500
|
+
};
|
|
501
|
+
},
|
|
502
|
+
millisecond: function (s) {
|
|
503
|
+
return function () {
|
|
504
|
+
this.millisecond = Number(s);
|
|
505
|
+
};
|
|
506
|
+
},
|
|
507
|
+
meridian: function (s) {
|
|
508
|
+
return function () {
|
|
509
|
+
this.meridian = s.slice(0, 1).toLowerCase();
|
|
510
|
+
};
|
|
511
|
+
},
|
|
512
|
+
timezone: function (s) {
|
|
513
|
+
return function () {
|
|
514
|
+
var n = s.replace(/[^\d\+\-]/g, "");
|
|
515
|
+
if (n.length) {
|
|
516
|
+
// parse offset into iso8601 parts
|
|
517
|
+
var zp = n.match(/(\+|-)(\d{2})(\d{2})?/);
|
|
518
|
+
// minute offsets must be converted to base of 100
|
|
519
|
+
var mo = parseInt((parseInt(zp[3]) || 0) / .6).toString();
|
|
520
|
+
mo = mo.length < 2 ? "0" + mo : mo;
|
|
521
|
+
this.timezoneOffset = zp[1] + zp[2] + mo;
|
|
522
|
+
} else {
|
|
523
|
+
this.timezone = s.toLowerCase();
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
},
|
|
527
|
+
day: function (x) {
|
|
528
|
+
var s = x[0];
|
|
529
|
+
return function () {
|
|
530
|
+
this.day = Number(s.match(/\d+/)[0]);
|
|
531
|
+
};
|
|
532
|
+
},
|
|
533
|
+
month: function (s) {
|
|
534
|
+
return function () {
|
|
535
|
+
this.month = (s.length == 3) ? "jan feb mar apr may jun jul aug sep oct nov dec".indexOf(s)/4 : Number(s) - 1;
|
|
536
|
+
};
|
|
537
|
+
},
|
|
538
|
+
year: function (s) {
|
|
539
|
+
return function () {
|
|
540
|
+
var n = Number(s);
|
|
541
|
+
this.year = ((s.length > 2) ? n :
|
|
542
|
+
(n + (((n + 2000) < $C.twoDigitYearMax) ? 2000 : 1900)));
|
|
543
|
+
};
|
|
544
|
+
},
|
|
545
|
+
rday: function (s) {
|
|
546
|
+
return function () {
|
|
547
|
+
switch (s) {
|
|
548
|
+
case "yesterday":
|
|
549
|
+
this.days = -1;
|
|
550
|
+
break;
|
|
551
|
+
case "tomorrow":
|
|
552
|
+
this.days = 1;
|
|
553
|
+
break;
|
|
554
|
+
case "today":
|
|
555
|
+
this.days = 0;
|
|
556
|
+
break;
|
|
557
|
+
case "now":
|
|
558
|
+
this.days = 0;
|
|
559
|
+
this.now = true;
|
|
560
|
+
break;
|
|
561
|
+
}
|
|
562
|
+
};
|
|
563
|
+
},
|
|
564
|
+
finishExact: function (x) {
|
|
565
|
+
x = (x instanceof Array) ? x : [ x ];
|
|
566
|
+
|
|
567
|
+
for (var i = 0 ; i < x.length ; i++) {
|
|
568
|
+
if (x[i]) {
|
|
569
|
+
x[i].call(this);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
var now = new Date();
|
|
574
|
+
|
|
575
|
+
if ((this.hour || this.minute) && (!this.month && !this.year && !this.day)) {
|
|
576
|
+
this.day = now.getDate();
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
if (!this.year) {
|
|
580
|
+
this.year = now.getFullYear();
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
if (!this.month && this.month !== 0) {
|
|
584
|
+
this.month = now.getMonth();
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
if (!this.day) {
|
|
588
|
+
this.day = 1;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
if (!this.hour) {
|
|
592
|
+
this.hour = 0;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
if (!this.minute) {
|
|
596
|
+
this.minute = 0;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
if (!this.second) {
|
|
600
|
+
this.second = 0;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
if(!this.millisecond) {
|
|
604
|
+
this.millisecond = 0;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
if (this.meridian && this.hour) {
|
|
608
|
+
if (this.meridian == "p" && this.hour < 12) {
|
|
609
|
+
this.hour = this.hour + 12;
|
|
610
|
+
} else if (this.meridian == "a" && this.hour == 12) {
|
|
611
|
+
this.hour = 0;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
if (this.day > $D.getDaysInMonth(this.year, this.month)) {
|
|
616
|
+
throw new RangeError(this.day + " is not a valid value for days.");
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
var r = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);
|
|
620
|
+
|
|
621
|
+
if (this.timezone) {
|
|
622
|
+
r.set({ timezone: this.timezone });
|
|
623
|
+
} else if (this.timezoneOffset) {
|
|
624
|
+
r.setTimezoneOffset(this.timezoneOffset);
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
return r;
|
|
628
|
+
},
|
|
629
|
+
finish: function (x) {
|
|
630
|
+
x = (x instanceof Array) ? flattenAndCompact(x) : [ x ];
|
|
631
|
+
|
|
632
|
+
if (x.length === 0) {
|
|
633
|
+
return null;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
for (var i = 0 ; i < x.length ; i++) {
|
|
637
|
+
if (typeof x[i] == "function") {
|
|
638
|
+
x[i].call(this);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
var today = $D.today();
|
|
643
|
+
|
|
644
|
+
// For parsing: "now"
|
|
645
|
+
if (this.now && !this.unit && !this.operator) {
|
|
646
|
+
return new Date();
|
|
647
|
+
} else if (this.now) {
|
|
648
|
+
today = new Date();
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
var expression = !!(this.days && this.days !== null || this.orient || this.operator || this.bias);
|
|
652
|
+
var realExpression = !!(this.days && this.days !== null || this.orient || this.operator);
|
|
653
|
+
|
|
654
|
+
var gap, mod, orient;
|
|
655
|
+
orient = ((this.orient == "past" || this.operator == "subtract" || this.bias == "past") ? -1 : 1);
|
|
656
|
+
|
|
657
|
+
// For parsing: "last second", "next minute", "previous hour", "+5 seconds",
|
|
658
|
+
// "-5 hours", "5 hours", "7 hours ago"
|
|
659
|
+
if(!this.now && "hour minute second".indexOf(this.unit) != -1) {
|
|
660
|
+
today.setTimeToNow();
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
// For parsing: "5 hours", "2 days", "3 years ago",
|
|
664
|
+
// "7 days from now"
|
|
665
|
+
if ((this.month || this.month === 0) && ("year day hour minute second".indexOf(this.unit) != -1)) {
|
|
666
|
+
this.value = this.month + 1;
|
|
667
|
+
this.month = null;
|
|
668
|
+
expression = true;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
// For parsing: "monday @ 8pm", "12p on monday", "Friday"
|
|
672
|
+
if (!expression && this.weekday && !this.day && !this.days) {
|
|
673
|
+
var temp = Date[this.weekday]();
|
|
674
|
+
this.day = temp.getDate();
|
|
675
|
+
if (!this.month) {
|
|
676
|
+
this.month = temp.getMonth();
|
|
677
|
+
}
|
|
678
|
+
this.year = temp.getFullYear();
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
// For parsing: "prev thursday", "next friday", "last friday at 20:00"
|
|
682
|
+
if (expression && this.weekday && this.unit != "month") {
|
|
683
|
+
this.unit = "day";
|
|
684
|
+
gap = ($D.getDayNumberFromName(this.weekday) - today.getDay());
|
|
685
|
+
mod = 7;
|
|
686
|
+
this.days = gap ? ((gap + (orient * mod)) % mod) : (orient * mod);
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
// For parsing: "t+1 m", "today + 1 month", "+1 month", "-5 months"
|
|
690
|
+
if (!this.month && this.value && this.unit == "month" && !this.now) {
|
|
691
|
+
this.month = this.value;
|
|
692
|
+
expression = true;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
// For parsing: "last january", "prev march", "next july", "today + 1 month",
|
|
696
|
+
// "+5 months"
|
|
697
|
+
if ((expression && !this.bias) && (this.month || this.month === 0) && this.unit != "year") {
|
|
698
|
+
this.unit = "month";
|
|
699
|
+
gap = (this.month - today.getMonth());
|
|
700
|
+
mod = 12;
|
|
701
|
+
this.months = gap ? ((gap + (orient * mod)) % mod) : (orient * mod);
|
|
702
|
+
this.month = null;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
// For parsing: "last monday", "last friday", "previous day",
|
|
706
|
+
// "next week", "next month", "next year",
|
|
707
|
+
// "today+", "+", "-", "yesterday at 4:00", "last friday at 20:00"
|
|
708
|
+
if (!this.value && realExpression) {
|
|
709
|
+
this.value = 1;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
// For parsing: "15th at 20:15", "15th at 8pm", "today+", "t+5"
|
|
713
|
+
if (!this.unit && (!expression || this.value)) {
|
|
714
|
+
this.unit = "day";
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
// For parsing: "15th at 20:15", "15th at 8pm"
|
|
718
|
+
if ((!expression || this.bias) && this.value && (!this.unit || this.unit == "day") && !this.day) {
|
|
719
|
+
this.unit = "day";
|
|
720
|
+
this.day = this.value * 1
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
// For parsing: "last minute", "+5 hours", "previous month", "1 year ago tomorrow"
|
|
724
|
+
if (this.unit && (!this[this.unit + "s"] || this.operator)) {
|
|
725
|
+
this[this.unit + "s"] = this.value * orient;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
// For parsing: "July 8th, 2004, 10:30 PM", "07/15/04 6 AM",
|
|
729
|
+
// "monday @ 8am", "10:30:45 P.M."
|
|
730
|
+
if (this.meridian && this.hour) {
|
|
731
|
+
if (this.meridian == "p" && this.hour < 12) {
|
|
732
|
+
this.hour = this.hour + 12;
|
|
733
|
+
} else if (this.meridian == "a" && this.hour == 12) {
|
|
734
|
+
this.hour = 0;
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
// For parsing: "3 months ago saturday at 5:00 pm" (does not actually parse)
|
|
739
|
+
if (this.weekday && !this.day && !this.days) {
|
|
740
|
+
var temp = Date[this.weekday]();
|
|
741
|
+
this.day = temp.getDate();
|
|
742
|
+
if (temp.getMonth() !== today.getMonth()) {
|
|
743
|
+
this.month = temp.getMonth();
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
// For parsing: "July 2004", "1997-07", "2008/10", "november"
|
|
748
|
+
if ((this.month || this.month === 0) && !this.day) {
|
|
749
|
+
this.day = 1;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
// For parsing: "3 weeks" (does not actually parse)
|
|
753
|
+
if (!this.orient && !this.operator && this.unit == "week" && this.value && !this.day && !this.month) {
|
|
754
|
+
return Date.today().setWeek(this.value);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
today.set(this);
|
|
758
|
+
|
|
759
|
+
if (this.bias) {
|
|
760
|
+
if (this.day) {
|
|
761
|
+
this.days = null
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
if (!this.day) {
|
|
765
|
+
if ((this.bias == "past" && today > new Date()) || (this.bias == "future" && today < new Date())) {
|
|
766
|
+
this.days = 1 * orient
|
|
767
|
+
}
|
|
768
|
+
} else if (!this.month && !this.months) {
|
|
769
|
+
if ((this.bias == "past" && today > new Date()) || (this.bias == "future" && today < new Date())) {
|
|
770
|
+
this.months = 1 * orient
|
|
771
|
+
}
|
|
772
|
+
} else if (!this.year) {
|
|
773
|
+
if ((this.bias == "past" && today > new Date()) || (this.bias == "future" && today < new Date())) {
|
|
774
|
+
this.years = 1 * orient
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
expression = true;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
if (expression) {
|
|
782
|
+
today.add(this);
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
return today;
|
|
786
|
+
}
|
|
787
|
+
};
|
|
788
|
+
|
|
789
|
+
var _ = $D.Parsing.Operators, g = $D.Grammar, t = $D.Translator, _fn;
|
|
790
|
+
|
|
791
|
+
g.datePartDelimiter = _.rtoken(/^([\s\-\.\,\/\x27]+)/);
|
|
792
|
+
g.timePartDelimiter = _.stoken(":");
|
|
793
|
+
g.whiteSpace = _.rtoken(/^\s*/);
|
|
794
|
+
g.generalDelimiter = _.rtoken(/^(([\s\,]|at|@|on)+)/);
|
|
795
|
+
|
|
796
|
+
var _C = {};
|
|
797
|
+
g.ctoken = function (keys) {
|
|
798
|
+
var fn = _C[keys];
|
|
799
|
+
if (! fn) {
|
|
800
|
+
var c = $C.regexPatterns;
|
|
801
|
+
var kx = keys.split(/\s+/), px = [];
|
|
802
|
+
for (var i = 0; i < kx.length ; i++) {
|
|
803
|
+
px.push(_.replace(_.rtoken(c[kx[i]]), kx[i]));
|
|
804
|
+
}
|
|
805
|
+
fn = _C[keys] = _.any.apply(null, px);
|
|
806
|
+
}
|
|
807
|
+
return fn;
|
|
808
|
+
};
|
|
809
|
+
g.ctoken2 = function (key) {
|
|
810
|
+
return _.rtoken($C.regexPatterns[key]);
|
|
811
|
+
};
|
|
812
|
+
|
|
813
|
+
// hour, minute, second, meridian, timezone
|
|
814
|
+
g.h = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/), t.hour));
|
|
815
|
+
g.hh = _.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/), t.hour));
|
|
816
|
+
g.H = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/), t.hour));
|
|
817
|
+
g.HH = _.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/), t.hour));
|
|
818
|
+
g.m = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.minute));
|
|
819
|
+
g.mm = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.minute));
|
|
820
|
+
g.s = _.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/), t.second));
|
|
821
|
+
g.ss = _.cache(_.process(_.rtoken(/^[0-5][0-9]/), t.second));
|
|
822
|
+
g.fff = _.cache(_.process(_.rtoken(/^[0-9]{3}(?!\d)/), t.millisecond));
|
|
823
|
+
g.hms = _.cache(_.sequence([g.H, g.m, g.s], g.timePartDelimiter));
|
|
824
|
+
|
|
825
|
+
// _.min(1, _.set([ g.H, g.m, g.s ], g._t));
|
|
826
|
+
g.t = _.cache(_.process(g.ctoken2("shortMeridian"), t.meridian));
|
|
827
|
+
g.tt = _.cache(_.process(g.ctoken2("longMeridian"), t.meridian));
|
|
828
|
+
g.z = _.cache(_.process(_.rtoken(/^(Z|z)|((\+|\-)\s*\d\d\d\d)|((\+|\-)\d\d(\:?\d\d)?)/), t.timezone));
|
|
829
|
+
|
|
830
|
+
g.zzz = _.cache(_.process(g.ctoken2("timezone"), t.timezone));
|
|
831
|
+
g.timeSuffix = _.each(_.ignore(g.whiteSpace), _.set([ g.tt, g.zzz ]));
|
|
832
|
+
g.time = _.each(_.optional(_.ignore(_.stoken("T"))), g.hms, g.timeSuffix);
|
|
833
|
+
|
|
834
|
+
// days, months, years
|
|
835
|
+
g.d = _.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),
|
|
836
|
+
_.optional(g.ctoken2("ordinalSuffix"))), t.day));
|
|
837
|
+
g.dd = _.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),
|
|
838
|
+
_.optional(g.ctoken2("ordinalSuffix"))), t.day));
|
|
839
|
+
g.ddd = g.dddd = _.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),
|
|
840
|
+
function (s) {
|
|
841
|
+
return function () {
|
|
842
|
+
this.weekday = s;
|
|
843
|
+
};
|
|
844
|
+
}
|
|
845
|
+
));
|
|
846
|
+
g.M = _.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/), t.month));
|
|
847
|
+
g.MM = _.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/), t.month));
|
|
848
|
+
g.MMM = g.MMMM = _.cache(_.process(
|
|
849
|
+
g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"), t.month));
|
|
850
|
+
g.y = _.cache(_.process(_.rtoken(/^(\d\d?)/), t.year));
|
|
851
|
+
g.yy = _.cache(_.process(_.rtoken(/^(\d\d)/), t.year));
|
|
852
|
+
g.yyy = _.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/), t.year));
|
|
853
|
+
g.yyyy = _.cache(_.process(_.rtoken(/^(\d\d\d\d)/), t.year));
|
|
854
|
+
|
|
855
|
+
// rolling these up into general purpose rules
|
|
856
|
+
_fn = function () {
|
|
857
|
+
return _.each(_.any.apply(null, arguments), _.not(g.ctoken2("timeContext")));
|
|
858
|
+
};
|
|
859
|
+
|
|
860
|
+
g.day = _fn(g.d, g.dd);
|
|
861
|
+
g.month = _fn(g.M, g.MMM);
|
|
862
|
+
g.year = _fn(g.yyyy, g.yy);
|
|
863
|
+
|
|
864
|
+
// relative date / time expressions
|
|
865
|
+
g.orientation = _.process(g.ctoken("past future"),
|
|
866
|
+
function (s) {
|
|
867
|
+
return function () {
|
|
868
|
+
this.orient = s;
|
|
869
|
+
};
|
|
870
|
+
}
|
|
871
|
+
);
|
|
872
|
+
g.operator = _.process(g.ctoken("add subtract"),
|
|
873
|
+
function (s) {
|
|
874
|
+
return function () {
|
|
875
|
+
this.operator = s;
|
|
876
|
+
};
|
|
877
|
+
}
|
|
878
|
+
);
|
|
879
|
+
g.rday = _.process(g.ctoken("yesterday tomorrow today now"), t.rday);
|
|
880
|
+
g.unit = _.process(g.ctoken("second minute hour day week month year"),
|
|
881
|
+
function (s) {
|
|
882
|
+
return function () {
|
|
883
|
+
this.unit = s;
|
|
884
|
+
};
|
|
885
|
+
}
|
|
886
|
+
);
|
|
887
|
+
g.value = _.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),
|
|
888
|
+
function (s) {
|
|
889
|
+
return function () {
|
|
890
|
+
this.value = s.replace(/\D/g, "");
|
|
891
|
+
};
|
|
892
|
+
}
|
|
893
|
+
);
|
|
894
|
+
g.expression = _.set([ g.rday, g.operator, g.value, g.unit, g.orientation, g.ddd, g.MMM ]);
|
|
895
|
+
|
|
896
|
+
// pre-loaded rules for different date part order preferences
|
|
897
|
+
_fn = function () {
|
|
898
|
+
return _.set(arguments, g.datePartDelimiter);
|
|
899
|
+
};
|
|
900
|
+
g.mdy = _fn(g.ddd, g.month, g.day, g.year);
|
|
901
|
+
g.ymd = _fn(g.ddd, g.year, g.month, g.day);
|
|
902
|
+
g.dmy = _fn(g.ddd, g.day, g.month, g.year);
|
|
903
|
+
g.date = function (s) {
|
|
904
|
+
return ((g[$C.dateElementOrder] || g.mdy).call(this, s));
|
|
905
|
+
};
|
|
906
|
+
|
|
907
|
+
// parsing date format specifiers - ex: "h:m:s tt"
|
|
908
|
+
// this little guy will generate a custom parser based
|
|
909
|
+
// on the format string, ex: g.format("h:m:s tt")
|
|
910
|
+
g.format = _.process(_.many(
|
|
911
|
+
_.any(
|
|
912
|
+
// translate format specifiers into grammar rules
|
|
913
|
+
_.process(
|
|
914
|
+
_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|fff|tt?|zz?z?)/),
|
|
915
|
+
function (fmt) {
|
|
916
|
+
if (g[fmt]) {
|
|
917
|
+
return g[fmt];
|
|
918
|
+
} else {
|
|
919
|
+
throw $D.Parsing.Exception(fmt);
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
),
|
|
923
|
+
// translate separator tokens into token rules
|
|
924
|
+
_.process(
|
|
925
|
+
_.rtoken(/^[^dMyhHmsftz]+/), // all legal separators
|
|
926
|
+
function (s) {
|
|
927
|
+
return _.ignore(_.stoken(s));
|
|
928
|
+
}
|
|
929
|
+
)
|
|
930
|
+
)),
|
|
931
|
+
// construct the parser ...
|
|
932
|
+
function (rules) {
|
|
933
|
+
return _.process(_.each.apply(null, rules), t.finishExact);
|
|
934
|
+
}
|
|
935
|
+
);
|
|
936
|
+
|
|
937
|
+
var _F = {
|
|
938
|
+
//"M/d/yyyy": function (s) {
|
|
939
|
+
// var m = s.match(/^([0-2]\d|3[0-1]|\d)\/(1[0-2]|0\d|\d)\/(\d\d\d\d)/);
|
|
940
|
+
// if (m!=null) {
|
|
941
|
+
// var r = [ t.month.call(this,m[1]), t.day.call(this,m[2]), t.year.call(this,m[3]) ];
|
|
942
|
+
// r = t.finishExact.call(this,r);
|
|
943
|
+
// return [ r, "" ];
|
|
944
|
+
// } else {
|
|
945
|
+
// throw new Date.Parsing.Exception(s);
|
|
946
|
+
// }
|
|
947
|
+
//}
|
|
948
|
+
//"M/d/yyyy": function (s) { return [ new Date(Date._parse(s)), ""]; }
|
|
949
|
+
};
|
|
950
|
+
var _get = function (f) {
|
|
951
|
+
return _F[f] = (_F[f] || g.format(f)[0]);
|
|
952
|
+
};
|
|
953
|
+
|
|
954
|
+
g.formats = function (fx) {
|
|
955
|
+
if (fx instanceof Array) {
|
|
956
|
+
var rx = [];
|
|
957
|
+
for (var i = 0 ; i < fx.length ; i++) {
|
|
958
|
+
rx.push(_get(fx[i]));
|
|
959
|
+
}
|
|
960
|
+
return _.any.apply(null, rx);
|
|
961
|
+
} else {
|
|
962
|
+
return _get(fx);
|
|
963
|
+
}
|
|
964
|
+
};
|
|
965
|
+
|
|
966
|
+
// check for these formats first
|
|
967
|
+
g._formats = g.formats([
|
|
968
|
+
"\"yyyy-MM-ddTHH:mm:ss.fffz\"",
|
|
969
|
+
"yyyy-MM-ddTHH:mm:ss.fffz",
|
|
970
|
+
"yyyy-MM-ddTHH:mm:ss.fff",
|
|
971
|
+
"yyyy-MM-ddTHH:mm:ssz",
|
|
972
|
+
"yyyy-MM-ddTHH:mm:ss",
|
|
973
|
+
"yyyy-MM-ddTHH:mmz",
|
|
974
|
+
"yyyy-MM-ddTHH:mm",
|
|
975
|
+
"ddd, MMM dd, yyyy H:mm:ss tt",
|
|
976
|
+
"ddd MMM d yyyy HH:mm:ss zzz",
|
|
977
|
+
"MMddyyyy",
|
|
978
|
+
"ddMMyyyy",
|
|
979
|
+
"Mddyyyy",
|
|
980
|
+
"ddMyyyy",
|
|
981
|
+
"Mdyyyy",
|
|
982
|
+
"dMyyyy",
|
|
983
|
+
"yyyy",
|
|
984
|
+
"Mdyy",
|
|
985
|
+
"dMyy",
|
|
986
|
+
"d"
|
|
987
|
+
]);
|
|
988
|
+
|
|
989
|
+
// starting rule for general purpose grammar
|
|
990
|
+
g._start = _.process(_.set([ g.date, g.time, g.expression ],
|
|
991
|
+
g.generalDelimiter, g.whiteSpace), t.finish);
|
|
992
|
+
|
|
993
|
+
// real starting rule: tries selected formats first,
|
|
994
|
+
// then general purpose rule
|
|
995
|
+
g.start = function (s, o) {
|
|
996
|
+
try {
|
|
997
|
+
var r = g._formats.call({}, s);
|
|
998
|
+
if (r[1].length === 0) {
|
|
999
|
+
return r;
|
|
1000
|
+
}
|
|
1001
|
+
} catch (e) {}
|
|
1002
|
+
if (!o) {
|
|
1003
|
+
o = {}
|
|
1004
|
+
}
|
|
1005
|
+
o.input = s;
|
|
1006
|
+
return g._start.call(o, s);
|
|
1007
|
+
};
|
|
1008
|
+
|
|
1009
|
+
$D._parse = $D.parse;
|
|
1010
|
+
|
|
1011
|
+
/**
|
|
1012
|
+
* Converts the specified string value into its JavaScript Date equivalent using CultureInfo specific format information.
|
|
1013
|
+
*
|
|
1014
|
+
* Example
|
|
1015
|
+
<pre><code>
|
|
1016
|
+
///////////
|
|
1017
|
+
// Dates //
|
|
1018
|
+
///////////
|
|
1019
|
+
|
|
1020
|
+
// 15-Oct-2004
|
|
1021
|
+
var d1 = Date.parse("10/15/2004");
|
|
1022
|
+
|
|
1023
|
+
// 15-Oct-2004
|
|
1024
|
+
var d1 = Date.parse("15-Oct-2004");
|
|
1025
|
+
|
|
1026
|
+
// 15-Oct-2004
|
|
1027
|
+
var d1 = Date.parse("2004.10.15");
|
|
1028
|
+
|
|
1029
|
+
//Fri Oct 15, 2004
|
|
1030
|
+
var d1 = Date.parse("Fri Oct 15, 2004");
|
|
1031
|
+
|
|
1032
|
+
///////////
|
|
1033
|
+
// Times //
|
|
1034
|
+
///////////
|
|
1035
|
+
|
|
1036
|
+
// Today at 10 PM.
|
|
1037
|
+
var d1 = Date.parse("10 PM");
|
|
1038
|
+
|
|
1039
|
+
// Today at 10:30 PM.
|
|
1040
|
+
var d1 = Date.parse("10:30 P.M.");
|
|
1041
|
+
|
|
1042
|
+
// Today at 6 AM.
|
|
1043
|
+
var d1 = Date.parse("06am");
|
|
1044
|
+
|
|
1045
|
+
/////////////////////
|
|
1046
|
+
// Dates and Times //
|
|
1047
|
+
/////////////////////
|
|
1048
|
+
|
|
1049
|
+
// 8-July-2004 @ 10:30 PM
|
|
1050
|
+
var d1 = Date.parse("July 8th, 2004, 10:30 PM");
|
|
1051
|
+
|
|
1052
|
+
// 1-July-2004 @ 10:30 PM
|
|
1053
|
+
var d1 = Date.parse("2004-07-01T22:30:00");
|
|
1054
|
+
|
|
1055
|
+
////////////////////
|
|
1056
|
+
// Relative Dates //
|
|
1057
|
+
////////////////////
|
|
1058
|
+
|
|
1059
|
+
// Returns today's date. The string "today" is culture specific.
|
|
1060
|
+
var d1 = Date.parse("today");
|
|
1061
|
+
|
|
1062
|
+
// Returns yesterday's date. The string "yesterday" is culture specific.
|
|
1063
|
+
var d1 = Date.parse("yesterday");
|
|
1064
|
+
|
|
1065
|
+
// Returns the date of the next thursday.
|
|
1066
|
+
var d1 = Date.parse("Next thursday");
|
|
1067
|
+
|
|
1068
|
+
// Returns the date of the most previous monday.
|
|
1069
|
+
var d1 = Date.parse("last monday");
|
|
1070
|
+
|
|
1071
|
+
// Returns today's day + one year.
|
|
1072
|
+
var d1 = Date.parse("next year");
|
|
1073
|
+
|
|
1074
|
+
///////////////
|
|
1075
|
+
// Date Math //
|
|
1076
|
+
///////////////
|
|
1077
|
+
|
|
1078
|
+
// Today + 2 days
|
|
1079
|
+
var d1 = Date.parse("t+2");
|
|
1080
|
+
|
|
1081
|
+
// Today + 2 days
|
|
1082
|
+
var d1 = Date.parse("today + 2 days");
|
|
1083
|
+
|
|
1084
|
+
// Today + 3 months
|
|
1085
|
+
var d1 = Date.parse("t+3m");
|
|
1086
|
+
|
|
1087
|
+
// Today - 1 year
|
|
1088
|
+
var d1 = Date.parse("today - 1 year");
|
|
1089
|
+
|
|
1090
|
+
// Today - 1 year
|
|
1091
|
+
var d1 = Date.parse("t-1y");
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
/////////////////////////////
|
|
1095
|
+
// Partial Dates and Times //
|
|
1096
|
+
/////////////////////////////
|
|
1097
|
+
|
|
1098
|
+
// July 15th of this year.
|
|
1099
|
+
var d1 = Date.parse("July 15");
|
|
1100
|
+
|
|
1101
|
+
// 15th day of current day and year.
|
|
1102
|
+
var d1 = Date.parse("15");
|
|
1103
|
+
|
|
1104
|
+
// July 1st of current year at 10pm.
|
|
1105
|
+
var d1 = Date.parse("7/1 10pm");
|
|
1106
|
+
</code></pre>
|
|
1107
|
+
*
|
|
1108
|
+
* @param {String} The string value to convert into a Date object [Required]
|
|
1109
|
+
* @param {Object} An object with any defaults for parsing [Optional]
|
|
1110
|
+
* @return {Date} A Date object or null if the string cannot be converted into a Date.
|
|
1111
|
+
*/
|
|
1112
|
+
$D.parse = function (s, o) {
|
|
1113
|
+
var r = null;
|
|
1114
|
+
if (!s) {
|
|
1115
|
+
return null;
|
|
1116
|
+
}
|
|
1117
|
+
if (s instanceof Date) {
|
|
1118
|
+
return s;
|
|
1119
|
+
}
|
|
1120
|
+
if (!o) {
|
|
1121
|
+
o = {}
|
|
1122
|
+
}
|
|
1123
|
+
try {
|
|
1124
|
+
r = $D.Grammar.start.call({}, s.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"), o);
|
|
1125
|
+
} catch (e) {
|
|
1126
|
+
return null;
|
|
1127
|
+
}
|
|
1128
|
+
return ((r[1].length === 0) ? r[0] : null);
|
|
1129
|
+
};
|
|
1130
|
+
|
|
1131
|
+
$D.getParseFunction = function (fx) {
|
|
1132
|
+
var fn = $D.Grammar.formats(fx);
|
|
1133
|
+
return function (s) {
|
|
1134
|
+
var r = null;
|
|
1135
|
+
try {
|
|
1136
|
+
r = fn.call({}, s);
|
|
1137
|
+
} catch (e) {
|
|
1138
|
+
return null;
|
|
1139
|
+
}
|
|
1140
|
+
return ((r[1].length === 0) ? r[0] : null);
|
|
1141
|
+
};
|
|
1142
|
+
};
|
|
1143
|
+
|
|
1144
|
+
/**
|
|
1145
|
+
* Converts the specified string value into its JavaScript Date equivalent using the specified format {String} or formats {Array} and the CultureInfo specific format information.
|
|
1146
|
+
* The format of the string value must match one of the supplied formats exactly.
|
|
1147
|
+
*
|
|
1148
|
+
* Example
|
|
1149
|
+
<pre><code>
|
|
1150
|
+
// 15-Oct-2004
|
|
1151
|
+
var d1 = Date.parseExact("10/15/2004", "M/d/yyyy");
|
|
1152
|
+
|
|
1153
|
+
// 15-Oct-2004
|
|
1154
|
+
var d1 = Date.parse("15-Oct-2004", "M-ddd-yyyy");
|
|
1155
|
+
|
|
1156
|
+
// 15-Oct-2004
|
|
1157
|
+
var d1 = Date.parse("2004.10.15", "yyyy.MM.dd");
|
|
1158
|
+
|
|
1159
|
+
// Multiple formats
|
|
1160
|
+
var d1 = Date.parseExact("10/15/2004", ["M/d/yyyy", "MMMM d, yyyy"]);
|
|
1161
|
+
</code></pre>
|
|
1162
|
+
*
|
|
1163
|
+
* @param {String} The string value to convert into a Date object [Required].
|
|
1164
|
+
* @param {Object} The expected format {String} or an array of expected formats {Array} of the date string [Required].
|
|
1165
|
+
* @return {Date} A Date object or null if the string cannot be converted into a Date.
|
|
1166
|
+
*/
|
|
1167
|
+
$D.parseExact = function (s, fx) {
|
|
1168
|
+
return $D.getParseFunction(fx)(s);
|
|
1169
|
+
};
|
|
1170
|
+
}());
|