tao_form 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +10 -0
- data/lib/assets/icons/arrow-down.svg +12 -0
- data/lib/assets/icons/arrow-left.svg +12 -0
- data/lib/assets/icons/arrow-right.svg +12 -0
- data/lib/assets/icons/calendar.svg +12 -0
- data/lib/assets/icons/checkbox.svg +12 -0
- data/lib/assets/icons/clock.svg +12 -0
- data/lib/assets/icons/search.svg +12 -0
- data/lib/assets/icons/success.svg +12 -0
- data/lib/assets/javascripts/tao/form/element.coffee +16 -0
- data/lib/assets/javascripts/tao/form/fields/checkbox.coffee +14 -0
- data/lib/assets/javascripts/tao/form/fields/index.coffee +9 -0
- data/lib/assets/javascripts/tao/form/fields/moment_picker/element.coffee +38 -0
- data/lib/assets/javascripts/tao/form/fields/moment_picker/index.coffee +7 -0
- data/lib/assets/javascripts/tao/form/fields/moment_picker/result.coffee +25 -0
- data/lib/assets/javascripts/tao/form/fields/moment_picker/segment_list.coffee +14 -0
- data/lib/assets/javascripts/tao/form/fields/radio.coffee +14 -0
- data/lib/assets/javascripts/tao/form/fields/select/element.coffee +79 -0
- data/lib/assets/javascripts/tao/form/fields/select/index.coffee +8 -0
- data/lib/assets/javascripts/tao/form/fields/select/list.coffee +98 -0
- data/lib/assets/javascripts/tao/form/fields/select/multiple_result.coffee +41 -0
- data/lib/assets/javascripts/tao/form/fields/select/result.coffee +39 -0
- data/lib/assets/javascripts/tao/form/fields/switch.coffee +14 -0
- data/lib/assets/javascripts/tao/form/index.coffee +17 -0
- data/lib/assets/javascripts/tao/form/mobile/element.coffee +5 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/checkbox.coffee +5 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/index.coffee +9 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/element.coffee +36 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/index.coffee +7 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/result.coffee +5 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/segment_list.coffee +24 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/radio.coffee +5 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/select/element.coffee +61 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/select/index.coffee +8 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/select/list.coffee +13 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/select/multiple_result.coffee +5 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/select/result.coffee +5 -0
- data/lib/assets/javascripts/tao/form/mobile/fields/switch.coffee +5 -0
- data/lib/assets/javascripts/tao/form/mobile/index.coffee +10 -0
- data/lib/assets/javascripts/tao/form/shared/element/base.coffee +48 -0
- data/lib/assets/javascripts/tao/form/shared/fields/checkbox.coffee +21 -0
- data/lib/assets/javascripts/tao/form/shared/fields/date_picker.coffee +10 -0
- data/lib/assets/javascripts/tao/form/shared/fields/datetime_picker.coffee +62 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/element/base.coffee +52 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/result/base.coffee +39 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segment_list/base.coffee +85 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/base.coffee +25 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/date_segment.coffee +95 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/hour_segment.coffee +28 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/index.coffee +1 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/minute_segment.coffee +28 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/month_segment.coffee +46 -0
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/year_segment.coffee +57 -0
- data/lib/assets/javascripts/tao/form/shared/fields/month_picker.coffee +10 -0
- data/lib/assets/javascripts/tao/form/shared/fields/radio.coffee +19 -0
- data/lib/assets/javascripts/tao/form/shared/fields/select/element/base.coffee +122 -0
- data/lib/assets/javascripts/tao/form/shared/fields/select/list/base.coffee +79 -0
- data/lib/assets/javascripts/tao/form/shared/fields/select/models/data_provider.coffee +75 -0
- data/lib/assets/javascripts/tao/form/shared/fields/select/models/index.coffee +2 -0
- data/lib/assets/javascripts/tao/form/shared/fields/select/models/option.coffee +37 -0
- data/lib/assets/javascripts/tao/form/shared/fields/select/multiple_result/base.coffee +81 -0
- data/lib/assets/javascripts/tao/form/shared/fields/select/result/base.coffee +57 -0
- data/lib/assets/javascripts/tao/form/shared/fields/switch.coffee +19 -0
- data/lib/assets/javascripts/tao/form/shared/fields/time_picker.coffee +10 -0
- data/lib/assets/javascripts/tao/form/shared/mixins/checkable.coffee +11 -0
- data/lib/assets/javascripts/tao/ui/icons/form.coffee +11 -0
- data/lib/assets/stylesheets/tao/form/_globals.scss +3 -0
- data/lib/assets/stylesheets/tao/form/_mixins.scss +28 -0
- data/lib/assets/stylesheets/tao/form/_variables.scss +3 -0
- data/lib/assets/stylesheets/tao/form/fields/checkbox.scss +36 -0
- data/lib/assets/stylesheets/tao/form/fields/datetime_picker.scss +22 -0
- data/lib/assets/stylesheets/tao/form/fields/index.scss +6 -0
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/index.scss +10 -0
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/result.scss +61 -0
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segment_list.scss +53 -0
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/date_segment.scss +17 -0
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/hour_segment.scss +15 -0
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/minute_segment.scss +17 -0
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/month_segment.scss +15 -0
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/year_segment.scss +15 -0
- data/lib/assets/stylesheets/tao/form/fields/radio.scss +33 -0
- data/lib/assets/stylesheets/tao/form/fields/select/index.scss +10 -0
- data/lib/assets/stylesheets/tao/form/fields/select/list.scss +61 -0
- data/lib/assets/stylesheets/tao/form/fields/select/multiple_result.scss +72 -0
- data/lib/assets/stylesheets/tao/form/fields/select/result.scss +101 -0
- data/lib/assets/stylesheets/tao/form/fields/switch.scss +12 -0
- data/lib/assets/stylesheets/tao/form/index.scss +5 -0
- data/lib/assets/stylesheets/tao/form/inputs/boolean.scss +8 -0
- data/lib/assets/stylesheets/tao/form/inputs/group.scss +2 -0
- data/lib/assets/stylesheets/tao/form/inputs/index.scss +1 -0
- data/lib/assets/stylesheets/tao/form/inputs/text.scss +2 -0
- data/lib/assets/stylesheets/tao/form/layout.scss +148 -0
- data/lib/assets/stylesheets/tao/form/mobile/_globals.scss +3 -0
- data/lib/assets/stylesheets/tao/form/mobile/_mixins.scss +22 -0
- data/lib/assets/stylesheets/tao/form/mobile/_variables.scss +3 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/checkbox.scss +2 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/datetime_picker.scss +18 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/index.scss +1 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/index.scss +9 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/result.scss +19 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segment_list.scss +52 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/date_segment.scss +14 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/hour_segment.scss +14 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/minute_segment.scss +14 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/month_segment.scss +14 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/year_segment.scss +14 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/radio.scss +2 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/select/index.scss +66 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/select/list.scss +10 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/select/multiple_result.scss +12 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/select/result.scss +28 -0
- data/lib/assets/stylesheets/tao/form/mobile/fields/switch.scss +2 -0
- data/lib/assets/stylesheets/tao/form/mobile/index.scss +5 -0
- data/lib/assets/stylesheets/tao/form/mobile/inputs/boolean.scss +7 -0
- data/lib/assets/stylesheets/tao/form/mobile/inputs/group.scss +6 -0
- data/lib/assets/stylesheets/tao/form/mobile/inputs/index.scss +1 -0
- data/lib/assets/stylesheets/tao/form/mobile/inputs/text.scss +2 -0
- data/lib/assets/stylesheets/tao/form/mobile/layout.scss +137 -0
- data/lib/assets/stylesheets/tao/form/mobile/reset.scss +30 -0
- data/lib/assets/stylesheets/tao/form/mobile/variables/_base.scss +12 -0
- data/lib/assets/stylesheets/tao/form/mobile/variables/_moment_picker.scss +9 -0
- data/lib/assets/stylesheets/tao/form/mobile/variables/_select.scss +9 -0
- data/lib/assets/stylesheets/tao/form/reset.scss +30 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/_checkbox.scss +61 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/_radio.scss +53 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/_switch.scss +56 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_result.scss +46 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_segment_list.scss +93 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_date_segment.scss +50 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_hour_segment.scss +35 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_minute_segment.scss +23 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_month_segment.scss +27 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_year_segment.scss +27 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/select/_list.scss +136 -0
- data/lib/assets/stylesheets/tao/form/shared/fields/select/_multiple_result.scss +46 -0
- data/lib/assets/stylesheets/tao/form/shared/inputs/_boolean.scss +5 -0
- data/lib/assets/stylesheets/tao/form/shared/inputs/_group.scss +25 -0
- data/lib/assets/stylesheets/tao/form/shared/inputs/_text.scss +33 -0
- data/lib/assets/stylesheets/tao/form/variables/_base.scss +15 -0
- data/lib/assets/stylesheets/tao/form/variables/_moment_picker.scss +9 -0
- data/lib/assets/stylesheets/tao/form/variables/_select.scss +10 -0
- data/lib/tao_form.rb +5 -0
- data/lib/tao_form/components.rb +10 -0
- data/lib/tao_form/components/check_box_component.rb +29 -0
- data/lib/tao_form/components/date_picker_component.rb +25 -0
- data/lib/tao_form/components/datetime_picker_component.rb +50 -0
- data/lib/tao_form/components/field_component.rb +15 -0
- data/lib/tao_form/components/form_component.rb +24 -0
- data/lib/tao_form/components/moment_picker/base.rb +68 -0
- data/lib/tao_form/components/moment_picker/result_component.rb +31 -0
- data/lib/tao_form/components/moment_picker/segment_list_component.rb +36 -0
- data/lib/tao_form/components/moment_picker/segments.rb +6 -0
- data/lib/tao_form/components/moment_picker/segments/base.rb +17 -0
- data/lib/tao_form/components/moment_picker/segments/date_segment_component.rb +21 -0
- data/lib/tao_form/components/moment_picker/segments/hour_segment_component.rb +21 -0
- data/lib/tao_form/components/moment_picker/segments/minute_segment_component.rb +28 -0
- data/lib/tao_form/components/moment_picker/segments/month_segment_component.rb +15 -0
- data/lib/tao_form/components/moment_picker/segments/year_segment_component.rb +21 -0
- data/lib/tao_form/components/month_picker_component.rb +23 -0
- data/lib/tao_form/components/radio_button_component.rb +29 -0
- data/lib/tao_form/components/select/list_component.rb +23 -0
- data/lib/tao_form/components/select/multiple_result_component.rb +23 -0
- data/lib/tao_form/components/select/result_component.rb +35 -0
- data/lib/tao_form/components/select_component.rb +78 -0
- data/lib/tao_form/components/switch_component.rb +11 -0
- data/lib/tao_form/components/time_picker_component.rb +29 -0
- data/lib/tao_form/engine.rb +15 -0
- data/lib/tao_form/inputs.rb +9 -0
- data/lib/tao_form/inputs/boolean_input.rb +30 -0
- data/lib/tao_form/inputs/collection_check_boxes_input.rb +19 -0
- data/lib/tao_form/inputs/collection_radio_buttons_input.rb +19 -0
- data/lib/tao_form/inputs/collection_select_input.rb +21 -0
- data/lib/tao_form/inputs/date_time_input.rb +22 -0
- data/lib/tao_form/inputs/grouped_collection_select_input.rb +22 -0
- data/lib/tao_form/inputs/month_input.rb +7 -0
- data/lib/tao_form/inputs/numeric_input.rb +19 -0
- data/lib/tao_form/inputs/string_input.rb +19 -0
- data/lib/tao_form/version.rb +3 -0
- data/lib/views/components/tao_form/components/_check_box.html.erb +10 -0
- data/lib/views/components/tao_form/components/_datetime_picker.html.erb +7 -0
- data/lib/views/components/tao_form/components/_moment_picker.html+mobile.erb +17 -0
- data/lib/views/components/tao_form/components/_moment_picker.html.erb +4 -0
- data/lib/views/components/tao_form/components/_radio_button.html.erb +9 -0
- data/lib/views/components/tao_form/components/_select.html+mobile.erb +27 -0
- data/lib/views/components/tao_form/components/_select.html.erb +4 -0
- data/lib/views/components/tao_form/components/_switch.html.erb +10 -0
- data/lib/views/components/tao_form/components/moment_picker/_result.html+mobile.erb +11 -0
- data/lib/views/components/tao_form/components/moment_picker/_result.html.erb +14 -0
- data/lib/views/components/tao_form/components/moment_picker/_segment_list.html+mobile.erb +8 -0
- data/lib/views/components/tao_form/components/moment_picker/_segment_list.html.erb +4 -0
- data/lib/views/components/tao_form/components/moment_picker/segment_list/_labels.html.erb +13 -0
- data/lib/views/components/tao_form/components/moment_picker/segment_list/_segments.html.erb +7 -0
- data/lib/views/components/tao_form/components/moment_picker/segments/_date_segment.html.erb +14 -0
- data/lib/views/components/tao_form/components/moment_picker/segments/_hour_segment.html.erb +14 -0
- data/lib/views/components/tao_form/components/moment_picker/segments/_minute_segment.html.erb +9 -0
- data/lib/views/components/tao_form/components/moment_picker/segments/_month_segment.html.erb +16 -0
- data/lib/views/components/tao_form/components/moment_picker/segments/_year_segment.html.erb +10 -0
- data/lib/views/components/tao_form/components/select/_list.html.erb +18 -0
- data/lib/views/components/tao_form/components/select/_multiple_result.html+mobile.erb +3 -0
- data/lib/views/components/tao_form/components/select/_multiple_result.html.erb +7 -0
- data/lib/views/components/tao_form/components/select/_result.html+mobile.erb +10 -0
- data/lib/views/components/tao_form/components/select/_result.html.erb +14 -0
- data/vendor/assets/javascripts/moment.js +4463 -0
- data/vendor/assets/javascripts/moment/zh-cn.js +112 -0
- 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 @@
|
|
1
|
+
#= require_tree ./
|
data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/minute_segment.coffee
ADDED
@@ -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
|
data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/month_segment.coffee
ADDED
@@ -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
|