Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

datetime-utils

  • Loading branch information...
commit 756aa202f3ff9f15b9194867a9d3cf817b5ea359 1 parent f9ba74e
John Lindal authored
Showing with 17,561 additions and 1 deletion.
  1. +331 −0 datetime-utils/gallery-datetime-utils-debug.js
  2. +295 −0 datetime-utils/gallery-funcprog-debug.js
  3. +380 −0 datetime-utils/gallery-object-extras-debug.js
  4. +150 −0 datetime-utils/index.html
  5. +67 −0 input-calendar-sync/index.html
  6. +14 −0 yuidoc/api.js
  7. +8 −0 yuidoc/classes/Accordion.html
  8. +8 −0 yuidoc/classes/ArrayIterator.html
  9. +8 −0 yuidoc/classes/ArrayList~extras.html
  10. +8 −0 yuidoc/classes/Array~algorithms.html
  11. +8 −0 yuidoc/classes/Array~funcprog-extras.html
  12. +8 −0 yuidoc/classes/Array~object-extras.html
  13. +8 −0 yuidoc/classes/Assert.html
  14. +8 −0 yuidoc/classes/AtLeastOneCheckboxGroup.html
  15. +8 −0 yuidoc/classes/AtMostOneCheckboxGroup.html
  16. +8 −0 yuidoc/classes/BulkEditor.html
  17. +8 −0 yuidoc/classes/Canvas.Context2d.html
  18. +8 −0 yuidoc/classes/CheckboxGroup.html
  19. +8 −0 yuidoc/classes/Chipper.html
  20. +8 −0 yuidoc/classes/ComplexMath.html
  21. +8 −0 yuidoc/classes/ComplexNumber.html
  22. +8 −0 yuidoc/classes/DataSource.AsyncFunction.html
  23. +8 −0 yuidoc/classes/DataSource.BulkEdit.html
  24. +8 −0 yuidoc/classes/DataSource.Treeble.html
  25. +1,572 −0 yuidoc/classes/DateTimeUtils.html
  26. +8 −0 yuidoc/classes/EnableIfAnyCheckboxGroup.html
  27. +8 −0 yuidoc/classes/ExpirationCache.html
  28. +8 −0 yuidoc/classes/ExpressionBuilder.html
  29. +8 −0 yuidoc/classes/FormManager.html
  30. +8 −0 yuidoc/classes/HTMLTableBulkEditor.html
  31. +8 −0 yuidoc/classes/InstanceManager.html
  32. +8 −0 yuidoc/classes/Iterable.html
  33. +8 −0 yuidoc/classes/LinkedList.html
  34. +8 −0 yuidoc/classes/LinkedListItem.html
  35. +8 −0 yuidoc/classes/LinkedListIterator.html
  36. +8 −0 yuidoc/classes/MRUCache.html
  37. +8 −0 yuidoc/classes/Math.html
  38. +8 −0 yuidoc/classes/MathCanvas.Parser.html
  39. +8 −0 yuidoc/classes/MathCanvas.RectList.html
  40. +8 −0 yuidoc/classes/MathCanvas.html
  41. +8 −0 yuidoc/classes/MathFunction.Arccosine.html
  42. +8 −0 yuidoc/classes/MathFunction.Arcsine.html
  43. +8 −0 yuidoc/classes/MathFunction.Arctangent.html
  44. +8 −0 yuidoc/classes/MathFunction.Arctangent2.html
  45. +8 −0 yuidoc/classes/MathFunction.Conjugate.html
  46. +8 −0 yuidoc/classes/MathFunction.Cosine.html
  47. +8 −0 yuidoc/classes/MathFunction.E.html
  48. +8 −0 yuidoc/classes/MathFunction.Exponential.html
  49. +8 −0 yuidoc/classes/MathFunction.FunctionWithArgs.html
  50. +8 −0 yuidoc/classes/MathFunction.HyperbolicCosine.html
  51. +8 −0 yuidoc/classes/MathFunction.HyperbolicSine.html
  52. +8 −0 yuidoc/classes/MathFunction.HyperbolicTangent.html
  53. +8 −0 yuidoc/classes/MathFunction.I.html
  54. +8 −0 yuidoc/classes/MathFunction.ImaginaryPart.html
  55. +8 −0 yuidoc/classes/MathFunction.InverseHyperbolicCosine.html
  56. +8 −0 yuidoc/classes/MathFunction.InverseHyperbolicSine.html
  57. +8 −0 yuidoc/classes/MathFunction.InverseHyperbolicTangent.html
  58. +8 −0 yuidoc/classes/MathFunction.Logarithm.html
  59. +8 −0 yuidoc/classes/MathFunction.Magnitude.html
  60. +8 −0 yuidoc/classes/MathFunction.Max.html
  61. +8 −0 yuidoc/classes/MathFunction.Min.html
  62. +8 −0 yuidoc/classes/MathFunction.NaturalLog.html
  63. +8 −0 yuidoc/classes/MathFunction.Negate.html
  64. +8 −0 yuidoc/classes/MathFunction.Phase.html
  65. +8 −0 yuidoc/classes/MathFunction.Pi.html
  66. +8 −0 yuidoc/classes/MathFunction.Product.html
  67. +8 −0 yuidoc/classes/MathFunction.Quotient.html
  68. +8 −0 yuidoc/classes/MathFunction.RealPart.html
  69. +8 −0 yuidoc/classes/MathFunction.Rotate.html
  70. +8 −0 yuidoc/classes/MathFunction.Sine.html
  71. +8 −0 yuidoc/classes/MathFunction.SquareRoot.html
  72. +8 −0 yuidoc/classes/MathFunction.Sum.html
  73. +8 −0 yuidoc/classes/MathFunction.Tangent.html
  74. +8 −0 yuidoc/classes/MathFunction.Value.html
  75. +8 −0 yuidoc/classes/MathFunction.Variable.html
  76. +8 −0 yuidoc/classes/MathFunction.html
  77. +8 −0 yuidoc/classes/MatrixBackground.html
  78. +8 −0 yuidoc/classes/MatrixCredits.html
  79. +8 −0 yuidoc/classes/MultiObject.html
  80. +8 −0 yuidoc/classes/NodeList~extras2.html
  81. +8 −0 yuidoc/classes/Node~dimensions.html
  82. +8 −0 yuidoc/classes/Node~optimizations.html
  83. +8 −0 yuidoc/classes/Node~scrollIntoView.html
  84. +8 −0 yuidoc/classes/Object~extras.html
  85. +8 −0 yuidoc/classes/PageLayout.html
  86. +8 −0 yuidoc/classes/Paginator.html
  87. +8 −0 yuidoc/classes/Paginator.ui.CurrentPageInput.html
  88. +8 −0 yuidoc/classes/Paginator.ui.CurrentPageReport.html
  89. +8 −0 yuidoc/classes/Paginator.ui.FirstPageLink.html
  90. +8 −0 yuidoc/classes/Paginator.ui.ItemRangeDropdown.html
  91. +8 −0 yuidoc/classes/Paginator.ui.LastPageLink.html
  92. +8 −0 yuidoc/classes/Paginator.ui.NextPageLink.html
  93. +8 −0 yuidoc/classes/Paginator.ui.PageLinks.html
  94. +8 −0 yuidoc/classes/Paginator.ui.PreviousPageLink.html
  95. +8 −0 yuidoc/classes/Paginator.ui.RowsPerPageDropdown.html
  96. +8 −0 yuidoc/classes/Paginator.ui.ValidationPageLinks.html
  97. +8 −0 yuidoc/classes/Parsers.html
  98. +8 −0 yuidoc/classes/Plugin.BusyOverlay.html
  99. +8 −0 yuidoc/classes/Plugin.ConsoleTest.html
  100. +8 −0 yuidoc/classes/Plugin.DataTableQuickEdit.html
  101. +8 −0 yuidoc/classes/Plugin.DataTableRowExpansion.html
  102. +8 −0 yuidoc/classes/Plugin.DataTableState.html
  103. +8 −0 yuidoc/classes/Plugin.FixedSizeAccordion.html
  104. +10,153 −0 yuidoc/classes/Plugin.InputCalendarSync.html
  105. +8 −0 yuidoc/classes/Plugin.Neon.html
  106. +8 −0 yuidoc/classes/Plugin.OverlayForm.html
  107. +8 −0 yuidoc/classes/Plugin.PageLayoutDataTableModule.html
  108. +8 −0 yuidoc/classes/QueryBuilder.Select.html
  109. +8 −0 yuidoc/classes/QueryBuilder.String.html
  110. +8 −0 yuidoc/classes/QueryBuilder.html
  111. +8 −0 yuidoc/classes/RPC.Mojito.html
  112. +8 −0 yuidoc/classes/SelectAllCheckboxGroup.html
  113. +8 −0 yuidoc/classes/Sort.html
  114. +8 −0 yuidoc/classes/Treeble.html
  115. +8 −0 yuidoc/classes/YUI~funcprog.html
  116. +8 −0 yuidoc/classes/io~multiresponse.html
  117. +317 −0 yuidoc/data.json
  118. +8 −0 yuidoc/files/src_gallery-accordion-horiz-vert_js_Accordion.js.html
  119. +8 −0 yuidoc/files/src_gallery-accordion-horiz-vert_js_FixedSizePlugin.js.html
  120. +8 −0 yuidoc/files/src_gallery-algorithms_js_Array.js.html
  121. +8 −0 yuidoc/files/src_gallery-algorithms_js_ArrayList.js.html
  122. +8 −0 yuidoc/files/src_gallery-anim-class_js_anim-class.js.html
  123. +8 −0 yuidoc/files/src_gallery-bulkedit_js_BulkEditDataSource.js.html
  124. +8 −0 yuidoc/files/src_gallery-bulkedit_js_BulkEditor.js.html
  125. +8 −0 yuidoc/files/src_gallery-bulkedit_js_HTMLTableBulkEditor.js.html
  126. +8 −0 yuidoc/files/src_gallery-busyoverlay_js_BusyOverlay.js.html
  127. +8 −0 yuidoc/files/src_gallery-canvas_js_Context2d.js.html
  128. +8 −0 yuidoc/files/src_gallery-checkboxgroups_js_AtLeastOneCheckboxGroup.js.html
  129. +8 −0 yuidoc/files/src_gallery-checkboxgroups_js_AtMostOneCheckboxGroup.js.html
  130. +8 −0 yuidoc/files/src_gallery-checkboxgroups_js_CheckboxGroup.js.html
  131. +8 −0 yuidoc/files/src_gallery-checkboxgroups_js_EnableIfAnyCheckboxGroup.js.html
  132. +8 −0 yuidoc/files/src_gallery-checkboxgroups_js_SelectAllCheckboxGroup.js.html
  133. +8 −0 yuidoc/files/src_gallery-chipper_js_Chipper.js.html
  134. +8 −0 yuidoc/files/src_gallery-complexnumber_js_ComplexMath.js.html
  135. +8 −0 yuidoc/files/src_gallery-complexnumber_js_ComplexNumber.js.html
  136. +8 −0 yuidoc/files/src_gallery-console-test_js_console-test.js.html
  137. +8 −0 yuidoc/files/src_gallery-datasource-async-function_js_AsyncFunctionDataSource.js.html
  138. +8 −0 yuidoc/files/src_gallery-datatable-row-expansion_js_row-expansion.js.html
  139. +8 −0 yuidoc/files/src_gallery-datatable-state_js_state.js.html
  140. +748 −0 yuidoc/files/src_gallery-datetime-utils_js_utils.js.html
  141. +8 −0 yuidoc/files/src_gallery-dimensions_js_Dimensions.js.html
  142. +8 −0 yuidoc/files/src_gallery-expiration-cache_js_ExpirationCache.js.html
  143. +8 −0 yuidoc/files/src_gallery-exprbuilder_js_ExpressionBuilder.js.html
  144. +8 −0 yuidoc/files/src_gallery-formmgr-css-validation_js_CSSValidation.js.html
  145. +8 −0 yuidoc/files/src_gallery-formmgr-overlay-plugin_js_OverlayFormPlugin.js.html
  146. +8 −0 yuidoc/files/src_gallery-formmgr_js_FormManager.js.html
  147. +8 −0 yuidoc/files/src_gallery-funcprog_js_array-extras.js.html
  148. +8 −0 yuidoc/files/src_gallery-funcprog_js_yui-extras.js.html
  149. +487 −0 yuidoc/files/src_gallery-input-calendar-sync_js_sync.js.html
  150. +8 −0 yuidoc/files/src_gallery-instancemanager_js_InstanceManager.js.html
  151. +8 −0 yuidoc/files/src_gallery-io-multiresponse_js_multi-response.js.html
  152. +8 −0 yuidoc/files/src_gallery-iterable-extras_js_array-iterator.js.html
  153. +8 −0 yuidoc/files/src_gallery-iterable-extras_js_iterable-extras.js.html
  154. +8 −0 yuidoc/files/src_gallery-layout-cols_js_PageLayoutCols.js.html
  155. +8 −0 yuidoc/files/src_gallery-layout-datatable_js_layout-datatable.js.html
  156. +8 −0 yuidoc/files/src_gallery-layout-rows_js_PageLayoutRows.js.html
  157. +8 −0 yuidoc/files/src_gallery-layout_js_PageLayout.js.html
  158. +8 −0 yuidoc/files/src_gallery-linkedlist_js_LinkedList.js.html
  159. +8 −0 yuidoc/files/src_gallery-linkedlist_js_LinkedListItem.js.html
  160. +8 −0 yuidoc/files/src_gallery-linkedlist_js_LinkedListIterator.js.html
  161. +8 −0 yuidoc/files/src_gallery-math_js_Math.js.html
  162. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Arccosine.js.html
  163. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Arcsine.js.html
  164. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Arctangent.js.html
  165. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Arctangent2.js.html
  166. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Conjugate.js.html
  167. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Cosine.js.html
  168. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_E.js.html
  169. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Exponential.js.html
  170. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_FunctionWithArgs.js.html
  171. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_HyperbolicCosine.js.html
  172. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_HyperbolicSine.js.html
  173. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_HyperbolicTangent.js.html
  174. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_I.js.html
  175. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_ImaginaryPart.js.html
  176. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_InverseHyperbolicCosine.js.html
  177. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_InverseHyperbolicSine.js.html
  178. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_InverseHyperbolicTangent.js.html
  179. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Logarithm.js.html
  180. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Magnitude.js.html
  181. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_MathCanvas.js.html
  182. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_MathFunction.js.html
  183. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Max.js.html
  184. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Min.js.html
  185. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_NaturalLog.js.html
  186. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Negate.js.html
  187. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Phase.js.html
  188. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Pi.js.html
  189. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Product.js.html
  190. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Quotient.js.html
  191. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_RealPart.js.html
  192. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_RectList.js.html
  193. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Rotate.js.html
  194. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Sine.js.html
  195. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_SquareRoot.js.html
  196. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Sum.js.html
  197. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Tangent.js.html
  198. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Value.js.html
  199. +8 −0 yuidoc/files/src_gallery-mathcanvas_js_Variable.js.html
  200. +9 −1 yuidoc/files/src_gallery-matrix-background_js_MatrixBackground.js.html
  201. +8 −0 yuidoc/files/src_gallery-matrix-credits_js_MatrixCredits.js.html
  202. +8 −0 yuidoc/files/src_gallery-mojito-rpc_js_mojito-rpc.js.html
  203. +8 −0 yuidoc/files/src_gallery-mru-cache_js_MRUCache.js.html
  204. +8 −0 yuidoc/files/src_gallery-multiobject_js_MultiObject.js.html
  205. +8 −0 yuidoc/files/src_gallery-neon_js_Neon.js.html
  206. +8 −0 yuidoc/files/src_gallery-node-optimizations_js_Optimizations.js.html
  207. +8 −0 yuidoc/files/src_gallery-nodelist-extras2_js_nodelist-extras2.js.html
  208. +8 −0 yuidoc/files/src_gallery-object-extras_js_array-extras.js.html
  209. +8 −0 yuidoc/files/src_gallery-object-extras_js_object-extras.js.html
  210. +8 −0 yuidoc/files/src_gallery-paginator_js_CurrentPageInput.js.html
  211. +8 −0 yuidoc/files/src_gallery-paginator_js_CurrentPageReport.js.html
  212. +8 −0 yuidoc/files/src_gallery-paginator_js_FirstPageLink.js.html
  213. +8 −0 yuidoc/files/src_gallery-paginator_js_ItemRangeDropdown.js.html
  214. +8 −0 yuidoc/files/src_gallery-paginator_js_LastPageLink.js.html
  215. +8 −0 yuidoc/files/src_gallery-paginator_js_NextPageLink.js.html
  216. +8 −0 yuidoc/files/src_gallery-paginator_js_PageLinks.js.html
  217. +8 −0 yuidoc/files/src_gallery-paginator_js_Paginator.js.html
  218. +8 −0 yuidoc/files/src_gallery-paginator_js_PreviousPageLink.js.html
  219. +8 −0 yuidoc/files/src_gallery-paginator_js_RowsPerPageDropdown.js.html
  220. +8 −0 yuidoc/files/src_gallery-paginator_js_ValidationPageLinks.js.html
  221. +8 −0 yuidoc/files/src_gallery-querybuilder_js_QueryBuilder.js.html
  222. +8 −0 yuidoc/files/src_gallery-querybuilder_js_Select.js.html
  223. +8 −0 yuidoc/files/src_gallery-querybuilder_js_String.js.html
  224. +8 −0 yuidoc/files/src_gallery-querybuilder_js_Types.js.html
  225. +8 −0 yuidoc/files/src_gallery-quickedit_js_QuickEdit.js.html
  226. +8 −0 yuidoc/files/src_gallery-scrollintoview_js_ScrollIntoView.js.html
  227. +8 −0 yuidoc/files/src_gallery-sort-extras_js_sort-extras.js.html
  228. +8 −0 yuidoc/files/src_gallery-test-extras_js_Assert.js.html
  229. +8 −0 yuidoc/files/src_gallery-treeble_js_Treeble.js.html
  230. +8 −0 yuidoc/files/src_gallery-treeble_js_TreebleDataSource.js.html
  231. +8 −0 yuidoc/files/src_gallery-treeble_js_TreebleParser.js.html
  232. +8 −0 yuidoc/index.html
  233. +8 −0 yuidoc/modules/gallery-accordion-horiz-vert.html
  234. +8 −0 yuidoc/modules/gallery-algorithms.html
  235. +8 −0 yuidoc/modules/gallery-anim-class.html
  236. +8 −0 yuidoc/modules/gallery-bulkedit.html
  237. +8 −0 yuidoc/modules/gallery-busyoverlay.html
  238. +8 −0 yuidoc/modules/gallery-canvas.html
  239. +8 −0 yuidoc/modules/gallery-checkboxgroups.html
  240. +8 −0 yuidoc/modules/gallery-chipper.html
  241. +8 −0 yuidoc/modules/gallery-complexnumber.html
  242. +8 −0 yuidoc/modules/gallery-console-test.html
  243. +8 −0 yuidoc/modules/gallery-datasource-async-function.html
  244. +8 −0 yuidoc/modules/gallery-datatable-row-expansion.html
  245. +8 −0 yuidoc/modules/gallery-datatable-state.html
  246. +455 −0 yuidoc/modules/gallery-datetime-utils.html
  247. +8 −0 yuidoc/modules/gallery-dimensions.html
  248. +8 −0 yuidoc/modules/gallery-expiration-cache.html
  249. +8 −0 yuidoc/modules/gallery-exprbuilder.html
  250. +8 −0 yuidoc/modules/gallery-formmgr-css-validation.html
  251. +8 −0 yuidoc/modules/gallery-formmgr-overlay-plugin.html
  252. +8 −0 yuidoc/modules/gallery-formmgr.html
  253. +8 −0 yuidoc/modules/gallery-funcprog.html
  254. +455 −0 yuidoc/modules/gallery-input-calendar-sync.html
  255. +8 −0 yuidoc/modules/gallery-instancemanager.html
  256. +8 −0 yuidoc/modules/gallery-io-multiresponse.html
  257. +8 −0 yuidoc/modules/gallery-iterable-extras.html
  258. +8 −0 yuidoc/modules/gallery-layout-cols.html
  259. +8 −0 yuidoc/modules/gallery-layout-datatable.html
  260. +8 −0 yuidoc/modules/gallery-layout-rows.html
  261. +8 −0 yuidoc/modules/gallery-layout.html
  262. +8 −0 yuidoc/modules/gallery-linkedlist.html
  263. +8 −0 yuidoc/modules/gallery-math.html
  264. +8 −0 yuidoc/modules/gallery-mathcanvas.html
  265. +8 −0 yuidoc/modules/gallery-matrix-background.html
  266. +8 −0 yuidoc/modules/gallery-matrix-credits.html
  267. +8 −0 yuidoc/modules/gallery-mojito-rpc.html
  268. +8 −0 yuidoc/modules/gallery-mru-cache.html
  269. +8 −0 yuidoc/modules/gallery-multiobject.html
  270. +8 −0 yuidoc/modules/gallery-neon.html
  271. +8 −0 yuidoc/modules/gallery-node-optimizations.html
  272. +8 −0 yuidoc/modules/gallery-nodelist-extras2.html
  273. +8 −0 yuidoc/modules/gallery-object-extras.html
  274. +8 −0 yuidoc/modules/gallery-paginator.html
  275. +8 −0 yuidoc/modules/gallery-querybuilder.html
  276. +8 −0 yuidoc/modules/gallery-quickedit.html
  277. +8 −0 yuidoc/modules/gallery-scrollintoview.html
  278. +8 −0 yuidoc/modules/gallery-sort-extras.html
  279. +8 −0 yuidoc/modules/gallery-test-extras.html
  280. +8 −0 yuidoc/modules/gallery-treeble.html
View
331 datetime-utils/gallery-datetime-utils-debug.js
@@ -0,0 +1,331 @@
+YUI.add('gallery-datetime-utils', function(Y) {
+
+"use strict";
+
+/**
+ * @module gallery-datetime-utils
+ */
+
+/**********************************************************************
+ * Utility functions work working with dates and times.
+ *
+ * @main gallery-datetime-utils
+ * @class DateTimeUtils
+ */
+
+function pad2(n)
+{
+ var s = n.toString();
+ if (s.length < 2)
+ {
+ s = '0' + s;
+ }
+ return s;
+}
+
+function validInteger(v)
+{
+ return /^\d+$/.test(v);
+}
+
+Y.DateTimeUtils =
+{
+ /**
+ * Position of the year in a string representation of a date: 1,2,3
+ *
+ * @property YEAR_POSITION
+ * @type {Number}
+ * @default 1
+ * @static
+ */
+ YEAR_POSITION: 1,
+
+ /**
+ * Position of the month in a string representation of a date: 1,2,3
+ *
+ * @property MONTH_POSITION
+ * @type {Number}
+ * @default 2
+ * @static
+ */
+ MONTH_POSITION: 2,
+
+ /**
+ * Position of the day in a string representation of a date: 1,2,3
+ *
+ * @property DAY_POSITION
+ * @type {Number}
+ * @default 3
+ * @static
+ */
+ DAY_POSITION: 3,
+
+ /**
+ * Delimiter of fields in a string representation of a date.
+ *
+ * @property DATE_FIELD_DELIMITER
+ * @type {String}
+ * @default "-"
+ * @static
+ */
+ DATE_FIELD_DELIMITER: '-',
+
+ /**
+ * Delimiter of fields in a string representation of a time.
+ *
+ * @property TIME_FIELD_DELIMITER
+ * @type {String}
+ * @default ":"
+ * @static
+ */
+ TIME_FIELD_DELIMITER: ':',
+
+ /**
+ * Antemeridian string.
+ *
+ * @property AM_STRING
+ * @type {String}
+ * @default "AM"
+ * @static
+ */
+ AM_STRING: 'AM',
+
+ /**
+ * Postmeridian string.
+ *
+ * @property PM_STRING
+ * @type {String}
+ * @default "PM"
+ * @static
+ */
+ PM_STRING: 'PM',
+
+ /**
+ * How hours should be displayed to the user by classes in the DateTime
+ * family: 12hr or 24hr. (Internal values are always 24hr.) This is
+ * global because your app should be consistent about how it displays
+ * times.
+ *
+ * @property CLOCK_DISPLAY_TYPE
+ * @type {Number} 12 or 24
+ * @default 24
+ * @static
+ */
+ CLOCK_DISPLAY_TYPE: 24,
+
+ /**
+ * Normalizes the given object by converting date_str into
+ * year,month,day, converting time_str into hour,minute (or adding in
+ * hour,minute from default_time), and adding date (instanceof Date).
+ * Individual fields take precedence over strings.
+ *
+ * If input is a Date object, then the result contains a breakdown of
+ * the values.
+ *
+ * @method normalize
+ * @static
+ * @param input {Object}
+ * Can be specified either as instance of Date or as an object defining
+ * date_str or year,month,day and (optional) either time_str or
+ * hour,minute.
+ * @param default_time {Object} Default hour and minute to use if input only has date.
+ * @return {Object} normalized object defining date and time
+ */
+ normalize: function(input, default_time)
+ {
+ if (input instanceof Date)
+ {
+ var result =
+ {
+ year: input.getFullYear(),
+ month: input.getMonth()+1,
+ day: input.getDate(),
+ hour: input.getHours(),
+ minute: input.getMinutes(),
+ date: input
+ };
+ return result;
+ }
+
+ var result = Y.clone(input);
+ if (result.date_str)
+ {
+ if (Y.Lang.isUndefined(result.year) &&
+ Y.Lang.isUndefined(result.month) &&
+ Y.Lang.isUndefined(result.day))
+ {
+ Y.mix(result, self.parseDate(result.date_str));
+ }
+ delete result.date_str;
+ }
+
+ if (result.time_str)
+ {
+ if (Y.Lang.isUndefined(result.hour) &&
+ Y.Lang.isUndefined(result.minute))
+ {
+ Y.mix(result, self.parseTime(result.time_str));
+ }
+ delete result.time_str;
+ }
+ else if (Y.Lang.isUndefined(result.hour))
+ {
+ result.hour = default_time.hour;
+ result.minute = default_time.minute;
+ }
+
+ result.date = new Date(result.year, result.month-1, result.day, result.hour, result.minute);
+ return result;
+ },
+
+ /**
+ * Format the date portion of a Date object.
+ *
+ * @method formatDate
+ * @static
+ * @param date {Mixed} string (returned as-is), Date, or object specifying day,month,year
+ * @return {String} formatted date, using positions and delimiated
+ */
+ formatDate: function(date)
+ {
+ if (!date)
+ {
+ return '';
+ }
+ else if (Y.Lang.isString(date))
+ {
+ return date;
+ }
+
+ var a = [];
+ if (date instanceof Date)
+ {
+ a[ self.YEAR_POSITION-1 ] = date.getFullYear().toString();
+ a[ self.MONTH_POSITION-1 ] = pad2(date.getMonth()+1);
+ a[ self.DAY_POSITION-1 ] = pad2(date.getDate());
+ }
+ else
+ {
+ a[ self.YEAR_POSITION-1 ] = date.year.toString();
+ a[ self.MONTH_POSITION-1 ] = pad2(date.month);
+ a[ self.DAY_POSITION-1 ] = pad2(date.day);
+ }
+
+ return a.join(self.DATE_FIELD_DELIMITER);
+ },
+
+ /**
+ * Inverse of formatDate(). Extracts year, month, and day from the string.
+ *
+ * @method parseDate
+ * @static
+ * @param date {String} string from DateTimeUtils.formatDate()
+ * @return {Object} year,month,day
+ */
+ parseDate: function(date)
+ {
+ if (!date)
+ {
+ return null;
+ }
+ else if (!Y.Lang.isString(date))
+ {
+ return date;
+ }
+
+ var d = date.split(self.DATE_FIELD_DELIMITER);
+ if (d.length != 3 || !Y.every(d, validInteger))
+ {
+ throw Error('Unparseable date format.');
+ }
+
+ var result =
+ {
+ year: parseInt(d[ self.YEAR_POSITION-1 ], 10),
+ month: parseInt(d[ self.MONTH_POSITION-1 ], 10),
+ day: parseInt(d[ self.DAY_POSITION-1 ], 10)
+ };
+ return result;
+ },
+
+ /**
+ * Format the time portion of a Date object.
+ *
+ * @method formatTime
+ * @static
+ * @param time {Mixed} string (returned as-is), Date, or object specifying hour,minute
+ * @return {String} formatted date, using positions and delimiated
+ */
+ formatTime: function(time)
+ {
+ if (!time)
+ {
+ return '';
+ }
+ else if (Y.Lang.isString(time))
+ {
+ return time;
+ }
+ else if (self.CLOCK_DISPLAY_TYPE == 12)
+ {
+ var s = self.TIME_FIELD_DELIMITER + pad2(time.minute) + ' ';
+ return (time.hour > 12 ?
+ (time.hour - 12) + s + self.PM_STRING :
+ time.hour + s + self.AM_STRING);
+ }
+ else
+ {
+ return time.hour + self.TIME_FIELD_DELIMITER + pad2(time.minute);
+ }
+ },
+
+ /**
+ * Inverse of formatTime(). Extracts hour and minute from the string.
+ *
+ * @method parseTime
+ * @static
+ * @param time {String} string from DateTimeUtils.formatTime()
+ * @return {Object} hour,minute
+ */
+ parseTime: function(
+ /* string */ time)
+ {
+ if (!time)
+ {
+ return null;
+ }
+ else if (!Y.Lang.isString(time))
+ {
+ return time;
+ }
+
+ var offset = 0;
+ if (time.indexOf(self.AM_STRING) > 0)
+ {
+ time = Y.Lang.trim(time.replace(self.AM_STRING, ''));
+ }
+ else if (time.indexOf(self.PM_STRING) > 0)
+ {
+ time = Y.Lang.trim(time.replace(self.PM_STRING, ''));
+ offset = 12;
+ }
+
+ var t = time.split(self.TIME_FIELD_DELIMITER);
+ if (t.length != 2 || !Y.every(t, validInteger))
+ {
+ throw Error('Unparseable time format.');
+ }
+
+ var result =
+ {
+ hour: parseInt(t[0], 10) + offset,
+ minute: parseInt(t[1], 10)
+ };
+ return result;
+ }
+};
+
+var self = Y.DateTimeUtils; // shortcut
+
+
+}, '@VERSION@' ,{requires:['gallery-funcprog']});
View
295 datetime-utils/gallery-funcprog-debug.js
@@ -0,0 +1,295 @@
+YUI.add('gallery-funcprog', function(Y) {
+
+"use strict";
+
+/**
+ * @module gallery-funcprog
+ */
+
+/**********************************************************************
+ * <p>Augments global Y object with the same higher-order functions that
+ * array-extras adds to Y.Array. Note that, unlike arrays and NodeLists,
+ * iteration order for an object is arbitrary, so be careful when applying
+ * non-commutative operations!</p>
+ *
+ * @main gallery-funcprog
+ * @class YUI~funcprog
+ */
+
+// adjusted from YUI's oop.js
+function dispatch(action, o)
+{
+ var args = Y.Array(arguments, 1, true);
+
+ switch (Y.Array.test(o))
+ {
+ case 1:
+ return Y.Array[action].apply(null, args);
+ case 2:
+ args[0] = Y.Array(o, 0, true);
+ return Y.Array[action].apply(null, args);
+ default:
+ if (o && o[action] && o !== Y)
+ {
+ args.shift();
+ return o[action].apply(o, args);
+ }
+ else
+ {
+ return Y.Object[action].apply(null, args);
+ }
+ }
+}
+
+Y.mix(Y,
+{
+ /**
+ * Executes the supplied function on each item in the object.
+ * Iteration stops if the supplied function does not return a truthy
+ * value. The function receives the value, the key, and the object
+ * itself as parameters (in that order).
+ *
+ * Supports arrays, objects, and NodeLists.
+ *
+ * @method every
+ * @static
+ * @param o {Mixed} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} if true, prototype properties are iterated on objects
+ * @return {Boolean} true if every item in the array returns true from the supplied function, false otherwise
+ */
+ every: function(o, f, c, proto)
+ {
+ return dispatch('every', o, f, c, proto);
+ },
+
+ /**
+ * Executes the supplied function on each item in the object. Returns
+ * a new object containing the items for which the supplied function
+ * returned a truthy value. The function receives the value, the key,
+ * and the object itself as parameters (in that order).
+ *
+ * Supports arrays, objects, and NodeLists.
+ *
+ * @method filter
+ * @static
+ * @param o {Mixed} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} if true, prototype properties are iterated on objects
+ * @return {Object} array or object of items for which the supplied function returned a truthy value (empty if it never returned a truthy value)
+ */
+ filter: function(o, f, c, proto)
+ {
+ return dispatch('filter', o, f, c, proto);
+ },
+
+ /**
+ * Executes the supplied function on each item in the object, searching
+ * for the first item that matches the supplied function. The function
+ * receives the value, the key, and the object itself as parameters (in
+ * that order).
+ *
+ * Supports arrays, objects, and NodeLists.
+ *
+ * @method find
+ * @static
+ * @param o {Mixed} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} if true, prototype properties are iterated on objects
+ * @return {Mixed} the first item for which the supplied function returns true, or null if it never returns true
+ */
+ find: function(o, f, c, proto)
+ {
+ return dispatch('find', o, f, c, proto);
+ },
+
+ /**
+ * Executes the supplied function on each item in the object and
+ * returns a new object with the results. The function receives the
+ * value, the key, and the object itself as parameters (in that order).
+ *
+ * Supports arrays, objects, and NodeLists.
+ *
+ * @method map
+ * @static
+ * @param o {Mixed} the object to iterate
+ * @param f {String} the function to invoke
+ * @param c {Object} optional context object
+ * @param proto {Boolean} if true, prototype properties are iterated on objects
+ * @return {Object} array or object of all return values, mapped according to the item key
+ */
+ map: function(o, f, c, proto)
+ {
+ return dispatch('map', o, f, c, proto);
+ },
+
+ /**
+ * Partitions an object into two new objects, one with the items for
+ * which the supplied function returns true, and one with the items
+ * for which the function returns false. The function receives the
+ * value, the key, and the object itself as parameters (in that order).
+ *
+ * Supports arrays, objects, and NodeLists.
+ *
+ * @method partition
+ * @static
+ * @param o {Mixed} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} if true, prototype properties are iterated on objects
+ * @return {Object} object with two properties: matches and rejects. Each is an array or object containing the items that were selected or rejected by the test function (or an empty object if none).
+ */
+ partition: function(o, f, c, proto)
+ {
+ return dispatch('partition', o, f, c, proto);
+ },
+
+ /**
+ * Executes the supplied function on each item in the object, folding
+ * the object into a single value. The function receives the value
+ * returned by the previous iteration (or the initial value if this is
+ * the first iteration), the value being iterated, the key, and the
+ * object itself as parameters (in that order). The function must
+ * return the updated value.
+ *
+ * Supports arrays, objects, and NodeLists.
+ *
+ * @method reduce
+ * @static
+ * @param o {Mixed} the object to iterate
+ * @param init {Mixed} the initial value
+ * @param f {String} the function to invoke
+ * @param c {Object} optional context object
+ * @param proto {Boolean} if true, prototype properties are iterated on objects
+ * @return {Mixed} final result from iteratively applying the given function to each item in the object
+ */
+ reduce: function(o, init, f, c, proto)
+ {
+ return dispatch('reduce', o, init, f, c, proto);
+ },
+
+ /**
+ * Executes the supplied function on each item in the object, starting
+ * from the "end" and folding the object into a single value. The
+ * function receives the value returned by the previous iteration (or
+ * the initial value if this is the first iteration), the value being
+ * iterated, the key, and the object itself as parameters (in that
+ * order). The function must return the updated value.
+ *
+ * Supports arrays, objects, and NodeLists.
+ *
+ * @method reduceRight
+ * @static
+ * @param o {Mixed} the object to iterate
+ * @param init {Mixed} the initial value
+ * @param f {String} the function to invoke
+ * @param c {Object} optional context object
+ * @param proto {Boolean} if true, prototype properties are iterated on objects
+ * @return {Mixed} final result from iteratively applying the given function to each item in the object
+ */
+ reduceRight: function(o, init, f, c, proto)
+ {
+ return dispatch('reduceRight', o, init, f, c, proto);
+ },
+
+ /**
+ * Executes the supplied function on each item in the object. Returns
+ * a new object containing the items for which the supplied function
+ * returned a falsey value. The function receives the value, the key,
+ * and the object itself as parameters (in that order).
+ *
+ * Supports arrays, objects, and NodeLists.
+ *
+ * @method reject
+ * @static
+ * @param o {Mixed} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} if true, prototype properties are iterated on objects
+ * @return {Object} array or object of items for which the supplied function returned a falsey value (empty if it never returned a falsey value)
+ */
+ reject: function(o, f, c, proto)
+ {
+ return dispatch('reject', o, f, c, proto);
+ }
+});
+/**
+ * @module gallery-funcprog
+ */
+
+/**
+ * @class Array~funcprog-extras
+ */
+
+Y.mix(Y.Array,
+{
+ /**
+ * Executes the supplied function on each item in the array, searching
+ * for the first item that matches the supplied function. The function
+ * receives the value, the index, and the array itself as parameters
+ * (in that order).
+ *
+ * @method findIndexOf
+ * @static
+ * @param a {Array} the array to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @return {Number} index of the first item for which the supplied function returns true, or -1 if it never returns true
+ */
+ findIndexOf: function(a, f, c)
+ {
+ var index = -1;
+
+ Y.Array.some(a, function(v, i)
+ {
+ if (f.call(c, v, i, a))
+ {
+ index = i;
+ return true;
+ }
+ });
+
+ return index;
+ }
+});
+
+/**
+ * Executes the supplied function on each item in the array, starting
+ * from the end and folding the list into a single value. The function
+ * receives the value returned by the previous iteration (or the
+ * initial value if this is the first iteration), the value being
+ * iterated, the index, and the list itself as parameters (in that
+ * order). The function must return the updated value.
+ *
+ * @method reduceRight
+ * @param init {Mixed} the initial value
+ * @param f {String} the function to invoke
+ * @param c {Object} optional context object
+ * @return {Mixed} final result from iteratively applying the given function to each item in the array
+ */
+Y.Array.reduceRight = Y.Lang._isNative(Array.prototype.reduceRight) ?
+ function(a, init, f, c)
+ {
+ return Array.prototype.reduceRight.call(a, function(init, item, i, a)
+ {
+ return f.call(c, init, item, i, a);
+ },
+ init);
+ }
+ :
+ function(a, init, f, c)
+ {
+ var result = init;
+ for (var i=a.length-1; i>=0; i--)
+ {
+ result = f.call(c, result, a[i], i, a);
+ }
+
+ return result;
+ };
+
+
+}, '@VERSION@' ,{requires:['oop','array-extras','gallery-object-extras'], optional:['gallery-nodelist-extras2']});
View
380 datetime-utils/gallery-object-extras-debug.js
@@ -0,0 +1,380 @@
+YUI.add('gallery-object-extras', function(Y) {
+
+"use strict";
+
+/**
+ * @module gallery-object-extras
+ */
+
+/**
+ * <p>Augments Y.Object with the same higher-order functions that
+ * array-extras adds to Y.Array. Note that, unlike Y.Array, iteration
+ * order for objects is arbitrary, so be careful when applying
+ * non-commutative operations!</p>
+ *
+ * @main gallery-object-extras
+ * @class Object~extras
+ */
+
+Y.mix(Y.Object,
+{
+ /**
+ * Executes the supplied function on each item in the object.
+ * Iteration stops if the supplied function does not return a truthy
+ * value. The function receives the value, the key, and the object
+ * itself as parameters (in that order).
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * @method every
+ * @static
+ * @param o {Object} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} include prototype properties
+ * @return {Boolean} true if every item in the array returns true from the supplied function, false otherwise
+ */
+ every: function(o, f, c, proto)
+ {
+ for (var k in o)
+ {
+ if ((proto || o.hasOwnProperty(k)) && !f.call(c, o[k], k, o))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ },
+
+ /**
+ * Executes the supplied function on each item in the object. Returns
+ * a new object containing the items for which the supplied function
+ * returned a truthy value. The function receives the value, the key,
+ * and the object itself as parameters (in that order).
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * @method filter
+ * @static
+ * @param o {Object} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} include prototype properties
+ * @return {Object} object of items for which the supplied function returned a truthy value (empty if it never returned a truthy value)
+ */
+ filter: function(o, f, c, proto)
+ {
+ var result = {};
+
+ for (var k in o)
+ {
+ var v = o[k];
+ if ((proto || o.hasOwnProperty(k)) && f.call(c, v, k, o))
+ {
+ result[k] = v;
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Executes the supplied function on each item in the object, searching
+ * for the first item that matches the supplied function. The function
+ * receives the value, the key, and the object itself as parameters (in
+ * that order).
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * @method find
+ * @static
+ * @param o {Object} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} include prototype properties
+ * @return {Mixed} the first item for which the supplied function returns true, or null if it never returns true
+ */
+ find: function(o, f, c, proto)
+ {
+ for (var k in o)
+ {
+ var v = o[k];
+ if ((proto || o.hasOwnProperty(k)) && f.call(c, v, k, o))
+ {
+ return v;
+ }
+ }
+
+ return null;
+ },
+
+ /**
+ * Executes the supplied function on each item in the object, searching
+ * for the first item that matches the supplied function.
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * @method keyOf
+ * @static
+ * @param o {Object} the object to iterate
+ * @param v {Mixed} the value to search for
+ * @param proto {Boolean} include prototype properties
+ * @return {String} key of an item strictly equal to v, or null if not found
+ */
+ keyOf: function(o, v, proto)
+ {
+ for (var k in o)
+ {
+ if ((proto || o.hasOwnProperty(k)) && o[k] === v)
+ {
+ return k;
+ }
+ }
+
+ return null;
+ },
+
+ /**
+ * Executes a named method on each item in the object. Items that do
+ * not have a function by that name will be skipped.
+ *
+ * @method invoke
+ * @static
+ * @param o {Object} the object to iterate
+ * @param f {String} the function to invoke
+ * @param args* {Any} any number of additional args are passed as parameters to the execution of the named method
+ * @return {Object} all return values, mapped according to the item key
+ */
+ invoke: function(o, f)
+ {
+ var args = Y.Array(arguments, 2, true),
+ result = {};
+
+ for (var k in o)
+ {
+ var v = o[k];
+ if (o.hasOwnProperty(k) && Y.Lang.isFunction(v[f]))
+ {
+ result[k] = v[f].apply(v, args);
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Executes the supplied function on each item in the object and
+ * returns a new object with the results. The function receives the
+ * value, the key, and the object itself as parameters (in that order).
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * @method map
+ * @static
+ * @param o {Object} the object to iterate
+ * @param f {String} the function to invoke
+ * @param c {Object} optional context object
+ * @param proto {Boolean} include prototype properties
+ * @return {Object} all return values, mapped according to the item key
+ */
+ map: function(o, f, c, proto)
+ {
+ var result = {};
+
+ for (var k in o)
+ {
+ if (proto || o.hasOwnProperty(k))
+ {
+ result[k] = f.call(c, o[k], k, o);
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Partitions an object into two new objects, one with the items for
+ * which the supplied function returns true, and one with the items
+ * for which the function returns false. The function receives the
+ * value, the key, and the object itself as parameters (in that order).
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * @method partition
+ * @static
+ * @param o {Object} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} include prototype properties
+ * @return {Object} object with two properties: matches and rejects. Each is an object containing the items that were selected or rejected by the test function (or an empty object if none).
+ */
+ partition: function(o, f, c, proto)
+ {
+ var result =
+ {
+ matches: {},
+ rejects: {}
+ };
+
+ for (var k in o)
+ {
+ var v = o[k];
+ if (proto || o.hasOwnProperty(k))
+ {
+ var set = f.call(c, v, k, o) ? result.matches : result.rejects;
+ set[k] = v;
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Executes the supplied function on each item in the object, folding
+ * the object into a single value. The function receives the value
+ * returned by the previous iteration (or the initial value if this is
+ * the first iteration), the value being iterated, the key, and the
+ * object itself as parameters (in that order). The function must
+ * return the updated value.
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * @method reduce
+ * @static
+ * @param o {Object} the object to iterate
+ * @param init {Mixed} the initial value
+ * @param f {String} the function to invoke
+ * @param c {Object} optional context object
+ * @param proto {Boolean} include prototype properties
+ * @return {Mixed} final result from iteratively applying the given function to each item in the object
+ */
+ reduce: function(o, init, f, c, proto)
+ {
+ var result = init;
+
+ for (var k in o)
+ {
+ if (proto || o.hasOwnProperty(k))
+ {
+ result = f.call(c, result, o[k], k, o);
+ }
+ }
+
+ return result;
+ },
+
+ /**
+ * Executes the supplied function on each item in the object. Returns
+ * a new object containing the items for which the supplied function
+ * returned a falsey value. The function receives the value, the key,
+ * and the object itself as parameters (in that order).
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * @method reject
+ * @static
+ * @param o {Object} the object to iterate
+ * @param f {Function} the function to execute on each item
+ * @param c {Object} optional context object
+ * @param proto {Boolean} include prototype properties
+ * @return {Object} object of items for which the supplied function returned a falsey value (empty if it never returned a falsey value)
+ */
+ reject: function(o, f, c, proto)
+ {
+ return Y.Object.filter(o, function(v, k, o)
+ {
+ return !f.call(c, v, k, o);
+ },
+ c, proto);
+ },
+
+ /**
+ * Creates an object by pairing the corresponding elements of two arrays.
+ *
+ * @method zip
+ * @static
+ * @param a1 {Array} the keys which must be strings
+ * @param a2 {Array} the values
+ * @return {Object} object formed by pairing each element of the first array with an item in the second array having the corresponding index
+ */
+ zip: function(a1, a2)
+ {
+ var result = {};
+
+ Y.Array.each(a1, function(v, i)
+ {
+ result[ v.toString() ] = a2[i];
+ });
+
+ return result;
+ }
+});
+
+/**
+ * Executes the supplied function on each item in the object, starting at
+ * the end and folding the object into a single value. The function
+ * receives the value returned by the previous iteration (or the initial
+ * value if this is the first iteration), the value being iterated, the
+ * key, and the object itself as parameters (in that order). The function
+ * must return the updated value.
+ *
+ * By default, only properties owned by obj are enumerated. To include
+ * prototype properties, set the proto parameter to true.
+ *
+ * Since the order of iteration is undefined for objects, this is identical
+ * to `reduce`.
+ *
+ * @method reduceRight
+ * @static
+ * @param o {Object} the object to iterate
+ * @param init {Mixed} the initial value
+ * @param f {String} the function to invoke
+ * @param c {Object} optional context object
+ * @param proto {Boolean} include prototype properties
+ * @return {Mixed} final result from iteratively applying the given function to each item in the object
+ */
+Y.Object.reduceRight = Y.Object.reduce;
+/**
+ * @module gallery-object-extras
+ */
+
+/**
+ * @class Array~object-extras
+ */
+
+Y.mix(Y.Array,
+{
+ /**
+ * Converts the array of objects into a map of the same objects, keyed
+ * off a particular attribute.
+ *
+ * @method toObject
+ * @static
+ * @param a {Array} the array to iterate
+ * @param k {String} the attribute to key off
+ * @return {Object} map of the objects
+ */
+ toObject: function(a, k)
+ {
+ var result = {};
+
+ Y.Array.each(a, function(v)
+ {
+ result[ v[k] ] = v;
+ });
+
+ return result;
+ }
+});
+
+
+}, '@VERSION@' ,{optional:['gallery-funcprog']});
View
150 datetime-utils/index.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+ <title>DateTime Utilities Unit Tests</title>
+ <meta http-equiv=content-type content="text/html; charset=utf-8">
+
+ <script src="http://yui.yahooapis.com/3.5.1/build/yui/yui-min.js"></script>
+ <script src="gallery-datetime-utils-debug.js"></script>
+ <script src="gallery-funcprog-debug.js"></script>
+ <script src="gallery-object-extras-debug.js"></script>
+</head>
+
+<body class="yui3-skin-sam">
+
+<h1><a href="http://yuilibrary.com/gallery/show/datetime-utils">YUI 3 DateTime Utilities</a> Unit Tests</h1>
+
+<p><a href="../yuidoc/modules/gallery-datetime-utils.html">Show me the documentation</a></p>
+<p><a href="/yui3-gallery/">Back to project list</a></p>
+
+<script type="text/javascript">
+YUI({
+// filter: 'raw', combine: false,
+ logInclude: { TestRunner: true }
+}).use(
+ 'gallery-datetime-utils', 'test',
+ 'console', 'console-filters', 'dd-plugin',
+function(Y)
+{
+ var date = new Date(2012, 5, 11, 14, 5, 0, 0);
+
+ Y.Test.Runner.add(new Y.Test.Case(
+ {
+ name: 'DateTime utilities',
+
+ testNormalize: function()
+ {
+ function check(result)
+ {
+ Y.DateAssert.datesAreEqual(date, result.date);
+ Y.DateAssert.timesAreEqual(date, result.date);
+ Y.Assert.areSame(2012, result.year);
+ Y.Assert.areSame(6, result.month);
+ Y.Assert.areSame(11, result.day);
+ Y.Assert.areSame(14, result.hour);
+ Y.Assert.areSame(5, result.minute);
+ }
+
+ check(Y.DateTimeUtils.normalize(date));
+ check(Y.DateTimeUtils.normalize({year:2012, month:6, day:11, hour:14, minute:5}));
+ check(Y.DateTimeUtils.normalize({date_str:'2012-6-11', time_str:'14:05'}));
+ check(Y.DateTimeUtils.normalize({year:2012, month:6, day:11, date_str:'2011-1-1', hour:14, minute:5, time_str:'5:10'}));
+ check(Y.DateTimeUtils.normalize({year:2012, month:6, day:11}, {hour:14, minute:5}));
+ check(Y.DateTimeUtils.normalize({date_str:'2012-6-11'}, {hour:14, minute:5}));
+ },
+
+ testFormatDate: function()
+ {
+ Y.Assert.areSame('', Y.DateTimeUtils.formatDate());
+ Y.Assert.areSame('', Y.DateTimeUtils.formatDate(null));
+ Y.Assert.areSame('', Y.DateTimeUtils.formatDate(''));
+ Y.Assert.areSame('2012-6-11', Y.DateTimeUtils.formatDate('2012-6-11'));
+ Y.Assert.areSame('2012-06-11', Y.DateTimeUtils.formatDate(date));
+ Y.Assert.areSame('2012-06-11', Y.DateTimeUtils.formatDate({year:2012, month:6, day:11}));
+ },
+
+ testParseDate: function()
+ {
+ Y.Assert.areSame(null, Y.DateTimeUtils.parseDate());
+ Y.Assert.areSame(null, Y.DateTimeUtils.parseDate(null));
+ Y.Assert.areSame(null, Y.DateTimeUtils.parseDate(''));
+ Y.Assert.areSame(date, Y.DateTimeUtils.parseDate(date));
+
+ function check(result)
+ {
+ Y.Assert.areSame(2012, result.year);
+ Y.Assert.areSame(6, result.month);
+ Y.Assert.areSame(11, result.day);
+ }
+
+ check(Y.DateTimeUtils.parseDate('2012-6-11'));
+ check(Y.DateTimeUtils.parseDate('2012-06-11'));
+
+ Y.DateTimeUtils.DATE_FIELD_DELIMITER = '/';
+ Y.DateTimeUtils.DAY_POSITION = 1;
+ Y.DateTimeUtils.MONTH_POSITION = 2;
+ Y.DateTimeUtils.YEAR_POSITION = 3;
+
+ check(Y.DateTimeUtils.parseDate('11/6/2012'));
+ check(Y.DateTimeUtils.parseDate('11/06/2012'));
+
+ Y.DateTimeUtils.DATE_FIELD_DELIMITER = '-';
+ Y.DateTimeUtils.YEAR_POSITION = 1;
+ Y.DateTimeUtils.MONTH_POSITION = 2;
+ Y.DateTimeUtils.DAY_POSITION = 3;
+ },
+
+ testFormatTime: function()
+ {
+ Y.Assert.areSame('', Y.DateTimeUtils.formatTime());
+ Y.Assert.areSame('', Y.DateTimeUtils.formatTime(null));
+ Y.Assert.areSame('', Y.DateTimeUtils.formatTime(''));
+ Y.Assert.areSame('14:05', Y.DateTimeUtils.formatTime('14:05'));
+ Y.Assert.areSame('14:05', Y.DateTimeUtils.formatTime({hour:14, minute:5}));
+ Y.Assert.areSame('2:05', Y.DateTimeUtils.formatTime({hour:2, minute:5}));
+
+ Y.DateTimeUtils.CLOCK_DISPLAY_TYPE = 12;
+
+ Y.Assert.areSame('2:05 AM', Y.DateTimeUtils.formatTime({hour:2, minute:5}));
+ Y.Assert.areSame('2:05 PM', Y.DateTimeUtils.formatTime({hour:14, minute:5}));
+
+ Y.DateTimeUtils.CLOCK_DISPLAY_TYPE = 24;
+ },
+
+ testParseTime: function()
+ {
+ Y.Assert.areSame(null, Y.DateTimeUtils.parseDate());
+ Y.Assert.areSame(null, Y.DateTimeUtils.parseDate(null));
+ Y.Assert.areSame(null, Y.DateTimeUtils.parseDate(''));
+ Y.Assert.areSame(date, Y.DateTimeUtils.parseDate(date));
+
+ function check(result)
+ {
+ Y.Assert.areSame(14, result.hour);
+ Y.Assert.areSame(5, result.minute);
+ }
+
+ check(Y.DateTimeUtils.parseTime('14:05'));
+ check(Y.DateTimeUtils.parseTime('14:5'));
+ check(Y.DateTimeUtils.parseTime('2:05 PM'));
+
+ var result = Y.DateTimeUtils.parseTime('2:05 AM');
+ Y.Assert.areSame(2, result.hour);
+ Y.Assert.areSame(5, result.minute);
+ }
+ }));
+
+ new Y.Console(
+ {
+ newestOnTop: false,
+ plugins: [ {fn: Y.Plugin.Drag, cfg: {handles: ['.yui3-console-hd']}}, Y.Plugin.ConsoleFilters ]
+ })
+ .render();
+
+ Y.Test.Runner.run();
+});
+</script>
+
+</body>
+</html>
View
67 input-calendar-sync/index.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>YUI 3 Neon Sign</title>
+ <meta http-equiv=content-type content="text/html; charset=utf-8">
+
+ <script src="http://yui.yahooapis.com/3.5.1/build/yui/yui-min.js"></script>
+ <script src="gallery-neon-debug.js"></script>
+
+ <style type="text/css">
+ body { background-color: black; color: white; }
+ a, a.visited { color: #AAAAFF; }
+ #text { font-weight: bold; font-size: 300%; }
+ </style>
+</head>
+<body>
+
+<h1><a href="http://yuilibrary.com/gallery/show/neon">YUI 3 Neon</a> Example</h1>
+
+<p><a href="../yuidoc/modules/gallery-neon.html">Show me the documentation</a></p>
+<p><a href="/yui3-gallery/">Back to project list</a></p>
+
+<button id="show">Show</button>
+<button id="hide">Hide</button>
+
+<div id="text" style="display:none;">
+ <p>F2E</p>
+ <p>Front End Engineering</p>
+</div>
+
+<div id="done" style="display:none;">Done!</div>
+
+<script type="text/javascript">
+YUI({
+// filter: 'debug'
+}).use(
+ 'gallery-neon',
+function(Y)
+{
+ var node = Y.one('#text');
+ node.plug(Y.Plugin.Neon,
+ {
+ backgroundColor: 'black',
+ textColor: 'white',
+ textShadow: '{color} 0px 0px 10px, {color} 0px 0px 20px'
+ });
+
+ Y.on('click', node.show, '#show', node);
+
+ Y.on('click', function()
+ {
+ Y.one('#done').hide();
+ node.hide();
+ },
+ '#hide');
+
+ node.on('neon:finished', function()
+ {
+ Y.one('#done').show();
+ });
+
+ node.show();
+});
+</script>
+
+</body>
+</html>
View
14 yuidoc/api.js
@@ -19,6 +19,7 @@ YUI.add("yuidoc-meta", function(Y) {
"DataSource.AsyncFunction",
"DataSource.BulkEdit",
"DataSource.Treeble",
+ "DateTimeUtils",
"EnableIfAnyCheckboxGroup",
"ExpirationCache",
"ExpressionBuilder",
@@ -97,6 +98,7 @@ YUI.add("yuidoc-meta", function(Y) {
"Plugin.DataTableRowExpansion",
"Plugin.DataTableState",
"Plugin.FixedSizeAccordion",
+ "Plugin.InputCalendarSync",
"Plugin.Neon",
"Plugin.OverlayForm",
"Plugin.PageLayoutDataTableModule",
@@ -124,6 +126,7 @@ YUI.add("yuidoc-meta", function(Y) {
"gallery-datasource-async-function",
"gallery-datatable-row-expansion",
"gallery-datatable-state",
+ "gallery-datetime-utils",
"gallery-dimensions",
"gallery-expiration-cache",
"gallery-exprbuilder",
@@ -131,6 +134,7 @@ YUI.add("yuidoc-meta", function(Y) {
"gallery-formmgr-css-validation",
"gallery-formmgr-overlay-plugin",
"gallery-funcprog",
+ "gallery-input-calendar-sync",
"gallery-instancemanager",
"gallery-io-multiresponse",
"gallery-iterable-extras",
@@ -225,6 +229,11 @@ YUI.add("yuidoc-meta", function(Y) {
"description": "<p>Plugin for DataTable to preserve state, either on a single page or\nacross pages.</p>"
},
{
+ "displayName": "gallery-datetime-utils",
+ "name": "gallery-datetime-utils",
+ "description": "Utility functions work working with dates and times."
+ },
+ {
"displayName": "gallery-dimensions",
"name": "gallery-dimensions",
"description": "Functions for measuring the size of a node."
@@ -260,6 +269,11 @@ YUI.add("yuidoc-meta", function(Y) {
"description": "<p>Augments global Y object with the same higher-order functions that\narray-extras adds to Y.Array. Note that, unlike arrays and NodeLists,\niteration order for an object is arbitrary, so be careful when applying\nnon-commutative operations!</p>"
},
{
+ "displayName": "gallery-input-calendar-sync",
+ "name": "gallery-input-calendar-sync",
+ "description": "Plugin for an input field which syncs the value with a calendar."
+ },
+ {
"displayName": "gallery-instancemanager",
"name": "gallery-instancemanager",
"description": "<p>Stores instances of JavaScript components. Allows a constructor or\nfactory method to be passed in place of an instance. This enables lazy\nconstruction on demand.</p>\n\n<p>One use is to create a global repository of JavaScript components\nattached to DOM id's, e.g., YUI Buttons built on top of HTML\nbuttons.</p>"
View
8 yuidoc/classes/Accordion.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/ArrayIterator.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/ArrayList~extras.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/Array~algorithms.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/Array~funcprog-extras.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/Array~object-extras.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/Assert.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/AtLeastOneCheckboxGroup.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/AtMostOneCheckboxGroup.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/BulkEditor.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/Canvas.Context2d.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/CheckboxGroup.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+
<li><a href="..&#x2F;modules/gallery-dimensions.html">gallery-dimensions</a></li>
<li><a href="..&#x2F;modules/gallery-expiration-cache.html">gallery-expiration-cache</a></li>
@@ -301,6 +307,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-funcprog.html">gallery-funcprog</a></li>
+ <li><a href="..&#x2F;modules/gallery-input-calendar-sync.html">gallery-input-calendar-sync</a></li>
+
<li><a href="..&#x2F;modules/gallery-instancemanager.html">gallery-instancemanager</a></li>
<li><a href="..&#x2F;modules/gallery-io-multiresponse.html">gallery-io-multiresponse</a></li>
View
8 yuidoc/classes/Chipper.html
@@ -77,6 +77,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/DataSource.Treeble.html">DataSource.Treeble</a></li>
+ <li><a href="..&#x2F;classes/DateTimeUtils.html">DateTimeUtils</a></li>
+
<li><a href="..&#x2F;classes/EnableIfAnyCheckboxGroup.html">EnableIfAnyCheckboxGroup</a></li>
<li><a href="..&#x2F;classes/ExpirationCache.html">ExpirationCache</a></li>
@@ -235,6 +237,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;classes/Plugin.FixedSizeAccordion.html">Plugin.FixedSizeAccordion</a></li>
+ <li><a href="..&#x2F;classes/Plugin.InputCalendarSync.html">Plugin.InputCalendarSync</a></li>
+
<li><a href="..&#x2F;classes/Plugin.Neon.html">Plugin.Neon</a></li>
<li><a href="..&#x2F;classes/Plugin.OverlayForm.html">Plugin.OverlayForm</a></li>
@@ -287,6 +291,8 @@ <h2 class="off-left">APIs</h2>
<li><a href="..&#x2F;modules/gallery-datatable-state.html">gallery-datatable-state</a></li>
+ <li><a href="..&#x2F;modules/gallery-datetime-utils.html">gallery-datetime-utils</a></li>
+