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.
Files changed (328) hide show
  1. data/.gitignore +2 -0
  2. data/README.md +9 -6
  3. data/Rakefile +21 -0
  4. data/app/assets/javascripts/date.js +8 -0
  5. data/changelog.md +4 -0
  6. data/datejs-rails.gemspec +13 -0
  7. data/vendor/assets/javascripts/date/af-ZA.js +195 -0
  8. data/vendor/assets/javascripts/date/ar-AE.js +195 -0
  9. data/vendor/assets/javascripts/date/ar-BH.js +195 -0
  10. data/vendor/assets/javascripts/date/ar-DZ.js +195 -0
  11. data/vendor/assets/javascripts/date/ar-EG.js +195 -0
  12. data/vendor/assets/javascripts/date/ar-IQ.js +195 -0
  13. data/vendor/assets/javascripts/date/ar-JO.js +195 -0
  14. data/vendor/assets/javascripts/date/ar-KW.js +195 -0
  15. data/vendor/assets/javascripts/date/ar-LB.js +195 -0
  16. data/vendor/assets/javascripts/date/ar-LY.js +195 -0
  17. data/vendor/assets/javascripts/date/ar-MA.js +195 -0
  18. data/vendor/assets/javascripts/date/ar-OM.js +195 -0
  19. data/vendor/assets/javascripts/date/ar-QA.js +195 -0
  20. data/vendor/assets/javascripts/date/ar-SA.js +195 -0
  21. data/vendor/assets/javascripts/date/ar-SY.js +195 -0
  22. data/vendor/assets/javascripts/date/ar-TN.js +195 -0
  23. data/vendor/assets/javascripts/date/ar-YE.js +195 -0
  24. data/vendor/assets/javascripts/date/az-Cyrl-AZ.js +195 -0
  25. data/vendor/assets/javascripts/date/az-Latn-AZ.js +195 -0
  26. data/vendor/assets/javascripts/date/be-BY.js +195 -0
  27. data/vendor/assets/javascripts/date/bg-BG.js +195 -0
  28. data/vendor/assets/javascripts/date/bs-Latn-BA.js +195 -0
  29. data/vendor/assets/javascripts/date/ca-ES.js +195 -0
  30. data/vendor/assets/javascripts/date/core.js +871 -0
  31. data/vendor/assets/javascripts/date/cs-CZ.js +195 -0
  32. data/vendor/assets/javascripts/date/cy-GB.js +195 -0
  33. data/vendor/assets/javascripts/date/da-DK.js +195 -0
  34. data/vendor/assets/javascripts/date/date.js +21 -0
  35. data/vendor/assets/javascripts/date/de-AT.js +195 -0
  36. data/vendor/assets/javascripts/date/de-CH.js +195 -0
  37. data/vendor/assets/javascripts/date/de-DE.js +195 -0
  38. data/vendor/assets/javascripts/date/de-LI.js +195 -0
  39. data/vendor/assets/javascripts/date/de-LU.js +195 -0
  40. data/vendor/assets/javascripts/date/dv-MV.js +195 -0
  41. data/vendor/assets/javascripts/date/el-GR.js +195 -0
  42. data/vendor/assets/javascripts/date/en-029.js +195 -0
  43. data/vendor/assets/javascripts/date/en-AU.js +195 -0
  44. data/vendor/assets/javascripts/date/en-BZ.js +195 -0
  45. data/vendor/assets/javascripts/date/en-CA.js +195 -0
  46. data/vendor/assets/javascripts/date/en-GB.js +195 -0
  47. data/vendor/assets/javascripts/date/en-IE.js +195 -0
  48. data/vendor/assets/javascripts/date/en-JM.js +195 -0
  49. data/vendor/assets/javascripts/date/en-NZ.js +195 -0
  50. data/vendor/assets/javascripts/date/en-PH.js +195 -0
  51. data/vendor/assets/javascripts/date/en-TT.js +195 -0
  52. data/vendor/assets/javascripts/date/en-US.js +195 -0
  53. data/vendor/assets/javascripts/date/en-ZA.js +195 -0
  54. data/vendor/assets/javascripts/date/en-ZW.js +195 -0
  55. data/vendor/assets/javascripts/date/es-AR.js +195 -0
  56. data/vendor/assets/javascripts/date/es-BO.js +195 -0
  57. data/vendor/assets/javascripts/date/es-CL.js +195 -0
  58. data/vendor/assets/javascripts/date/es-CO.js +195 -0
  59. data/vendor/assets/javascripts/date/es-CR.js +195 -0
  60. data/vendor/assets/javascripts/date/es-DO.js +195 -0
  61. data/vendor/assets/javascripts/date/es-EC.js +195 -0
  62. data/vendor/assets/javascripts/date/es-ES.js +195 -0
  63. data/vendor/assets/javascripts/date/es-GT.js +195 -0
  64. data/vendor/assets/javascripts/date/es-HN.js +195 -0
  65. data/vendor/assets/javascripts/date/es-MX.js +195 -0
  66. data/vendor/assets/javascripts/date/es-NI.js +195 -0
  67. data/vendor/assets/javascripts/date/es-PA.js +195 -0
  68. data/vendor/assets/javascripts/date/es-PE.js +195 -0
  69. data/vendor/assets/javascripts/date/es-PR.js +195 -0
  70. data/vendor/assets/javascripts/date/es-PY.js +195 -0
  71. data/vendor/assets/javascripts/date/es-SV.js +195 -0
  72. data/vendor/assets/javascripts/date/es-UY.js +195 -0
  73. data/vendor/assets/javascripts/date/es-VE.js +195 -0
  74. data/vendor/assets/javascripts/date/et-EE.js +195 -0
  75. data/vendor/assets/javascripts/date/eu-ES.js +195 -0
  76. data/vendor/assets/javascripts/{datejs-extras.js → date/extras.js} +1 -1
  77. data/vendor/assets/javascripts/date/fa-IR.js +195 -0
  78. data/vendor/assets/javascripts/date/fi-FI.js +195 -0
  79. data/vendor/assets/javascripts/date/fo-FO.js +195 -0
  80. data/vendor/assets/javascripts/date/fr-BE.js +195 -0
  81. data/vendor/assets/javascripts/date/fr-CA.js +195 -0
  82. data/vendor/assets/javascripts/date/fr-CH.js +195 -0
  83. data/vendor/assets/javascripts/date/fr-FR.js +195 -0
  84. data/vendor/assets/javascripts/date/fr-LU.js +195 -0
  85. data/vendor/assets/javascripts/date/fr-MC.js +195 -0
  86. data/vendor/assets/javascripts/date/gl-ES.js +195 -0
  87. data/vendor/assets/javascripts/date/gu-IN.js +195 -0
  88. data/vendor/assets/javascripts/date/he-IL.js +195 -0
  89. data/vendor/assets/javascripts/date/hi-IN.js +195 -0
  90. data/vendor/assets/javascripts/date/hr-BA.js +195 -0
  91. data/vendor/assets/javascripts/date/hr-HR.js +195 -0
  92. data/vendor/assets/javascripts/date/hu-HU.js +195 -0
  93. data/vendor/assets/javascripts/date/hy-AM.js +195 -0
  94. data/vendor/assets/javascripts/date/id-ID.js +195 -0
  95. data/vendor/assets/javascripts/date/is-IS.js +195 -0
  96. data/vendor/assets/javascripts/date/it-CH.js +195 -0
  97. data/vendor/assets/javascripts/date/it-IT.js +195 -0
  98. data/vendor/assets/javascripts/date/ja-JP.js +195 -0
  99. data/vendor/assets/javascripts/date/ka-GE.js +195 -0
  100. data/vendor/assets/javascripts/date/kk-KZ.js +195 -0
  101. data/vendor/assets/javascripts/date/kn-IN.js +195 -0
  102. data/vendor/assets/javascripts/date/ko-KR.js +195 -0
  103. data/vendor/assets/javascripts/date/kok-IN.js +195 -0
  104. data/vendor/assets/javascripts/date/ky-KG.js +195 -0
  105. data/vendor/assets/javascripts/date/lt-LT.js +195 -0
  106. data/vendor/assets/javascripts/date/lv-LV.js +195 -0
  107. data/vendor/assets/javascripts/date/mi-NZ.js +195 -0
  108. data/vendor/assets/javascripts/date/mk-MK.js +195 -0
  109. data/vendor/assets/javascripts/date/mn-MN.js +195 -0
  110. data/vendor/assets/javascripts/date/mr-IN.js +195 -0
  111. data/vendor/assets/javascripts/date/ms-BN.js +195 -0
  112. data/vendor/assets/javascripts/date/ms-MY.js +195 -0
  113. data/vendor/assets/javascripts/date/mt-MT.js +195 -0
  114. data/vendor/assets/javascripts/date/nb-NO.js +195 -0
  115. data/vendor/assets/javascripts/date/nl-BE.js +195 -0
  116. data/vendor/assets/javascripts/date/nl-NL.js +195 -0
  117. data/vendor/assets/javascripts/date/nn-NO.js +195 -0
  118. data/vendor/assets/javascripts/date/ns-ZA.js +195 -0
  119. data/vendor/assets/javascripts/date/pa-IN.js +195 -0
  120. data/vendor/assets/javascripts/date/parser.js +1170 -0
  121. data/vendor/assets/javascripts/date/pl-PL.js +195 -0
  122. data/vendor/assets/javascripts/date/pt-BR.js +195 -0
  123. data/vendor/assets/javascripts/date/pt-PT.js +195 -0
  124. data/vendor/assets/javascripts/date/quz-BO.js +195 -0
  125. data/vendor/assets/javascripts/date/quz-EC.js +195 -0
  126. data/vendor/assets/javascripts/date/quz-PE.js +195 -0
  127. data/vendor/assets/javascripts/date/ro-RO.js +195 -0
  128. data/vendor/assets/javascripts/date/ru-RU.js +195 -0
  129. data/vendor/assets/javascripts/date/sa-IN.js +195 -0
  130. data/vendor/assets/javascripts/date/se-FI.js +195 -0
  131. data/vendor/assets/javascripts/date/se-NO.js +195 -0
  132. data/vendor/assets/javascripts/date/se-SE.js +195 -0
  133. data/vendor/assets/javascripts/date/sk-SK.js +195 -0
  134. data/vendor/assets/javascripts/date/sl-SI.js +195 -0
  135. data/vendor/assets/javascripts/date/sma-NO.js +195 -0
  136. data/vendor/assets/javascripts/date/sma-SE.js +195 -0
  137. data/vendor/assets/javascripts/date/smj-NO.js +195 -0
  138. data/vendor/assets/javascripts/date/smj-SE.js +195 -0
  139. data/vendor/assets/javascripts/date/smn-FI.js +195 -0
  140. data/vendor/assets/javascripts/date/sms-FI.js +195 -0
  141. data/vendor/assets/javascripts/date/sq-AL.js +195 -0
  142. data/vendor/assets/javascripts/date/sr-Cyrl-BA.js +195 -0
  143. data/vendor/assets/javascripts/date/sr-Cyrl-CS.js +195 -0
  144. data/vendor/assets/javascripts/date/sr-Latn-BA.js +195 -0
  145. data/vendor/assets/javascripts/date/sr-Latn-CS.js +195 -0
  146. data/vendor/assets/javascripts/date/sugarpak.js +476 -0
  147. data/vendor/assets/javascripts/date/sv-FI.js +195 -0
  148. data/vendor/assets/javascripts/date/sv-SE.js +195 -0
  149. data/vendor/assets/javascripts/date/sw-KE.js +195 -0
  150. data/vendor/assets/javascripts/date/syr-SY.js +195 -0
  151. data/vendor/assets/javascripts/date/ta-IN.js +195 -0
  152. data/vendor/assets/javascripts/date/te-IN.js +195 -0
  153. data/vendor/assets/javascripts/date/th-TH.js +195 -0
  154. data/vendor/assets/javascripts/date/time.js +269 -0
  155. data/vendor/assets/javascripts/date/tn-ZA.js +195 -0
  156. data/vendor/assets/javascripts/date/tr-TR.js +195 -0
  157. data/vendor/assets/javascripts/date/tt-RU.js +195 -0
  158. data/vendor/assets/javascripts/date/uk-UA.js +195 -0
  159. data/vendor/assets/javascripts/date/ur-PK.js +195 -0
  160. data/vendor/assets/javascripts/date/uz-Cyrl-UZ.js +195 -0
  161. data/vendor/assets/javascripts/date/uz-Latn-UZ.js +195 -0
  162. data/vendor/assets/javascripts/date/vi-VN.js +195 -0
  163. data/vendor/assets/javascripts/date/xh-ZA.js +195 -0
  164. data/vendor/assets/javascripts/date/zh-CN.js +195 -0
  165. data/vendor/assets/javascripts/date/zh-HK.js +195 -0
  166. data/vendor/assets/javascripts/date/zh-MO.js +195 -0
  167. data/vendor/assets/javascripts/date/zh-SG.js +195 -0
  168. data/vendor/assets/javascripts/date/zh-TW.js +195 -0
  169. data/vendor/assets/javascripts/date/zu-ZA.js +195 -0
  170. metadata +221 -188
  171. data/vendor/assets/javascripts/date-af-ZA.js +0 -104
  172. data/vendor/assets/javascripts/date-ar-AE.js +0 -104
  173. data/vendor/assets/javascripts/date-ar-BH.js +0 -104
  174. data/vendor/assets/javascripts/date-ar-DZ.js +0 -104
  175. data/vendor/assets/javascripts/date-ar-EG.js +0 -104
  176. data/vendor/assets/javascripts/date-ar-IQ.js +0 -104
  177. data/vendor/assets/javascripts/date-ar-JO.js +0 -104
  178. data/vendor/assets/javascripts/date-ar-KW.js +0 -104
  179. data/vendor/assets/javascripts/date-ar-LB.js +0 -104
  180. data/vendor/assets/javascripts/date-ar-LY.js +0 -104
  181. data/vendor/assets/javascripts/date-ar-MA.js +0 -104
  182. data/vendor/assets/javascripts/date-ar-OM.js +0 -104
  183. data/vendor/assets/javascripts/date-ar-QA.js +0 -104
  184. data/vendor/assets/javascripts/date-ar-SA.js +0 -104
  185. data/vendor/assets/javascripts/date-ar-SY.js +0 -104
  186. data/vendor/assets/javascripts/date-ar-TN.js +0 -104
  187. data/vendor/assets/javascripts/date-ar-YE.js +0 -104
  188. data/vendor/assets/javascripts/date-az-Cyrl-AZ.js +0 -104
  189. data/vendor/assets/javascripts/date-az-Latn-AZ.js +0 -104
  190. data/vendor/assets/javascripts/date-be-BY.js +0 -104
  191. data/vendor/assets/javascripts/date-bg-BG.js +0 -104
  192. data/vendor/assets/javascripts/date-bs-Latn-BA.js +0 -104
  193. data/vendor/assets/javascripts/date-ca-ES.js +0 -104
  194. data/vendor/assets/javascripts/date-cs-CZ.js +0 -104
  195. data/vendor/assets/javascripts/date-cy-GB.js +0 -104
  196. data/vendor/assets/javascripts/date-da-DK.js +0 -104
  197. data/vendor/assets/javascripts/date-de-AT.js +0 -104
  198. data/vendor/assets/javascripts/date-de-CH.js +0 -104
  199. data/vendor/assets/javascripts/date-de-DE.js +0 -104
  200. data/vendor/assets/javascripts/date-de-LI.js +0 -104
  201. data/vendor/assets/javascripts/date-de-LU.js +0 -104
  202. data/vendor/assets/javascripts/date-dv-MV.js +0 -104
  203. data/vendor/assets/javascripts/date-el-GR.js +0 -104
  204. data/vendor/assets/javascripts/date-en-029.js +0 -104
  205. data/vendor/assets/javascripts/date-en-AU.js +0 -104
  206. data/vendor/assets/javascripts/date-en-BZ.js +0 -104
  207. data/vendor/assets/javascripts/date-en-CA.js +0 -104
  208. data/vendor/assets/javascripts/date-en-GB.js +0 -104
  209. data/vendor/assets/javascripts/date-en-IE.js +0 -104
  210. data/vendor/assets/javascripts/date-en-JM.js +0 -104
  211. data/vendor/assets/javascripts/date-en-NZ.js +0 -104
  212. data/vendor/assets/javascripts/date-en-PH.js +0 -104
  213. data/vendor/assets/javascripts/date-en-TT.js +0 -104
  214. data/vendor/assets/javascripts/date-en-US.js +0 -104
  215. data/vendor/assets/javascripts/date-en-ZA.js +0 -104
  216. data/vendor/assets/javascripts/date-en-ZW.js +0 -104
  217. data/vendor/assets/javascripts/date-es-AR.js +0 -104
  218. data/vendor/assets/javascripts/date-es-BO.js +0 -104
  219. data/vendor/assets/javascripts/date-es-CL.js +0 -104
  220. data/vendor/assets/javascripts/date-es-CO.js +0 -104
  221. data/vendor/assets/javascripts/date-es-CR.js +0 -104
  222. data/vendor/assets/javascripts/date-es-DO.js +0 -104
  223. data/vendor/assets/javascripts/date-es-EC.js +0 -104
  224. data/vendor/assets/javascripts/date-es-ES.js +0 -104
  225. data/vendor/assets/javascripts/date-es-GT.js +0 -104
  226. data/vendor/assets/javascripts/date-es-HN.js +0 -104
  227. data/vendor/assets/javascripts/date-es-MX.js +0 -104
  228. data/vendor/assets/javascripts/date-es-NI.js +0 -104
  229. data/vendor/assets/javascripts/date-es-PA.js +0 -104
  230. data/vendor/assets/javascripts/date-es-PE.js +0 -104
  231. data/vendor/assets/javascripts/date-es-PR.js +0 -104
  232. data/vendor/assets/javascripts/date-es-PY.js +0 -104
  233. data/vendor/assets/javascripts/date-es-SV.js +0 -104
  234. data/vendor/assets/javascripts/date-es-UY.js +0 -104
  235. data/vendor/assets/javascripts/date-es-VE.js +0 -104
  236. data/vendor/assets/javascripts/date-et-EE.js +0 -104
  237. data/vendor/assets/javascripts/date-eu-ES.js +0 -104
  238. data/vendor/assets/javascripts/date-fa-IR.js +0 -104
  239. data/vendor/assets/javascripts/date-fi-FI.js +0 -104
  240. data/vendor/assets/javascripts/date-fo-FO.js +0 -104
  241. data/vendor/assets/javascripts/date-fr-BE.js +0 -104
  242. data/vendor/assets/javascripts/date-fr-CA.js +0 -104
  243. data/vendor/assets/javascripts/date-fr-CH.js +0 -104
  244. data/vendor/assets/javascripts/date-fr-FR.js +0 -104
  245. data/vendor/assets/javascripts/date-fr-LU.js +0 -104
  246. data/vendor/assets/javascripts/date-fr-MC.js +0 -104
  247. data/vendor/assets/javascripts/date-gl-ES.js +0 -104
  248. data/vendor/assets/javascripts/date-gu-IN.js +0 -104
  249. data/vendor/assets/javascripts/date-he-IL.js +0 -104
  250. data/vendor/assets/javascripts/date-hi-IN.js +0 -104
  251. data/vendor/assets/javascripts/date-hr-BA.js +0 -104
  252. data/vendor/assets/javascripts/date-hr-HR.js +0 -104
  253. data/vendor/assets/javascripts/date-hu-HU.js +0 -104
  254. data/vendor/assets/javascripts/date-hy-AM.js +0 -104
  255. data/vendor/assets/javascripts/date-id-ID.js +0 -104
  256. data/vendor/assets/javascripts/date-is-IS.js +0 -104
  257. data/vendor/assets/javascripts/date-it-CH.js +0 -104
  258. data/vendor/assets/javascripts/date-it-IT.js +0 -104
  259. data/vendor/assets/javascripts/date-ja-JP.js +0 -104
  260. data/vendor/assets/javascripts/date-ka-GE.js +0 -104
  261. data/vendor/assets/javascripts/date-kk-KZ.js +0 -104
  262. data/vendor/assets/javascripts/date-kn-IN.js +0 -104
  263. data/vendor/assets/javascripts/date-ko-KR.js +0 -104
  264. data/vendor/assets/javascripts/date-kok-IN.js +0 -104
  265. data/vendor/assets/javascripts/date-ky-KG.js +0 -104
  266. data/vendor/assets/javascripts/date-lt-LT.js +0 -104
  267. data/vendor/assets/javascripts/date-lv-LV.js +0 -104
  268. data/vendor/assets/javascripts/date-mi-NZ.js +0 -104
  269. data/vendor/assets/javascripts/date-mk-MK.js +0 -104
  270. data/vendor/assets/javascripts/date-mn-MN.js +0 -104
  271. data/vendor/assets/javascripts/date-mr-IN.js +0 -104
  272. data/vendor/assets/javascripts/date-ms-BN.js +0 -104
  273. data/vendor/assets/javascripts/date-ms-MY.js +0 -104
  274. data/vendor/assets/javascripts/date-mt-MT.js +0 -104
  275. data/vendor/assets/javascripts/date-nb-NO.js +0 -104
  276. data/vendor/assets/javascripts/date-nl-BE.js +0 -104
  277. data/vendor/assets/javascripts/date-nl-NL.js +0 -104
  278. data/vendor/assets/javascripts/date-nn-NO.js +0 -104
  279. data/vendor/assets/javascripts/date-ns-ZA.js +0 -104
  280. data/vendor/assets/javascripts/date-pa-IN.js +0 -104
  281. data/vendor/assets/javascripts/date-pl-PL.js +0 -104
  282. data/vendor/assets/javascripts/date-pt-BR.js +0 -104
  283. data/vendor/assets/javascripts/date-pt-PT.js +0 -104
  284. data/vendor/assets/javascripts/date-quz-BO.js +0 -104
  285. data/vendor/assets/javascripts/date-quz-EC.js +0 -104
  286. data/vendor/assets/javascripts/date-quz-PE.js +0 -104
  287. data/vendor/assets/javascripts/date-ro-RO.js +0 -104
  288. data/vendor/assets/javascripts/date-ru-RU.js +0 -104
  289. data/vendor/assets/javascripts/date-sa-IN.js +0 -104
  290. data/vendor/assets/javascripts/date-se-FI.js +0 -104
  291. data/vendor/assets/javascripts/date-se-NO.js +0 -104
  292. data/vendor/assets/javascripts/date-se-SE.js +0 -104
  293. data/vendor/assets/javascripts/date-sk-SK.js +0 -104
  294. data/vendor/assets/javascripts/date-sl-SI.js +0 -104
  295. data/vendor/assets/javascripts/date-sma-NO.js +0 -104
  296. data/vendor/assets/javascripts/date-sma-SE.js +0 -104
  297. data/vendor/assets/javascripts/date-smj-NO.js +0 -104
  298. data/vendor/assets/javascripts/date-smj-SE.js +0 -104
  299. data/vendor/assets/javascripts/date-smn-FI.js +0 -104
  300. data/vendor/assets/javascripts/date-sms-FI.js +0 -104
  301. data/vendor/assets/javascripts/date-sq-AL.js +0 -104
  302. data/vendor/assets/javascripts/date-sr-Cyrl-BA.js +0 -104
  303. data/vendor/assets/javascripts/date-sr-Cyrl-CS.js +0 -104
  304. data/vendor/assets/javascripts/date-sr-Latn-BA.js +0 -104
  305. data/vendor/assets/javascripts/date-sr-Latn-CS.js +0 -104
  306. data/vendor/assets/javascripts/date-sv-FI.js +0 -104
  307. data/vendor/assets/javascripts/date-sv-SE.js +0 -104
  308. data/vendor/assets/javascripts/date-sw-KE.js +0 -104
  309. data/vendor/assets/javascripts/date-syr-SY.js +0 -104
  310. data/vendor/assets/javascripts/date-ta-IN.js +0 -104
  311. data/vendor/assets/javascripts/date-te-IN.js +0 -104
  312. data/vendor/assets/javascripts/date-th-TH.js +0 -104
  313. data/vendor/assets/javascripts/date-tn-ZA.js +0 -104
  314. data/vendor/assets/javascripts/date-tr-TR.js +0 -104
  315. data/vendor/assets/javascripts/date-tt-RU.js +0 -104
  316. data/vendor/assets/javascripts/date-uk-UA.js +0 -104
  317. data/vendor/assets/javascripts/date-ur-PK.js +0 -104
  318. data/vendor/assets/javascripts/date-uz-Cyrl-UZ.js +0 -104
  319. data/vendor/assets/javascripts/date-uz-Latn-UZ.js +0 -104
  320. data/vendor/assets/javascripts/date-vi-VN.js +0 -104
  321. data/vendor/assets/javascripts/date-xh-ZA.js +0 -104
  322. data/vendor/assets/javascripts/date-zh-CN.js +0 -104
  323. data/vendor/assets/javascripts/date-zh-HK.js +0 -104
  324. data/vendor/assets/javascripts/date-zh-MO.js +0 -104
  325. data/vendor/assets/javascripts/date-zh-SG.js +0 -104
  326. data/vendor/assets/javascripts/date-zh-TW.js +0 -104
  327. data/vendor/assets/javascripts/date-zu-ZA.js +0 -104
  328. 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
+ }());