tao_form 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/config/locales/tao_form/components/date_range_picker/en.yml +5 -0
  3. data/config/locales/tao_form/components/date_range_picker/zh-CN.yml +7 -0
  4. data/lib/assets/javascripts/tao/form/fields/checkbox.coffee +2 -1
  5. data/lib/assets/javascripts/tao/form/fields/index.coffee +1 -0
  6. data/lib/assets/javascripts/tao/form/fields/moment_picker/element.coffee +1 -1
  7. data/lib/assets/javascripts/tao/form/fields/moment_picker/result.coffee +1 -1
  8. data/lib/assets/javascripts/tao/form/fields/moment_picker/segment_list.coffee +1 -1
  9. data/lib/assets/javascripts/tao/form/fields/radio.coffee +1 -1
  10. data/lib/assets/javascripts/tao/form/fields/select/element.coffee +3 -3
  11. data/lib/assets/javascripts/tao/form/fields/select/list.coffee +8 -3
  12. data/lib/assets/javascripts/tao/form/fields/select/multiple_result.coffee +4 -4
  13. data/lib/assets/javascripts/tao/form/fields/select/result.coffee +5 -5
  14. data/lib/assets/javascripts/tao/form/fields/switch.coffee +1 -1
  15. data/lib/assets/javascripts/tao/form/index.coffee +1 -7
  16. data/lib/assets/javascripts/tao/form/mobile/fields/index.coffee +1 -0
  17. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/element.coffee +2 -2
  18. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/segment_list.coffee +1 -1
  19. data/lib/assets/javascripts/tao/form/mobile/fields/select/element.coffee +13 -4
  20. data/lib/assets/javascripts/tao/form/mobile/fields/select/list.coffee +0 -8
  21. data/lib/assets/javascripts/tao/form/mobile/index.coffee +1 -0
  22. data/lib/assets/javascripts/tao/form/shared/element/base.coffee +6 -2
  23. data/lib/assets/javascripts/tao/form/shared/fields/checkbox.coffee +5 -1
  24. data/lib/assets/javascripts/tao/form/shared/fields/date_range_picker.coffee +75 -0
  25. data/lib/assets/javascripts/tao/form/shared/fields/datetime_picker.coffee +16 -6
  26. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/element/base.coffee +30 -13
  27. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/result/base.coffee +2 -2
  28. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segment_list/base.coffee +5 -5
  29. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/base.coffee +2 -0
  30. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/date_segment.coffee +12 -3
  31. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/hour_segment.coffee +1 -1
  32. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/minute_segment.coffee +1 -1
  33. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/month_segment.coffee +2 -2
  34. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/year_segment.coffee +3 -3
  35. data/lib/assets/javascripts/tao/form/shared/fields/radio.coffee +5 -1
  36. data/lib/assets/javascripts/tao/form/shared/fields/select/element/base.coffee +24 -20
  37. data/lib/assets/javascripts/tao/form/shared/fields/select/list/base.coffee +21 -3
  38. data/lib/assets/javascripts/tao/form/shared/fields/select/models/data_provider.coffee +0 -8
  39. data/lib/assets/javascripts/tao/form/shared/fields/select/multiple_result/base.coffee +17 -8
  40. data/lib/assets/javascripts/tao/form/shared/fields/select/result/base.coffee +5 -5
  41. data/lib/assets/javascripts/tao/form/shared/fields/switch.coffee +5 -1
  42. data/lib/assets/javascripts/tao/form/shared/init.coffee +23 -0
  43. data/lib/assets/stylesheets/tao/form/fields/checkbox.scss +1 -1
  44. data/lib/assets/stylesheets/tao/form/fields/date_range_picker.scss +20 -0
  45. data/lib/assets/stylesheets/tao/form/fields/datetime_picker.scss +3 -3
  46. data/lib/assets/stylesheets/tao/form/fields/index.scss +1 -0
  47. data/lib/assets/stylesheets/tao/form/fields/moment_picker/index.scss +1 -1
  48. data/lib/assets/stylesheets/tao/form/fields/moment_picker/result.scss +1 -1
  49. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segment_list.scss +2 -2
  50. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/date_segment.scss +1 -1
  51. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/hour_segment.scss +1 -1
  52. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/minute_segment.scss +1 -1
  53. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/month_segment.scss +1 -1
  54. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/year_segment.scss +1 -1
  55. data/lib/assets/stylesheets/tao/form/fields/radio.scss +1 -1
  56. data/lib/assets/stylesheets/tao/form/fields/select/index.scss +1 -1
  57. data/lib/assets/stylesheets/tao/form/fields/select/list.scss +2 -8
  58. data/lib/assets/stylesheets/tao/form/fields/select/multiple_result.scss +1 -1
  59. data/lib/assets/stylesheets/tao/form/fields/select/result.scss +2 -2
  60. data/lib/assets/stylesheets/tao/form/fields/switch.scss +6 -4
  61. data/lib/assets/stylesheets/tao/form/inputs/boolean.scss +1 -1
  62. data/lib/assets/stylesheets/tao/form/layouts/default.scss +4 -4
  63. data/lib/assets/stylesheets/tao/form/mobile/fields/date_range_picker.scss +18 -0
  64. data/lib/assets/stylesheets/tao/form/mobile/fields/datetime_picker.scss +3 -3
  65. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/index.scss +1 -1
  66. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/result.scss +1 -1
  67. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segment_list.scss +2 -2
  68. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/date_segment.scss +1 -1
  69. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/hour_segment.scss +1 -1
  70. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/minute_segment.scss +1 -1
  71. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/month_segment.scss +1 -1
  72. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/year_segment.scss +1 -1
  73. data/lib/assets/stylesheets/tao/form/mobile/fields/select/index.scss +1 -1
  74. data/lib/assets/stylesheets/tao/form/mobile/fields/select/list.scss +1 -1
  75. data/lib/assets/stylesheets/tao/form/mobile/fields/select/multiple_result.scss +1 -1
  76. data/lib/assets/stylesheets/tao/form/mobile/fields/select/result.scss +1 -1
  77. data/lib/assets/stylesheets/tao/form/mobile/inputs/boolean.scss +1 -1
  78. data/lib/assets/stylesheets/tao/form/mobile/inputs/group.scss +1 -1
  79. data/lib/assets/stylesheets/tao/form/mobile/layout.scss +2 -2
  80. data/lib/assets/stylesheets/tao/form/reset.scss +1 -0
  81. data/lib/assets/stylesheets/tao/form/shared/fields/_checkbox.scss +1 -1
  82. data/lib/assets/stylesheets/tao/form/shared/fields/_radio.scss +1 -1
  83. data/lib/assets/stylesheets/tao/form/shared/fields/_switch.scss +1 -1
  84. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_result.scss +1 -1
  85. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_segment_list.scss +2 -2
  86. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_date_segment.scss +8 -2
  87. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_hour_segment.scss +1 -1
  88. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_minute_segment.scss +1 -1
  89. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_month_segment.scss +1 -1
  90. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_year_segment.scss +1 -1
  91. data/lib/assets/stylesheets/tao/form/shared/fields/select/_list.scss +6 -2
  92. data/lib/assets/stylesheets/tao/form/shared/fields/select/_multiple_result.scss +1 -1
  93. data/lib/assets/stylesheets/tao/form/shared/inputs/_boolean.scss +1 -1
  94. data/lib/assets/stylesheets/tao/form/shared/inputs/_group.scss +1 -1
  95. data/lib/assets/stylesheets/tao/form/shared/inputs/_text.scss +3 -3
  96. data/lib/tao_form/components.rb +1 -0
  97. data/lib/tao_form/components/check_box_component.rb +4 -0
  98. data/lib/tao_form/components/date_picker_component.rb +6 -0
  99. data/lib/tao_form/components/date_range_picker_component.rb +64 -0
  100. data/lib/tao_form/components/datetime_picker_component.rb +7 -1
  101. data/lib/tao_form/components/form_component.rb +2 -2
  102. data/lib/tao_form/components/moment_picker/base.rb +13 -4
  103. data/lib/tao_form/components/moment_picker/result_component.rb +13 -2
  104. data/lib/tao_form/components/moment_picker/segment_list_component.rb +18 -4
  105. data/lib/tao_form/components/moment_picker/segments/base.rb +1 -1
  106. data/lib/tao_form/components/moment_picker/segments/date_segment_component.rb +4 -1
  107. data/lib/tao_form/components/moment_picker/segments/hour_segment_component.rb +4 -1
  108. data/lib/tao_form/components/moment_picker/segments/minute_segment_component.rb +4 -1
  109. data/lib/tao_form/components/moment_picker/segments/month_segment_component.rb +8 -0
  110. data/lib/tao_form/components/moment_picker/segments/year_segment_component.rb +4 -1
  111. data/lib/tao_form/components/month_picker_component.rb +6 -0
  112. data/lib/tao_form/components/radio_button_component.rb +4 -0
  113. data/lib/tao_form/components/select/list_component.rb +1 -1
  114. data/lib/tao_form/components/select/multiple_result_component.rb +1 -1
  115. data/lib/tao_form/components/select/result_component.rb +1 -1
  116. data/lib/tao_form/components/select_component.rb +8 -1
  117. data/lib/tao_form/components/switch_component.rb +6 -0
  118. data/lib/tao_form/components/time_picker_component.rb +5 -1
  119. data/lib/tao_form/inputs.rb +1 -0
  120. data/lib/tao_form/inputs/date_range_input.rb +28 -0
  121. data/lib/tao_form/inputs/date_time_input.rb +1 -1
  122. data/lib/tao_form/inputs/string_input.rb +46 -6
  123. data/lib/tao_form/version.rb +1 -1
  124. data/lib/views/components/tao_form/components/_date_range_picker.html.erb +7 -0
  125. data/lib/views/components/tao_form/components/_moment_picker.html+mobile.erb +3 -3
  126. data/lib/views/components/tao_form/components/_select.html+mobile.erb +8 -7
  127. data/lib/views/components/tao_form/components/_switch.html.erb +1 -1
  128. data/lib/views/components/tao_form/components/select/_result.html.erb +1 -1
  129. metadata +31 -11
  130. data/config/locales/tao_form/components/datetime/en.yml +0 -5
  131. data/config/locales/tao_form/components/datetime/zh-CN.yml +0 -5
  132. data/lib/views/components/tao_form/components/_select.html.erb +0 -4
@@ -1,42 +1,51 @@
1
-
2
1
  class Tao.Form.MomentPicker.ElementBase extends TaoComponent
3
2
 
4
3
  @attribute 'valueFormat', 'displayFormat'
5
4
 
6
5
  @attribute 'active', 'disabled', type: 'boolean', observe: true
7
6
 
8
- _connected: ->
9
- @result = @findComponent 'tao-moment-picker-result', =>
10
- @field = @result.field
11
- @result.format = @displayFormat
12
- @setMoment @field.val()
13
- @trigger 'tao:ready'
14
- @segmentList = @findComponent 'tao-moment-picker-segment-list'
7
+ @get 'value', ->
8
+ @field?.val()
15
9
 
10
+ @set 'value', (val) ->
11
+ @setMoment val
12
+
13
+ _connected: ->
14
+ [@result, @segmentList] = @findComponent(
15
+ '.tao-moment-picker-result',
16
+ '.tao-moment-picker-segment-list',
17
+ @_childComponentsReady.bind(@)
18
+ )
16
19
  @_bind()
17
20
 
18
21
  _disconnected: ->
19
22
  @off()
20
23
 
21
24
  _bind: ->
22
- @on 'tao:activeClick', 'tao-moment-picker-result', (e) =>
25
+ @on 'tao:activeClick', '.tao-moment-picker-result', (e) =>
23
26
  return if @disabled
24
27
  @_toggleActive()
25
28
  null
26
29
 
27
- @on 'tao:clear', 'tao-moment-picker-result', (e) =>
30
+ @on 'tao:clear', '.tao-moment-picker-result', (e) =>
28
31
  return if @disabled
29
32
  @active = false
30
33
  @setMoment null
31
- @trigger 'tao:change', [@moment]
34
+ @namespacedTrigger 'change', [@moment]
32
35
  null
33
36
 
34
- @on 'tao:select', 'tao-moment-picker-segment-list', (e, m) =>
37
+ @on 'tao:select', '.tao-moment-picker-segment-list', (e, m) =>
35
38
  @active = false
36
39
  @setMoment m
37
- @trigger 'tao:change', [@moment]
40
+ @namespacedTrigger 'change', [@moment]
38
41
  null
39
42
 
43
+ _childComponentsReady: ->
44
+ @field = @result.field
45
+ @result.format = @displayFormat
46
+ @setMoment @field.val()
47
+ @namespacedTrigger 'ready'
48
+
40
49
  _toggleActive: ->
41
50
  @active = !@active
42
51
 
@@ -51,3 +60,11 @@ class Tao.Form.MomentPicker.ElementBase extends TaoComponent
51
60
  @field.val ''
52
61
  @moment = null
53
62
  @moment
63
+
64
+ disableBefore: (m) ->
65
+ @segmentList.segments.forEach (segment) ->
66
+ segment.disableBefore = m
67
+
68
+ disableAfter: (m) ->
69
+ @segmentList.segments.forEach (segment) ->
70
+ segment.disableAfter = m
@@ -18,12 +18,12 @@ class Tao.Form.MomentPicker.ResultBase extends TaoComponent
18
18
 
19
19
  _bind: ->
20
20
  @on 'click', 'input', =>
21
- @trigger 'tao:activeClick'
21
+ @namespacedTrigger 'activeClick'
22
22
  false
23
23
 
24
24
  @on 'click', (e) =>
25
25
  return if @disabled
26
- @trigger 'tao:activeClick'
26
+ @namespacedTrigger 'activeClick'
27
27
 
28
28
  clear: ->
29
29
  @moment = null
@@ -6,7 +6,7 @@ class Tao.Form.MomentPicker.SegmentListBase extends TaoComponent
6
6
  @attribute 'defaultSegment'
7
7
 
8
8
  _connected: ->
9
- @segments = @jq.find('.segment').get()
9
+ @segments = @jq.find('.tao-moment-picker-segment').get()
10
10
  @momentData = null
11
11
 
12
12
  @_bind()
@@ -20,11 +20,11 @@ class Tao.Form.MomentPicker.SegmentListBase extends TaoComponent
20
20
  @_setActiveSegment segment
21
21
  null
22
22
 
23
- @on 'tao:dataSelect', '.segment', (e, momentData) =>
23
+ @on 'tao:dataSelect', '.tao-moment-picker-segment', (e, momentData) =>
24
24
  @_setMomentData momentData
25
25
  @_activateNextSegment()
26
26
 
27
- @on 'tao:dataRefresh', '.segment', (e, momentData) =>
27
+ @on 'tao:dataRefresh', '.tao-moment-picker-segment', (e, momentData) =>
28
28
  @_setMomentData momentData
29
29
 
30
30
  setMoment: (m) ->
@@ -80,9 +80,9 @@ class Tao.Form.MomentPicker.SegmentListBase extends TaoComponent
80
80
  if segment
81
81
  @_setActiveSegment segment
82
82
  else if @activeSegment
83
- if ($segment = @activeSegment.jq.next('.segment')).length > 0
83
+ if ($segment = @activeSegment.jq.next('.tao-moment-picker-segment')).length > 0
84
84
  @_setActiveSegment $segment.get(0)
85
85
  else
86
- @trigger 'tao:select', [moment @momentData]
86
+ @namespacedTrigger 'select', [moment @momentData]
87
87
  else
88
88
  @_setActiveSegment @segments[0]
@@ -5,6 +5,8 @@ class Tao.Form.MomentPicker.SegmentBase extends TaoComponent
5
5
 
6
6
  @attribute 'active', type: 'boolean'
7
7
 
8
+ @attribute 'disableBefore', 'disableAfter', type: 'moment', observe: true
9
+
8
10
  segmentName: ''
9
11
 
10
12
  _connected: ->
@@ -21,12 +21,13 @@ class MomentPicker.DateSegment extends MomentPicker.SegmentBase
21
21
  _bind: ->
22
22
  @on 'click', '.day', (e) =>
23
23
  $day = $ e.currentTarget
24
+ return if $day.hasClass('disabled')
24
25
  date = moment $day.data('date'), @dateFormat
25
26
  momentData = _.clone @momentData
26
27
  momentData.year = date.year()
27
28
  momentData.month = date.month()
28
29
  momentData.date = date.date()
29
- @trigger 'tao:dataSelect', [momentData]
30
+ @namespacedTrigger 'dataSelect', [momentData]
30
31
 
31
32
  @on 'click', '.link-prev-month, .link-next-month', (e) =>
32
33
  month = if $(e.currentTarget).is('.link-prev-month')
@@ -38,7 +39,7 @@ class MomentPicker.DateSegment extends MomentPicker.SegmentBase
38
39
  momentData.year = month.year()
39
40
  momentData.month = month.month()
40
41
  momentData.date = null
41
- @trigger 'tao:dataRefresh', [momentData]
42
+ @namespacedTrigger 'dataRefresh', [momentData]
42
43
 
43
44
  setMomentData: (momentData) ->
44
45
  if @active && (_.isNil(momentData['year']) || _.isNil(momentData['month']))
@@ -46,7 +47,7 @@ class MomentPicker.DateSegment extends MomentPicker.SegmentBase
46
47
  momentData.year = now.year()
47
48
  momentData.month = now.month()
48
49
  momentData.date = null
49
- @trigger 'tao:dataRefresh', [momentData]
50
+ @namespacedTrigger 'dataRefresh', [momentData]
50
51
  return false
51
52
  else if @momentData && momentData &&
52
53
  momentData['year'] == @momentData['year'] &&
@@ -82,6 +83,9 @@ class MomentPicker.DateSegment extends MomentPicker.SegmentBase
82
83
  if startDate.date() == momentData['date'] &&
83
84
  startDate.month() == momentData['month']
84
85
  $day.addClass('selected')
86
+ if (@disableBefore && startDate.isSameOrBefore(@disableBefore)) ||
87
+ (@disableAfter && startDate.isSameOrAfter(@disableAfter))
88
+ $day.addClass('disabled')
85
89
 
86
90
  weekdays = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']
87
91
  $day.addClass weekdays[startDate.day()]
@@ -94,5 +98,10 @@ class MomentPicker.DateSegment extends MomentPicker.SegmentBase
94
98
  $('<span>', class: 'weekday', text: weekdayName)
95
99
  .appendTo $head
96
100
 
101
+ _disableBeforeChanged: ->
102
+ @_renderCalendar()
103
+
104
+ _disableAfterChanged: ->
105
+ @_renderCalendar()
97
106
 
98
107
  TaoComponent.register MomentPicker.DateSegment
@@ -13,7 +13,7 @@ class MomentPicker.HourSegment extends MomentPicker.SegmentBase
13
13
  $hour = $ e.currentTarget
14
14
  momentData = _.clone @momentData
15
15
  momentData.hour = $hour.data 'hour'
16
- @trigger 'tao:dataSelect', [momentData]
16
+ @namespacedTrigger 'dataSelect', [momentData]
17
17
 
18
18
  setMomentData: (momentData) ->
19
19
  super
@@ -13,7 +13,7 @@ class MomentPicker.MinuteSegment extends MomentPicker.SegmentBase
13
13
  $minute = $ e.currentTarget
14
14
  momentData = _.clone @momentData
15
15
  momentData.minute = $minute.data 'minute'
16
- @trigger 'tao:dataSelect', [momentData]
16
+ @namespacedTrigger 'dataSelect', [momentData]
17
17
 
18
18
  setMomentData: (momentData) ->
19
19
  super
@@ -14,7 +14,7 @@ class MomentPicker.MonthSegment extends MomentPicker.SegmentBase
14
14
  momentData = _.clone @momentData
15
15
  momentData.month = $month.data 'month'
16
16
  momentData.date = null
17
- @trigger 'tao:dataSelect', [momentData]
17
+ @namespacedTrigger 'dataSelect', [momentData]
18
18
 
19
19
  @on 'click', '.link-prev-year, .link-next-year', (e) =>
20
20
  momentData = _.clone @momentData
@@ -23,7 +23,7 @@ class MomentPicker.MonthSegment extends MomentPicker.SegmentBase
23
23
  else
24
24
  momentData['year'] += 1
25
25
  momentData.date = null
26
- @trigger 'tao:dataRefresh', [momentData]
26
+ @namespacedTrigger 'dataRefresh', [momentData]
27
27
 
28
28
  setMomentData: (momentData) ->
29
29
  super
@@ -15,7 +15,7 @@ class MomentPicker.YearSegment extends MomentPicker.SegmentBase
15
15
  momentData.year = $year.data 'year'
16
16
  momentData.month = null
17
17
  momentData.date = null
18
- @trigger 'tao:dataSelect', [momentData]
18
+ @namespacedTrigger 'dataSelect', [momentData]
19
19
 
20
20
  @on 'click', '.link-prev-years, .link-next-years', (e) =>
21
21
  momentData = _.clone @momentData
@@ -25,14 +25,14 @@ class MomentPicker.YearSegment extends MomentPicker.SegmentBase
25
25
  momentData['year'] += 9
26
26
  momentData.month = null
27
27
  momentData.date = null
28
- @trigger 'tao:dataRefresh', [momentData]
28
+ @namespacedTrigger 'dataRefresh', [momentData]
29
29
 
30
30
  setMomentData: (momentData) ->
31
31
  super
32
32
 
33
33
  if _.isNil @value()
34
34
  momentData.year = moment().year()
35
- @trigger 'tao:dataRefresh', [momentData]
35
+ @namespacedTrigger 'dataRefresh', [momentData]
36
36
  return false
37
37
 
38
38
  @_render()
@@ -9,10 +9,14 @@ class Tao.Form.RadioBase extends TaoComponent
9
9
  @_bind()
10
10
 
11
11
  _bind: ->
12
+ @on 'change', 'input[type=radio]', (e) =>
13
+ @namespacedTrigger 'change'
14
+ null
15
+
12
16
  @on 'click', '.radio-wrapper', (e) =>
13
17
  if @field.is(':enabled')
14
18
  @_toggleChecked()
15
- @trigger 'tao:change'
19
+ @namespacedTrigger 'change'
16
20
  false
17
21
 
18
22
  _disconnected: ->
@@ -19,21 +19,19 @@ class Tao.Form.Select.ElementBase extends TaoComponent
19
19
 
20
20
  _connected: ->
21
21
  @field = @jq.find 'select'
22
- @selectedOption = if @multiple then [] else null
22
+ @selectedOption ||= if @multiple then [] else null
23
23
 
24
24
  @dataProvider = new DataProvider
25
25
  remote: @remote
26
26
  field: @field
27
27
 
28
- @result = @findComponent '.select-result', =>
29
- @_resultReady()
30
-
31
- @list = @findComponent '.select-list', =>
32
- @_listReady()
28
+ [@result, @list] = @findComponent '.select-result', '.select-list', =>
29
+ @_childComponentsReady()
30
+ @namespacedTrigger 'ready'
33
31
 
34
32
  @_bind()
35
33
 
36
- _resultReady: ->
34
+ _childComponentsReady: ->
37
35
  if @multiple
38
36
  values = @field.val()
39
37
  if values && _.isArray(values)
@@ -41,9 +39,7 @@ class Tao.Form.Select.ElementBase extends TaoComponent
41
39
  else
42
40
  @selectOption @field.val()
43
41
 
44
- _listReady: ->
45
- options = @dataProvider.unselectedOptions()
46
- @list.setOptions options, @remote?.totalOptionSize
42
+ @list.setOptions @dataProvider.options, @remote?.totalOptionSize
47
43
  @list.searchable = if @remote
48
44
  @dataProvider.options.length < @remote.totalOptionSize
49
45
  else
@@ -60,24 +56,22 @@ class Tao.Form.Select.ElementBase extends TaoComponent
60
56
 
61
57
  if @multiple
62
58
  @on 'tao:unselect', '.select-result', (e, option) =>
63
- _.remove @selectedOption, (opt) -> opt.value == option.value
64
- @selected = false if @selectedOption.length == 0
59
+ @unselectOption option
65
60
  @_filterList ''
66
- @trigger 'tao:change', @selectedOption
61
+ @namespacedTrigger 'change', @selectedOption
67
62
  null
68
63
  else
69
64
  @on 'tao:clear', '.select-result', (e) =>
70
65
  @active = false
71
- @selectedOption = null
72
- @selected = false
66
+ @clearSelected()
73
67
  @_filterList ''
74
- @trigger 'tao:change', @selectedOption
68
+ @namespacedTrigger 'change', @selectedOption
75
69
  null
76
70
 
77
71
  _bindListEvents: ->
78
72
  @on 'tao:select', '.select-list', (e, option) =>
79
73
  @selectOption option
80
- @trigger 'tao:change', @selectedOption
74
+ @namespacedTrigger 'change', @selectedOption
81
75
  null
82
76
 
83
77
  @on 'tao:search', '.select-list', (e, value) =>
@@ -94,13 +88,14 @@ class Tao.Form.Select.ElementBase extends TaoComponent
94
88
  @list.loading = true
95
89
  @dataProvider.filter value, (options, totalSize) =>
96
90
  @list.loading = false
97
- options = @dataProvider.unselectedOptions options
98
91
  @list.setOptions options, totalSize
99
92
 
100
93
  selectOption: (option) ->
101
94
  option = @dataProvider.getOption option
102
95
  return false unless option && option != @selectedOption
103
96
  @result.selectOption option
97
+ @list.clearSelected() unless @multiple
98
+ @list.selectOption option
104
99
  if @multiple
105
100
  @selectedOption.push option
106
101
  else
@@ -113,10 +108,19 @@ class Tao.Form.Select.ElementBase extends TaoComponent
113
108
  option = @dataProvider.getOption option
114
109
  return false unless option && (option in @selectedOption)
115
110
  @result.unselectOption option
111
+ @list.unselectOption option
116
112
  _.remove @selectedOption, (opt) -> opt.value == option.value
117
113
  @selected = false if @selectedOption.length == 0
118
114
  else
119
- @result.unselectOption()
115
+ @clearSelected()
116
+ true
117
+
118
+ clearSelected: ->
119
+ @result.clearSelected()
120
+ @list.clearSelected()
121
+ @selected = false
122
+ if @multiple
123
+ @selectedOption.length = 0
124
+ else
120
125
  @selectedOption = null
121
- @selected = false
122
126
  true
@@ -14,6 +14,7 @@ class Tao.Form.Select.ListBase extends TaoComponent
14
14
 
15
15
  _connected: ->
16
16
  @searchField = @jq.find('.search-field')
17
+ @selectedOption ||= []
17
18
  @_bind()
18
19
 
19
20
  _disconnected: ->
@@ -23,13 +24,15 @@ class Tao.Form.Select.ListBase extends TaoComponent
23
24
  @on 'input', '.search-field', _.debounce (e) =>
24
25
  val = @searchField.val()
25
26
  @searching = !!val
26
- @trigger 'tao:search', [val]
27
+ @namespacedTrigger 'search', [val]
27
28
  , 200
28
29
 
29
30
  @on 'click', '.option', (e) =>
30
31
  $option = $ e.currentTarget
32
+ return if $option.hasClass('selected')
33
+ $option.addClass 'selected'
31
34
  option = $option.data('option')
32
- @trigger('tao:select', [option]) if option
35
+ @namespacedTrigger('select', [option]) if option
33
36
  null
34
37
 
35
38
  _hiddenSizeChanged: ->
@@ -71,9 +74,24 @@ class Tao.Form.Select.ListBase extends TaoComponent
71
74
  $option.find('.name').text(option.data.label || option.text)
72
75
  $option.find('.hint').text(option.data.hint) if option.data.hint
73
76
  $option.attr 'data-value', option.value
77
+ if _.findIndex(@selectedOption, (opt) -> opt.value == option.value) > -1
78
+ $option.addClass('selected')
74
79
  $option
75
80
 
76
81
  reset: ->
77
82
  @searchField.val ''
78
83
  @searching = false
79
- @trigger 'tao:search', ['']
84
+ @namespacedTrigger 'search', ['']
85
+
86
+ selectOption: (option) ->
87
+ return false unless option && !(option in @selectedOption)
88
+ @selectedOption.push option
89
+ true
90
+
91
+ unselectOption: (option) ->
92
+ return false unless option && option in @selectedOption
93
+ _.remove @selectedOption, (opt) -> opt.value == option.value
94
+ true
95
+
96
+ clearSelected: ->
97
+ @selectedOption.length = 0
@@ -68,11 +68,3 @@ class Tao.Form.Select.DataProvider extends TaoModule
68
68
  []
69
69
 
70
70
  callback? options, result.totalSize
71
-
72
- unselectedOptions: (options = @options) ->
73
- options.filter (option) =>
74
- value = @field.val()
75
- if _.isArray(value)
76
- !(option.value in value)
77
- else
78
- option.value != value
@@ -9,7 +9,7 @@ class Tao.Form.Select.MultipleResultBase extends TaoComponent
9
9
 
10
10
  _connected: ->
11
11
  @field = @jq.find 'select'
12
- @selectedOption = []
12
+ @selectedOption ||= []
13
13
  @_bind()
14
14
 
15
15
  _disconnected: ->
@@ -17,7 +17,7 @@ class Tao.Form.Select.MultipleResultBase extends TaoComponent
17
17
 
18
18
  _bind: ->
19
19
  @on 'click', 'select', =>
20
- @trigger 'tao:activeClick'
20
+ @namespacedTrigger 'activeClick'
21
21
  false
22
22
 
23
23
  @on 'click', '.selected-item', (e) =>
@@ -25,18 +25,14 @@ class Tao.Form.Select.MultipleResultBase extends TaoComponent
25
25
  $option = $ e.currentTarget
26
26
  option = $option.data 'option'
27
27
  @unselectOption option
28
- @trigger 'tao:unselect', [option]
28
+ @namespacedTrigger 'unselect', [option]
29
29
  false
30
30
 
31
31
  selectOption: (option) ->
32
32
  return false unless option && !(option in @selectedOption)
33
33
 
34
34
  unless @jq.find(".selected-item[data-value='#{option.value}']").length > 0
35
- $item = @_generateItem(option)
36
- if @selectedOption.length > 0
37
- @jq.find('.selected-item:last').after $item
38
- else
39
- @jq.prepend $item
35
+ @_insertItem @_generateItem(option)
40
36
 
41
37
  @selectedOption.push option
42
38
  @_setSelectedOption option
@@ -51,6 +47,13 @@ class Tao.Form.Select.MultipleResultBase extends TaoComponent
51
47
  @selected = false if @selectedOption.length == 0
52
48
  true
53
49
 
50
+ clearSelected: ->
51
+ @jq.find('.selected-item').remove()
52
+ @selectedOption.length = 0
53
+ @field.find('option').prop 'selected', false
54
+ @selected = false
55
+ true
56
+
54
57
  _setSelectedOption: (option) ->
55
58
  return unless option
56
59
  $option = @field.find("option[value='#{option.value}']")
@@ -79,3 +82,9 @@ class Tao.Form.Select.MultipleResultBase extends TaoComponent
79
82
  .data 'option', option
80
83
  .find('.name').text option.text
81
84
  $item
85
+
86
+ _insertItem: ($item) ->
87
+ if @selectedOption.length > 0
88
+ @jq.find('.selected-item:last').after $item
89
+ else
90
+ @jq.prepend $item