tao_form 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (208) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +28 -0
  4. data/Rakefile +10 -0
  5. data/lib/assets/icons/arrow-down.svg +12 -0
  6. data/lib/assets/icons/arrow-left.svg +12 -0
  7. data/lib/assets/icons/arrow-right.svg +12 -0
  8. data/lib/assets/icons/calendar.svg +12 -0
  9. data/lib/assets/icons/checkbox.svg +12 -0
  10. data/lib/assets/icons/clock.svg +12 -0
  11. data/lib/assets/icons/search.svg +12 -0
  12. data/lib/assets/icons/success.svg +12 -0
  13. data/lib/assets/javascripts/tao/form/element.coffee +16 -0
  14. data/lib/assets/javascripts/tao/form/fields/checkbox.coffee +14 -0
  15. data/lib/assets/javascripts/tao/form/fields/index.coffee +9 -0
  16. data/lib/assets/javascripts/tao/form/fields/moment_picker/element.coffee +38 -0
  17. data/lib/assets/javascripts/tao/form/fields/moment_picker/index.coffee +7 -0
  18. data/lib/assets/javascripts/tao/form/fields/moment_picker/result.coffee +25 -0
  19. data/lib/assets/javascripts/tao/form/fields/moment_picker/segment_list.coffee +14 -0
  20. data/lib/assets/javascripts/tao/form/fields/radio.coffee +14 -0
  21. data/lib/assets/javascripts/tao/form/fields/select/element.coffee +79 -0
  22. data/lib/assets/javascripts/tao/form/fields/select/index.coffee +8 -0
  23. data/lib/assets/javascripts/tao/form/fields/select/list.coffee +98 -0
  24. data/lib/assets/javascripts/tao/form/fields/select/multiple_result.coffee +41 -0
  25. data/lib/assets/javascripts/tao/form/fields/select/result.coffee +39 -0
  26. data/lib/assets/javascripts/tao/form/fields/switch.coffee +14 -0
  27. data/lib/assets/javascripts/tao/form/index.coffee +17 -0
  28. data/lib/assets/javascripts/tao/form/mobile/element.coffee +5 -0
  29. data/lib/assets/javascripts/tao/form/mobile/fields/checkbox.coffee +5 -0
  30. data/lib/assets/javascripts/tao/form/mobile/fields/index.coffee +9 -0
  31. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/element.coffee +36 -0
  32. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/index.coffee +7 -0
  33. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/result.coffee +5 -0
  34. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/segment_list.coffee +24 -0
  35. data/lib/assets/javascripts/tao/form/mobile/fields/radio.coffee +5 -0
  36. data/lib/assets/javascripts/tao/form/mobile/fields/select/element.coffee +61 -0
  37. data/lib/assets/javascripts/tao/form/mobile/fields/select/index.coffee +8 -0
  38. data/lib/assets/javascripts/tao/form/mobile/fields/select/list.coffee +13 -0
  39. data/lib/assets/javascripts/tao/form/mobile/fields/select/multiple_result.coffee +5 -0
  40. data/lib/assets/javascripts/tao/form/mobile/fields/select/result.coffee +5 -0
  41. data/lib/assets/javascripts/tao/form/mobile/fields/switch.coffee +5 -0
  42. data/lib/assets/javascripts/tao/form/mobile/index.coffee +10 -0
  43. data/lib/assets/javascripts/tao/form/shared/element/base.coffee +48 -0
  44. data/lib/assets/javascripts/tao/form/shared/fields/checkbox.coffee +21 -0
  45. data/lib/assets/javascripts/tao/form/shared/fields/date_picker.coffee +10 -0
  46. data/lib/assets/javascripts/tao/form/shared/fields/datetime_picker.coffee +62 -0
  47. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/element/base.coffee +52 -0
  48. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/result/base.coffee +39 -0
  49. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segment_list/base.coffee +85 -0
  50. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/base.coffee +25 -0
  51. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/date_segment.coffee +95 -0
  52. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/hour_segment.coffee +28 -0
  53. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/index.coffee +1 -0
  54. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/minute_segment.coffee +28 -0
  55. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/month_segment.coffee +46 -0
  56. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/year_segment.coffee +57 -0
  57. data/lib/assets/javascripts/tao/form/shared/fields/month_picker.coffee +10 -0
  58. data/lib/assets/javascripts/tao/form/shared/fields/radio.coffee +19 -0
  59. data/lib/assets/javascripts/tao/form/shared/fields/select/element/base.coffee +122 -0
  60. data/lib/assets/javascripts/tao/form/shared/fields/select/list/base.coffee +79 -0
  61. data/lib/assets/javascripts/tao/form/shared/fields/select/models/data_provider.coffee +75 -0
  62. data/lib/assets/javascripts/tao/form/shared/fields/select/models/index.coffee +2 -0
  63. data/lib/assets/javascripts/tao/form/shared/fields/select/models/option.coffee +37 -0
  64. data/lib/assets/javascripts/tao/form/shared/fields/select/multiple_result/base.coffee +81 -0
  65. data/lib/assets/javascripts/tao/form/shared/fields/select/result/base.coffee +57 -0
  66. data/lib/assets/javascripts/tao/form/shared/fields/switch.coffee +19 -0
  67. data/lib/assets/javascripts/tao/form/shared/fields/time_picker.coffee +10 -0
  68. data/lib/assets/javascripts/tao/form/shared/mixins/checkable.coffee +11 -0
  69. data/lib/assets/javascripts/tao/ui/icons/form.coffee +11 -0
  70. data/lib/assets/stylesheets/tao/form/_globals.scss +3 -0
  71. data/lib/assets/stylesheets/tao/form/_mixins.scss +28 -0
  72. data/lib/assets/stylesheets/tao/form/_variables.scss +3 -0
  73. data/lib/assets/stylesheets/tao/form/fields/checkbox.scss +36 -0
  74. data/lib/assets/stylesheets/tao/form/fields/datetime_picker.scss +22 -0
  75. data/lib/assets/stylesheets/tao/form/fields/index.scss +6 -0
  76. data/lib/assets/stylesheets/tao/form/fields/moment_picker/index.scss +10 -0
  77. data/lib/assets/stylesheets/tao/form/fields/moment_picker/result.scss +61 -0
  78. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segment_list.scss +53 -0
  79. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/date_segment.scss +17 -0
  80. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/hour_segment.scss +15 -0
  81. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/minute_segment.scss +17 -0
  82. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/month_segment.scss +15 -0
  83. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/year_segment.scss +15 -0
  84. data/lib/assets/stylesheets/tao/form/fields/radio.scss +33 -0
  85. data/lib/assets/stylesheets/tao/form/fields/select/index.scss +10 -0
  86. data/lib/assets/stylesheets/tao/form/fields/select/list.scss +61 -0
  87. data/lib/assets/stylesheets/tao/form/fields/select/multiple_result.scss +72 -0
  88. data/lib/assets/stylesheets/tao/form/fields/select/result.scss +101 -0
  89. data/lib/assets/stylesheets/tao/form/fields/switch.scss +12 -0
  90. data/lib/assets/stylesheets/tao/form/index.scss +5 -0
  91. data/lib/assets/stylesheets/tao/form/inputs/boolean.scss +8 -0
  92. data/lib/assets/stylesheets/tao/form/inputs/group.scss +2 -0
  93. data/lib/assets/stylesheets/tao/form/inputs/index.scss +1 -0
  94. data/lib/assets/stylesheets/tao/form/inputs/text.scss +2 -0
  95. data/lib/assets/stylesheets/tao/form/layout.scss +148 -0
  96. data/lib/assets/stylesheets/tao/form/mobile/_globals.scss +3 -0
  97. data/lib/assets/stylesheets/tao/form/mobile/_mixins.scss +22 -0
  98. data/lib/assets/stylesheets/tao/form/mobile/_variables.scss +3 -0
  99. data/lib/assets/stylesheets/tao/form/mobile/fields/checkbox.scss +2 -0
  100. data/lib/assets/stylesheets/tao/form/mobile/fields/datetime_picker.scss +18 -0
  101. data/lib/assets/stylesheets/tao/form/mobile/fields/index.scss +1 -0
  102. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/index.scss +9 -0
  103. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/result.scss +19 -0
  104. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segment_list.scss +52 -0
  105. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/date_segment.scss +14 -0
  106. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/hour_segment.scss +14 -0
  107. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/minute_segment.scss +14 -0
  108. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/month_segment.scss +14 -0
  109. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/year_segment.scss +14 -0
  110. data/lib/assets/stylesheets/tao/form/mobile/fields/radio.scss +2 -0
  111. data/lib/assets/stylesheets/tao/form/mobile/fields/select/index.scss +66 -0
  112. data/lib/assets/stylesheets/tao/form/mobile/fields/select/list.scss +10 -0
  113. data/lib/assets/stylesheets/tao/form/mobile/fields/select/multiple_result.scss +12 -0
  114. data/lib/assets/stylesheets/tao/form/mobile/fields/select/result.scss +28 -0
  115. data/lib/assets/stylesheets/tao/form/mobile/fields/switch.scss +2 -0
  116. data/lib/assets/stylesheets/tao/form/mobile/index.scss +5 -0
  117. data/lib/assets/stylesheets/tao/form/mobile/inputs/boolean.scss +7 -0
  118. data/lib/assets/stylesheets/tao/form/mobile/inputs/group.scss +6 -0
  119. data/lib/assets/stylesheets/tao/form/mobile/inputs/index.scss +1 -0
  120. data/lib/assets/stylesheets/tao/form/mobile/inputs/text.scss +2 -0
  121. data/lib/assets/stylesheets/tao/form/mobile/layout.scss +137 -0
  122. data/lib/assets/stylesheets/tao/form/mobile/reset.scss +30 -0
  123. data/lib/assets/stylesheets/tao/form/mobile/variables/_base.scss +12 -0
  124. data/lib/assets/stylesheets/tao/form/mobile/variables/_moment_picker.scss +9 -0
  125. data/lib/assets/stylesheets/tao/form/mobile/variables/_select.scss +9 -0
  126. data/lib/assets/stylesheets/tao/form/reset.scss +30 -0
  127. data/lib/assets/stylesheets/tao/form/shared/fields/_checkbox.scss +61 -0
  128. data/lib/assets/stylesheets/tao/form/shared/fields/_radio.scss +53 -0
  129. data/lib/assets/stylesheets/tao/form/shared/fields/_switch.scss +56 -0
  130. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_result.scss +46 -0
  131. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_segment_list.scss +93 -0
  132. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_date_segment.scss +50 -0
  133. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_hour_segment.scss +35 -0
  134. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_minute_segment.scss +23 -0
  135. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_month_segment.scss +27 -0
  136. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_year_segment.scss +27 -0
  137. data/lib/assets/stylesheets/tao/form/shared/fields/select/_list.scss +136 -0
  138. data/lib/assets/stylesheets/tao/form/shared/fields/select/_multiple_result.scss +46 -0
  139. data/lib/assets/stylesheets/tao/form/shared/inputs/_boolean.scss +5 -0
  140. data/lib/assets/stylesheets/tao/form/shared/inputs/_group.scss +25 -0
  141. data/lib/assets/stylesheets/tao/form/shared/inputs/_text.scss +33 -0
  142. data/lib/assets/stylesheets/tao/form/variables/_base.scss +15 -0
  143. data/lib/assets/stylesheets/tao/form/variables/_moment_picker.scss +9 -0
  144. data/lib/assets/stylesheets/tao/form/variables/_select.scss +10 -0
  145. data/lib/tao_form.rb +5 -0
  146. data/lib/tao_form/components.rb +10 -0
  147. data/lib/tao_form/components/check_box_component.rb +29 -0
  148. data/lib/tao_form/components/date_picker_component.rb +25 -0
  149. data/lib/tao_form/components/datetime_picker_component.rb +50 -0
  150. data/lib/tao_form/components/field_component.rb +15 -0
  151. data/lib/tao_form/components/form_component.rb +24 -0
  152. data/lib/tao_form/components/moment_picker/base.rb +68 -0
  153. data/lib/tao_form/components/moment_picker/result_component.rb +31 -0
  154. data/lib/tao_form/components/moment_picker/segment_list_component.rb +36 -0
  155. data/lib/tao_form/components/moment_picker/segments.rb +6 -0
  156. data/lib/tao_form/components/moment_picker/segments/base.rb +17 -0
  157. data/lib/tao_form/components/moment_picker/segments/date_segment_component.rb +21 -0
  158. data/lib/tao_form/components/moment_picker/segments/hour_segment_component.rb +21 -0
  159. data/lib/tao_form/components/moment_picker/segments/minute_segment_component.rb +28 -0
  160. data/lib/tao_form/components/moment_picker/segments/month_segment_component.rb +15 -0
  161. data/lib/tao_form/components/moment_picker/segments/year_segment_component.rb +21 -0
  162. data/lib/tao_form/components/month_picker_component.rb +23 -0
  163. data/lib/tao_form/components/radio_button_component.rb +29 -0
  164. data/lib/tao_form/components/select/list_component.rb +23 -0
  165. data/lib/tao_form/components/select/multiple_result_component.rb +23 -0
  166. data/lib/tao_form/components/select/result_component.rb +35 -0
  167. data/lib/tao_form/components/select_component.rb +78 -0
  168. data/lib/tao_form/components/switch_component.rb +11 -0
  169. data/lib/tao_form/components/time_picker_component.rb +29 -0
  170. data/lib/tao_form/engine.rb +15 -0
  171. data/lib/tao_form/inputs.rb +9 -0
  172. data/lib/tao_form/inputs/boolean_input.rb +30 -0
  173. data/lib/tao_form/inputs/collection_check_boxes_input.rb +19 -0
  174. data/lib/tao_form/inputs/collection_radio_buttons_input.rb +19 -0
  175. data/lib/tao_form/inputs/collection_select_input.rb +21 -0
  176. data/lib/tao_form/inputs/date_time_input.rb +22 -0
  177. data/lib/tao_form/inputs/grouped_collection_select_input.rb +22 -0
  178. data/lib/tao_form/inputs/month_input.rb +7 -0
  179. data/lib/tao_form/inputs/numeric_input.rb +19 -0
  180. data/lib/tao_form/inputs/string_input.rb +19 -0
  181. data/lib/tao_form/version.rb +3 -0
  182. data/lib/views/components/tao_form/components/_check_box.html.erb +10 -0
  183. data/lib/views/components/tao_form/components/_datetime_picker.html.erb +7 -0
  184. data/lib/views/components/tao_form/components/_moment_picker.html+mobile.erb +17 -0
  185. data/lib/views/components/tao_form/components/_moment_picker.html.erb +4 -0
  186. data/lib/views/components/tao_form/components/_radio_button.html.erb +9 -0
  187. data/lib/views/components/tao_form/components/_select.html+mobile.erb +27 -0
  188. data/lib/views/components/tao_form/components/_select.html.erb +4 -0
  189. data/lib/views/components/tao_form/components/_switch.html.erb +10 -0
  190. data/lib/views/components/tao_form/components/moment_picker/_result.html+mobile.erb +11 -0
  191. data/lib/views/components/tao_form/components/moment_picker/_result.html.erb +14 -0
  192. data/lib/views/components/tao_form/components/moment_picker/_segment_list.html+mobile.erb +8 -0
  193. data/lib/views/components/tao_form/components/moment_picker/_segment_list.html.erb +4 -0
  194. data/lib/views/components/tao_form/components/moment_picker/segment_list/_labels.html.erb +13 -0
  195. data/lib/views/components/tao_form/components/moment_picker/segment_list/_segments.html.erb +7 -0
  196. data/lib/views/components/tao_form/components/moment_picker/segments/_date_segment.html.erb +14 -0
  197. data/lib/views/components/tao_form/components/moment_picker/segments/_hour_segment.html.erb +14 -0
  198. data/lib/views/components/tao_form/components/moment_picker/segments/_minute_segment.html.erb +9 -0
  199. data/lib/views/components/tao_form/components/moment_picker/segments/_month_segment.html.erb +16 -0
  200. data/lib/views/components/tao_form/components/moment_picker/segments/_year_segment.html.erb +10 -0
  201. data/lib/views/components/tao_form/components/select/_list.html.erb +18 -0
  202. data/lib/views/components/tao_form/components/select/_multiple_result.html+mobile.erb +3 -0
  203. data/lib/views/components/tao_form/components/select/_multiple_result.html.erb +7 -0
  204. data/lib/views/components/tao_form/components/select/_result.html+mobile.erb +10 -0
  205. data/lib/views/components/tao_form/components/select/_result.html.erb +14 -0
  206. data/vendor/assets/javascripts/moment.js +4463 -0
  207. data/vendor/assets/javascripts/moment/zh-cn.js +112 -0
  208. metadata +334 -0
@@ -0,0 +1,52 @@
1
+
2
+ class Tao.Form.MomentPicker.ElementBase extends TaoComponent
3
+
4
+ @attribute 'valueFormat', 'displayFormat'
5
+
6
+ @attribute 'active', 'disabled', type: 'boolean', observe: true
7
+
8
+ _connected: ->
9
+ @result = @findComponent 'tao-moment-picker-result', =>
10
+ @field = @result.field
11
+ @result.format = @displayFormat
12
+ @setMoment @field.val()
13
+ @segmentList = @findComponent 'tao-moment-picker-segment-list'
14
+
15
+ @_bind()
16
+
17
+ _disconnected: ->
18
+ @off()
19
+
20
+ _bind: ->
21
+ @on 'activeClick', 'tao-moment-picker-result', (e) =>
22
+ return if @disabled
23
+ @_toggleActive()
24
+ null
25
+
26
+ @on 'clear', 'tao-moment-picker-result', (e) =>
27
+ return if @disabled
28
+ @active = false
29
+ @setMoment null
30
+ @trigger 'change', [@moment]
31
+ null
32
+
33
+ @on 'momentSelect', 'tao-moment-picker-segment-list', (e, m) =>
34
+ @active = false
35
+ @setMoment m
36
+ @trigger 'change', [@moment]
37
+ null
38
+
39
+ _toggleActive: ->
40
+ @active = !@active
41
+
42
+ setMoment: (m) ->
43
+ m = moment(m, @valueFormat) unless moment.isMoment(m)
44
+ if m && m.isValid()
45
+ @result.setMoment m
46
+ @field.val m.format(@valueFormat)
47
+ @moment = m
48
+ else
49
+ @result.setMoment null
50
+ @field.val ''
51
+ @moment = null
52
+ @moment
@@ -0,0 +1,39 @@
1
+
2
+ class Tao.Form.MomentPicker.ResultBase extends TaoComponent
3
+
4
+ @tag 'tao-moment-picker-result'
5
+
6
+ @attribute 'selected', type: 'boolean'
7
+
8
+ @attribute 'disabled', type: 'boolean', observe: true
9
+
10
+ @attribute 'format'
11
+
12
+ _connected: ->
13
+ @field = @jq.find '> input'
14
+ @_bind()
15
+
16
+ _disconnected: ->
17
+ @off()
18
+
19
+ _bind: ->
20
+ @on 'click', 'input', =>
21
+ @trigger 'activeClick'
22
+ false
23
+
24
+ @on 'click', (e) =>
25
+ return if @disabled
26
+ @trigger 'activeClick'
27
+
28
+ clear: ->
29
+ @moment = null
30
+ @selected = false
31
+ @jq.find('.result-text').text ''
32
+
33
+ setMoment: (m) ->
34
+ unless m && moment.isMoment(m)
35
+ @clear()
36
+ return
37
+ @moment = m
38
+ @selected = true
39
+ @jq.find('.result-text').text m.format(@format)
@@ -0,0 +1,85 @@
1
+
2
+ class Tao.Form.MomentPicker.SegmentListBase extends TaoComponent
3
+
4
+ @tag 'tao-moment-picker-segment-list'
5
+
6
+ @attribute 'defaultSegment'
7
+
8
+ _connected: ->
9
+ @segments = @jq.find('.segment').get()
10
+ @momentData = null
11
+
12
+ @_bind()
13
+
14
+ _bind: ->
15
+ @on 'click', '.segment-label', (e) =>
16
+ segment = $(e.currentTarget).data('segment')
17
+ @_setActiveSegment segment
18
+ null
19
+
20
+ @on 'dataSelect', '.segment', (e, momentData) =>
21
+ @_setMomentData momentData
22
+ @_activateNextSegment()
23
+
24
+ @on 'dataRefresh', '.segment', (e, momentData) =>
25
+ @_setMomentData momentData
26
+
27
+ setMoment: (m) ->
28
+ m = null unless m && moment.isMoment(m)
29
+ momentData = {}
30
+
31
+ @segments.forEach (segment) ->
32
+ momentData[segment.segmentName] = if m
33
+ m[segment.segmentName]()
34
+ else
35
+ null
36
+
37
+ @_setActiveSegment @defaultSegment
38
+ @_setMomentData momentData
39
+ m
40
+
41
+ _findSegmentLabel: (segment) ->
42
+ segment = @_findSegment(segment) if typeof segment == 'string'
43
+ @jq.find(".segment-label[data-segment='#{segment.segmentName}']")
44
+
45
+ _findSegment: (segmentName) ->
46
+ if segmentName instanceof Tao.Form.MomentPicker.SegmentBase
47
+ return segmentName
48
+ _.find @segments, (segment) -> segment.segmentName == segmentName
49
+
50
+ _setMomentData: (momentData) ->
51
+ for segment in @segments
52
+ break if segment.setMomentData(_.clone(momentData)) == false
53
+ $label = @_findSegmentLabel(segment)
54
+ if !_.isNil segment.value()
55
+ $label.addClass 'selected'
56
+ .find('.value').text segment.label()
57
+ else
58
+ $label.removeClass 'selected'
59
+ .find('.value').text ''
60
+
61
+ @momentData = momentData
62
+
63
+ _setActiveSegment: (segment) ->
64
+ segment = @_findSegment(segment) if typeof segment == 'string'
65
+ return if segment == @activeSegment
66
+
67
+ if @activeSegment
68
+ @_findSegmentLabel(@activeSegment).removeClass 'active'
69
+ @activeSegment.active = false
70
+
71
+ @_findSegmentLabel(segment).addClass 'active'
72
+ segment.active = true
73
+ @activeSegment = segment
74
+
75
+ _activateNextSegment: ->
76
+ segment = _.find @segments, (s) => _.isNil @momentData[s.segmentName]
77
+ if segment
78
+ @_setActiveSegment segment
79
+ else if @activeSegment
80
+ if ($segment = @activeSegment.jq.next('.segment')).length > 0
81
+ @_setActiveSegment $segment.get(0)
82
+ else
83
+ @trigger 'momentSelect', [moment @momentData]
84
+ else
85
+ @_setActiveSegment @segments[0]
@@ -0,0 +1,25 @@
1
+
2
+ class Tao.Form.MomentPicker.SegmentBase extends TaoComponent
3
+
4
+ @attribute 'labelFormat'
5
+
6
+ @attribute 'active', type: 'boolean'
7
+
8
+ segmentName: ''
9
+
10
+ _connected: ->
11
+ @momentData = {}
12
+ @_bind()
13
+
14
+ _bind: ->
15
+
16
+ setMomentData: (momentData) ->
17
+ @momentData = momentData
18
+
19
+ value: ->
20
+ @momentData[@segmentName]
21
+
22
+ label: ->
23
+ format = @labelFormat || "{{ #{@segmentName} }}"
24
+ compiled = _.template(format, interpolate: /{{([\s\S]+?)}}/g)
25
+ compiled @momentData
@@ -0,0 +1,95 @@
1
+ #= require ./base
2
+
3
+ MomentPicker = Tao.Form.MomentPicker
4
+
5
+ class MomentPicker.DateSegment extends MomentPicker.SegmentBase
6
+
7
+ @tag 'tao-moment-picker-date-segment'
8
+
9
+ segmentName: 'date'
10
+
11
+ dateFormat: 'YYYY-MM-DD'
12
+
13
+ _connected: ->
14
+ super
15
+ @momentData = {}
16
+ @_renderWeekdays()
17
+
18
+ _bind: ->
19
+ @on 'click', '.day', (e) =>
20
+ $day = $ e.currentTarget
21
+ date = moment $day.data('date'), @dateFormat
22
+ momentData = _.clone @momentData
23
+ momentData.year = date.year()
24
+ momentData.month = date.month()
25
+ momentData.date = date.date()
26
+ @trigger 'dataSelect', [momentData]
27
+
28
+ @on 'click', '.link-prev-month, .link-next-month', (e) =>
29
+ month = if $(e.currentTarget).is('.link-prev-month')
30
+ moment(@momentData).subtract(1, 'month')
31
+ else
32
+ moment(@momentData).add(1, 'month')
33
+
34
+ momentData = _.clone @momentData
35
+ momentData.year = month.year()
36
+ momentData.month = month.month()
37
+ momentData.date = null
38
+ @trigger 'dataRefresh', [momentData]
39
+
40
+ setMomentData: (momentData) ->
41
+ if @active && (_.isNil(momentData['year']) || _.isNil(momentData['month']))
42
+ now = moment()
43
+ momentData.year = now.year()
44
+ momentData.month = now.month()
45
+ momentData.date = null
46
+ @trigger 'dataRefresh', [momentData]
47
+ return false
48
+ else if @momentData && momentData &&
49
+ momentData['year'] == @momentData['year'] &&
50
+ momentData['month'] == @momentData['month']
51
+ @_renderDate momentData
52
+ else
53
+ @_renderCalendar momentData
54
+
55
+ super
56
+
57
+ _renderDate: (momentData = @momentData) ->
58
+ @jq.find('.day.selected').removeClass('selected')
59
+
60
+ date = moment(momentData)
61
+ return if _.isNil(momentData[@segmentName]) || !date.isValid()
62
+ @jq.find(".day[data-date='#{date.format(@dateFormat)}']")
63
+ .addClass('selected')
64
+
65
+ _renderCalendar: (momentData = @momentData) ->
66
+ $days = @jq.find('.days').empty()
67
+ date = moment(momentData).startOf('day')
68
+ startDate = date.clone().startOf('month').startOf('week')
69
+ endDate = date.clone().endOf('month').endOf('week')
70
+ while startDate.isSameOrBefore(endDate)
71
+ $day = $ '<a>',
72
+ href: 'javascript:;'
73
+ class: 'day'
74
+ 'data-date': startDate.format(@dateFormat)
75
+ text: startDate.format('D')
76
+
77
+ $day.addClass('outside') unless startDate.month() == date.month()
78
+ $day.addClass('today') if startDate.isSame(moment().startOf('day'))
79
+ if startDate.date() == momentData['date'] &&
80
+ startDate.month() == momentData['month']
81
+ $day.addClass('selected')
82
+
83
+ weekdays = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']
84
+ $day.addClass weekdays[startDate.day()]
85
+ .appendTo $days
86
+ startDate.add 1, 'days'
87
+
88
+ _renderWeekdays: ->
89
+ $head = @jq.find('.weekdays')
90
+ $.each moment.weekdaysMin(true), (i, weekdayName) ->
91
+ $('<span>', class: 'weekday', text: weekdayName)
92
+ .appendTo $head
93
+
94
+
95
+ TaoComponent.register MomentPicker.DateSegment
@@ -0,0 +1,28 @@
1
+ #= require ./base
2
+
3
+ MomentPicker = Tao.Form.MomentPicker
4
+
5
+ class MomentPicker.HourSegment extends MomentPicker.SegmentBase
6
+
7
+ @tag 'tao-moment-picker-hour-segment'
8
+
9
+ segmentName: 'hour'
10
+
11
+ _bind: ->
12
+ @on 'click', '.hour', (e) =>
13
+ $hour = $ e.currentTarget
14
+ momentData = _.clone @momentData
15
+ momentData.hour = $hour.data 'hour'
16
+ @trigger 'dataSelect', [momentData]
17
+
18
+ setMomentData: (momentData) ->
19
+ super
20
+ @_render()
21
+ @momentData
22
+
23
+ _render: ->
24
+ @jq.find('.hour.selected').removeClass 'selected'
25
+ unless _.isNil @value()
26
+ @jq.find(".hour[data-hour='#{@value()}']").addClass 'selected'
27
+
28
+ TaoComponent.register MomentPicker.HourSegment
@@ -0,0 +1,28 @@
1
+ #= require ./base
2
+
3
+ MomentPicker = Tao.Form.MomentPicker
4
+
5
+ class MomentPicker.MinuteSegment extends MomentPicker.SegmentBase
6
+
7
+ @tag 'tao-moment-picker-minute-segment'
8
+
9
+ segmentName: 'minute'
10
+
11
+ _bind: ->
12
+ @on 'click', '.minute', (e) =>
13
+ $minute = $ e.currentTarget
14
+ momentData = _.clone @momentData
15
+ momentData.minute = $minute.data 'minute'
16
+ @trigger 'dataSelect', [momentData]
17
+
18
+ setMomentData: (momentData) ->
19
+ super
20
+ @_render()
21
+ @momentData
22
+
23
+ _render: ->
24
+ @jq.find('.minute.selected').removeClass 'selected'
25
+ unless _.isNil @value()
26
+ @jq.find(".minute[data-minute='#{@value()}']").addClass 'selected'
27
+
28
+ TaoComponent.register MomentPicker.MinuteSegment
@@ -0,0 +1,46 @@
1
+ #= require ./base
2
+
3
+ MomentPicker = Tao.Form.MomentPicker
4
+
5
+ class MomentPicker.MonthSegment extends MomentPicker.SegmentBase
6
+
7
+ @tag 'tao-moment-picker-month-segment'
8
+
9
+ segmentName: 'month'
10
+
11
+ _bind: ->
12
+ @on 'click', '.month', (e) =>
13
+ $month = $ e.currentTarget
14
+ momentData = _.clone @momentData
15
+ momentData.month = $month.data 'month'
16
+ momentData.date = null
17
+ @trigger 'dataSelect', [momentData]
18
+
19
+ @on 'click', '.link-prev-year, .link-next-year', (e) =>
20
+ momentData = _.clone @momentData
21
+ if $(e.currentTarget).is('.link-prev-year')
22
+ momentData['year'] -= 1
23
+ else
24
+ momentData['year'] += 1
25
+ momentData.date = null
26
+ @trigger 'dataRefresh', [momentData]
27
+
28
+ setMomentData: (momentData) ->
29
+ super
30
+ @_render()
31
+ @momentData
32
+
33
+ _render: ->
34
+ @jq.find('.month.selected').removeClass 'selected'
35
+ @jq.find('.month.current').removeClass 'current'
36
+ unless _.isNil @value()
37
+ @jq.find(".month[data-month='#{@value()}']").addClass 'selected'
38
+
39
+ now = moment()
40
+ if @momentData['year'] == now.year()
41
+ @jq.find(".month[data-month='#{now.month()}']").addClass 'current'
42
+
43
+ label: ->
44
+ moment.monthsShort()[@value() * 1]
45
+
46
+ TaoComponent.register MomentPicker.MonthSegment
@@ -0,0 +1,57 @@
1
+ #= require ./base
2
+
3
+ MomentPicker = Tao.Form.MomentPicker
4
+
5
+ class MomentPicker.YearSegment extends MomentPicker.SegmentBase
6
+
7
+ @tag 'tao-moment-picker-year-segment'
8
+
9
+ segmentName: 'year'
10
+
11
+ _bind: ->
12
+ @on 'click', '.year', (e) =>
13
+ $year = $ e.currentTarget
14
+ momentData = _.clone @momentData
15
+ momentData.year = $year.data 'year'
16
+ momentData.month = null
17
+ momentData.date = null
18
+ @trigger 'dataSelect', [momentData]
19
+
20
+ @on 'click', '.link-prev-years, .link-next-years', (e) =>
21
+ momentData = _.clone @momentData
22
+ if $(e.currentTarget).is('.link-prev-years')
23
+ momentData['year'] -= 9
24
+ else
25
+ momentData['year'] += 9
26
+ momentData.month = null
27
+ momentData.date = null
28
+ @trigger 'dataRefresh', [momentData]
29
+
30
+ setMomentData: (momentData) ->
31
+ super
32
+
33
+ if _.isNil @value()
34
+ momentData.year = moment().year()
35
+ @trigger 'dataRefresh', [momentData]
36
+ return false
37
+
38
+ @_render()
39
+
40
+ _render: ->
41
+ $yearList = @jq.find('.year-list').empty()
42
+
43
+ start = @value() - 4
44
+ end = @value() + 4
45
+ currentYear = moment().year()
46
+ for year in [start..end]
47
+ $year = $ '<a>',
48
+ href: 'javascript:;'
49
+ class: 'year'
50
+ 'data-year': year
51
+ text: year
52
+
53
+ $year.addClass('current') if year == currentYear
54
+ $year.addClass('selected') if year == @value()
55
+ $year.appendTo $yearList
56
+
57
+ TaoComponent.register MomentPicker.YearSegment