datejs-rails 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }());