tao_form 0.2.3 → 1.0.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tao_form/components/select/multiple_result_component.rb +4 -6
  3. data/lib/tao_form/components/select/result_component.rb +4 -6
  4. data/lib/tao_form/components/select_component.rb +3 -7
  5. data/lib/tao_form/inputs/collection_select_input.rb +3 -1
  6. data/lib/tao_form/version.rb +1 -1
  7. data/lib/views/components/tao_form/components/select/_list.html.erb +1 -16
  8. data/lib/views/components/tao_form/components/select/_list_content.html.erb +16 -0
  9. data/lib/views/components/tao_form/components/select/_multiple_result.html.erb +1 -1
  10. metadata +12 -201
  11. data/lib/assets/icons/arrow_down.svg +0 -3
  12. data/lib/assets/icons/arrow_left.svg +0 -3
  13. data/lib/assets/icons/arrow_right.svg +0 -3
  14. data/lib/assets/icons/calendar.svg +0 -3
  15. data/lib/assets/icons/check.svg +0 -3
  16. data/lib/assets/icons/clock.svg +0 -3
  17. data/lib/assets/icons/search.svg +0 -3
  18. data/lib/assets/icons/success.svg +0 -3
  19. data/lib/assets/javascripts/tao/form/element.coffee +0 -16
  20. data/lib/assets/javascripts/tao/form/fields/checkbox.coffee +0 -15
  21. data/lib/assets/javascripts/tao/form/fields/index.coffee +0 -10
  22. data/lib/assets/javascripts/tao/form/fields/moment_picker/element.coffee +0 -38
  23. data/lib/assets/javascripts/tao/form/fields/moment_picker/index.coffee +0 -7
  24. data/lib/assets/javascripts/tao/form/fields/moment_picker/result.coffee +0 -25
  25. data/lib/assets/javascripts/tao/form/fields/moment_picker/segment_list.coffee +0 -14
  26. data/lib/assets/javascripts/tao/form/fields/radio.coffee +0 -14
  27. data/lib/assets/javascripts/tao/form/fields/select/element.coffee +0 -79
  28. data/lib/assets/javascripts/tao/form/fields/select/index.coffee +0 -8
  29. data/lib/assets/javascripts/tao/form/fields/select/list.coffee +0 -103
  30. data/lib/assets/javascripts/tao/form/fields/select/multiple_result.coffee +0 -41
  31. data/lib/assets/javascripts/tao/form/fields/select/result.coffee +0 -39
  32. data/lib/assets/javascripts/tao/form/fields/switch.coffee +0 -14
  33. data/lib/assets/javascripts/tao/form/index.coffee +0 -11
  34. data/lib/assets/javascripts/tao/form/mobile/element.coffee +0 -5
  35. data/lib/assets/javascripts/tao/form/mobile/fields/checkbox.coffee +0 -5
  36. data/lib/assets/javascripts/tao/form/mobile/fields/index.coffee +0 -10
  37. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/element.coffee +0 -40
  38. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/index.coffee +0 -7
  39. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/result.coffee +0 -5
  40. data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/segment_list.coffee +0 -24
  41. data/lib/assets/javascripts/tao/form/mobile/fields/radio.coffee +0 -5
  42. data/lib/assets/javascripts/tao/form/mobile/fields/select/element.coffee +0 -74
  43. data/lib/assets/javascripts/tao/form/mobile/fields/select/index.coffee +0 -8
  44. data/lib/assets/javascripts/tao/form/mobile/fields/select/list.coffee +0 -5
  45. data/lib/assets/javascripts/tao/form/mobile/fields/select/multiple_result.coffee +0 -5
  46. data/lib/assets/javascripts/tao/form/mobile/fields/select/result.coffee +0 -5
  47. data/lib/assets/javascripts/tao/form/mobile/fields/switch.coffee +0 -5
  48. data/lib/assets/javascripts/tao/form/mobile/index.coffee +0 -11
  49. data/lib/assets/javascripts/tao/form/shared/element/base.coffee +0 -53
  50. data/lib/assets/javascripts/tao/form/shared/fields/checkbox.coffee +0 -31
  51. data/lib/assets/javascripts/tao/form/shared/fields/date_picker.coffee +0 -10
  52. data/lib/assets/javascripts/tao/form/shared/fields/date_range_picker.coffee +0 -75
  53. data/lib/assets/javascripts/tao/form/shared/fields/datetime_picker.coffee +0 -78
  54. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/element/base.coffee +0 -70
  55. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/result/base.coffee +0 -39
  56. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segment_list/base.coffee +0 -88
  57. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/base.coffee +0 -30
  58. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/date_segment.coffee +0 -107
  59. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/hour_segment.coffee +0 -28
  60. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/index.coffee +0 -1
  61. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/minute_segment.coffee +0 -28
  62. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/month_segment.coffee +0 -46
  63. data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/year_segment.coffee +0 -57
  64. data/lib/assets/javascripts/tao/form/shared/fields/month_picker.coffee +0 -10
  65. data/lib/assets/javascripts/tao/form/shared/fields/radio.coffee +0 -23
  66. data/lib/assets/javascripts/tao/form/shared/fields/select/element/base.coffee +0 -132
  67. data/lib/assets/javascripts/tao/form/shared/fields/select/list/base.coffee +0 -97
  68. data/lib/assets/javascripts/tao/form/shared/fields/select/models/data_provider.coffee +0 -76
  69. data/lib/assets/javascripts/tao/form/shared/fields/select/models/index.coffee +0 -2
  70. data/lib/assets/javascripts/tao/form/shared/fields/select/models/option.coffee +0 -37
  71. data/lib/assets/javascripts/tao/form/shared/fields/select/multiple_result/base.coffee +0 -90
  72. data/lib/assets/javascripts/tao/form/shared/fields/select/result/base.coffee +0 -57
  73. data/lib/assets/javascripts/tao/form/shared/fields/switch.coffee +0 -23
  74. data/lib/assets/javascripts/tao/form/shared/fields/time_picker.coffee +0 -10
  75. data/lib/assets/javascripts/tao/form/shared/init.coffee +0 -23
  76. data/lib/assets/javascripts/tao/form/shared/mixins/checkable.coffee +0 -11
  77. data/lib/assets/javascripts/tao/ui/icons/form.coffee +0 -11
  78. data/lib/assets/stylesheets/tao/form/_globals.scss +0 -3
  79. data/lib/assets/stylesheets/tao/form/_mixins.scss +0 -28
  80. data/lib/assets/stylesheets/tao/form/_variables.scss +0 -3
  81. data/lib/assets/stylesheets/tao/form/fields/checkbox.scss +0 -36
  82. data/lib/assets/stylesheets/tao/form/fields/date_range_picker.scss +0 -20
  83. data/lib/assets/stylesheets/tao/form/fields/datetime_picker.scss +0 -22
  84. data/lib/assets/stylesheets/tao/form/fields/index.scss +0 -7
  85. data/lib/assets/stylesheets/tao/form/fields/moment_picker/index.scss +0 -10
  86. data/lib/assets/stylesheets/tao/form/fields/moment_picker/result.scss +0 -61
  87. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segment_list.scss +0 -53
  88. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/date_segment.scss +0 -17
  89. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/hour_segment.scss +0 -15
  90. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/minute_segment.scss +0 -17
  91. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/month_segment.scss +0 -15
  92. data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/year_segment.scss +0 -15
  93. data/lib/assets/stylesheets/tao/form/fields/radio.scss +0 -33
  94. data/lib/assets/stylesheets/tao/form/fields/select/index.scss +0 -14
  95. data/lib/assets/stylesheets/tao/form/fields/select/list.scss +0 -55
  96. data/lib/assets/stylesheets/tao/form/fields/select/multiple_result.scss +0 -76
  97. data/lib/assets/stylesheets/tao/form/fields/select/result.scss +0 -101
  98. data/lib/assets/stylesheets/tao/form/fields/switch.scss +0 -14
  99. data/lib/assets/stylesheets/tao/form/index.scss +0 -5
  100. data/lib/assets/stylesheets/tao/form/inputs/boolean.scss +0 -8
  101. data/lib/assets/stylesheets/tao/form/inputs/group.scss +0 -2
  102. data/lib/assets/stylesheets/tao/form/inputs/index.scss +0 -1
  103. data/lib/assets/stylesheets/tao/form/inputs/text.scss +0 -2
  104. data/lib/assets/stylesheets/tao/form/layouts/default.scss +0 -146
  105. data/lib/assets/stylesheets/tao/form/layouts/index.scss +0 -2
  106. data/lib/assets/stylesheets/tao/form/layouts/narrow.scss +0 -35
  107. data/lib/assets/stylesheets/tao/form/mobile/_globals.scss +0 -3
  108. data/lib/assets/stylesheets/tao/form/mobile/_mixins.scss +0 -22
  109. data/lib/assets/stylesheets/tao/form/mobile/_variables.scss +0 -3
  110. data/lib/assets/stylesheets/tao/form/mobile/fields/checkbox.scss +0 -2
  111. data/lib/assets/stylesheets/tao/form/mobile/fields/date_range_picker.scss +0 -18
  112. data/lib/assets/stylesheets/tao/form/mobile/fields/datetime_picker.scss +0 -18
  113. data/lib/assets/stylesheets/tao/form/mobile/fields/index.scss +0 -1
  114. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/index.scss +0 -9
  115. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/result.scss +0 -19
  116. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segment_list.scss +0 -52
  117. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/date_segment.scss +0 -14
  118. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/hour_segment.scss +0 -14
  119. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/minute_segment.scss +0 -14
  120. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/month_segment.scss +0 -14
  121. data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/year_segment.scss +0 -14
  122. data/lib/assets/stylesheets/tao/form/mobile/fields/radio.scss +0 -2
  123. data/lib/assets/stylesheets/tao/form/mobile/fields/select/index.scss +0 -80
  124. data/lib/assets/stylesheets/tao/form/mobile/fields/select/list.scss +0 -10
  125. data/lib/assets/stylesheets/tao/form/mobile/fields/select/multiple_result.scss +0 -12
  126. data/lib/assets/stylesheets/tao/form/mobile/fields/select/result.scss +0 -28
  127. data/lib/assets/stylesheets/tao/form/mobile/fields/switch.scss +0 -2
  128. data/lib/assets/stylesheets/tao/form/mobile/index.scss +0 -5
  129. data/lib/assets/stylesheets/tao/form/mobile/inputs/boolean.scss +0 -7
  130. data/lib/assets/stylesheets/tao/form/mobile/inputs/group.scss +0 -6
  131. data/lib/assets/stylesheets/tao/form/mobile/inputs/index.scss +0 -1
  132. data/lib/assets/stylesheets/tao/form/mobile/inputs/text.scss +0 -18
  133. data/lib/assets/stylesheets/tao/form/mobile/layout.scss +0 -137
  134. data/lib/assets/stylesheets/tao/form/mobile/reset.scss +0 -29
  135. data/lib/assets/stylesheets/tao/form/mobile/variables/_base.scss +0 -12
  136. data/lib/assets/stylesheets/tao/form/mobile/variables/_moment_picker.scss +0 -9
  137. data/lib/assets/stylesheets/tao/form/mobile/variables/_select.scss +0 -9
  138. data/lib/assets/stylesheets/tao/form/reset.scss +0 -31
  139. data/lib/assets/stylesheets/tao/form/shared/fields/_checkbox.scss +0 -61
  140. data/lib/assets/stylesheets/tao/form/shared/fields/_radio.scss +0 -53
  141. data/lib/assets/stylesheets/tao/form/shared/fields/_switch.scss +0 -56
  142. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_result.scss +0 -46
  143. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_segment_list.scss +0 -93
  144. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_date_segment.scss +0 -56
  145. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_hour_segment.scss +0 -35
  146. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_minute_segment.scss +0 -23
  147. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_month_segment.scss +0 -27
  148. data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_year_segment.scss +0 -27
  149. data/lib/assets/stylesheets/tao/form/shared/fields/select/_list.scss +0 -140
  150. data/lib/assets/stylesheets/tao/form/shared/fields/select/_multiple_result.scss +0 -50
  151. data/lib/assets/stylesheets/tao/form/shared/inputs/_boolean.scss +0 -5
  152. data/lib/assets/stylesheets/tao/form/shared/inputs/_group.scss +0 -25
  153. data/lib/assets/stylesheets/tao/form/shared/inputs/_text.scss +0 -35
  154. data/lib/assets/stylesheets/tao/form/variables/_base.scss +0 -15
  155. data/lib/assets/stylesheets/tao/form/variables/_moment_picker.scss +0 -9
  156. data/lib/assets/stylesheets/tao/form/variables/_select.scss +0 -10
  157. data/vendor/assets/javascripts/moment.js +0 -4463
  158. data/vendor/assets/javascripts/moment/zh-cn.js +0 -112
@@ -1,57 +0,0 @@
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
- @namespacedTrigger '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
- @namespacedTrigger 'dataRefresh', [momentData]
29
-
30
- setMomentData: (momentData) ->
31
- super
32
-
33
- if _.isNil @value()
34
- momentData.year = moment().year()
35
- @namespacedTrigger '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
@@ -1,10 +0,0 @@
1
-
2
- class Tao.Form.MonthPicker extends Tao.Form.MomentPicker.Element
3
-
4
- @tag 'tao-month-picker'
5
-
6
- @attribute 'valueFormat', default: 'YYYY-MM'
7
-
8
- @attribute 'displayFormat', default: 'YYYY-MM'
9
-
10
- TaoComponent.register Tao.Form.MonthPicker
@@ -1,23 +0,0 @@
1
- class Tao.Form.RadioBase extends TaoComponent
2
-
3
- @include Tao.Form.Mixins.Checkable
4
-
5
- @tag 'tao-radio-button'
6
-
7
- _connected: ->
8
- @field = @jq.find('input:radio')
9
- @_bind()
10
-
11
- _bind: ->
12
- @on 'change', 'input[type=radio]', (e) =>
13
- @namespacedTrigger 'change'
14
- null
15
-
16
- @on 'click', '.radio-wrapper', (e) =>
17
- if @field.is(':enabled')
18
- @_toggleChecked()
19
- @namespacedTrigger 'change'
20
- false
21
-
22
- _disconnected: ->
23
- @off()
@@ -1,132 +0,0 @@
1
- #= require tao/form/shared/fields/select/models/data_provider
2
-
3
- DataProvider = Tao.Form.Select.DataProvider
4
-
5
- class Tao.Form.Select.ElementBase extends TaoComponent
6
-
7
- @tag 'tao-select'
8
-
9
- @attribute 'multiple', type: 'boolean'
10
-
11
- @attribute 'active', 'selected', type: 'boolean', observe: true
12
-
13
- @attribute 'remote', type: 'hash'
14
-
15
- @attribute 'searchableSize', type: 'number', default: 8
16
-
17
- @get 'value', ->
18
- @field.val()
19
-
20
- _connected: ->
21
- @field = @jq.find 'select'
22
- @selectedOption ||= if @multiple then [] else null
23
-
24
- @dataProvider = new DataProvider
25
- remote: @remote
26
- field: @field
27
-
28
- [@result, @list] = @findComponent '.select-result', '.select-list', =>
29
- @_childComponentsReady()
30
- @namespacedTrigger 'ready'
31
-
32
- @_bind()
33
-
34
- _childComponentsReady: ->
35
- if @multiple
36
- values = @field.val()
37
- if values && _.isArray(values)
38
- @selectOption(value) for value in values
39
- else
40
- @selectOption @field.val()
41
-
42
- @list.setOptions @dataProvider.options, @remote?.totalOptionSize
43
- @list.searchable = if @remote
44
- @dataProvider.options.length < @remote.totalOptionSize
45
- else
46
- @dataProvider.options.length > @searchableSize
47
-
48
- _bind: ->
49
- @_bindResultEvents()
50
- @_bindListEvents()
51
-
52
- _bindResultEvents: ->
53
- @on 'tao:activeClick', '.select-result', (e) =>
54
- @_toggleActive()
55
- null
56
-
57
- if @multiple
58
- @on 'tao:unselect', '.select-result', (e, option) =>
59
- @unselectOption option
60
- @_filterList ''
61
- @namespacedTrigger 'change', @selectedOption
62
- null
63
- else
64
- @on 'tao:clear', '.select-result', (e) =>
65
- @active = false
66
- @clearSelected()
67
- @_filterList ''
68
- @namespacedTrigger 'change', @selectedOption
69
- null
70
-
71
- _bindListEvents: ->
72
- @on 'tao:select', '.select-list', (e, option) =>
73
- @selectOption option
74
- @namespacedTrigger 'change', @selectedOption
75
- null
76
-
77
- @on 'tao:search', '.select-list', (e, value) =>
78
- @_filterList value
79
-
80
- _disconnected: ->
81
- @off()
82
- @dataProvider = null
83
-
84
- _toggleActive: ->
85
- @active = !@active
86
-
87
- _filterList: (value) ->
88
- @list.loading = true
89
- @dataProvider.filter value, (options, totalSize) =>
90
- @list.loading = false
91
- @list.setOptions options, totalSize
92
-
93
- selectOption: (option) ->
94
- option = @dataProvider.getOption option
95
- return false unless option && option != @selectedOption
96
- @result.selectOption option
97
- @list.clearSelected() unless @multiple
98
- @list.selectOption option
99
- if @multiple
100
- @selectedOption.push option
101
- else
102
- @selectedOption = option
103
- @selected = true
104
- true
105
-
106
- unselectOption: (option) ->
107
- if @multiple
108
- option = @dataProvider.getOption option
109
- return false unless option && (option in @selectedOption)
110
- @result.unselectOption option
111
- @list.unselectOption option
112
- _.remove @selectedOption, (opt) -> opt.value == option.value
113
- @selected = false if @selectedOption.length == 0
114
- else
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
125
- @selectedOption = null
126
- true
127
-
128
- refreshOptions: ->
129
- @active = false
130
- @dataProvider.reset()
131
- @_filterList ''
132
- @
@@ -1,97 +0,0 @@
1
- #= require tao/form/shared/fields/select/models/option
2
-
3
- Option = Tao.Form.Select.Option
4
-
5
- class Tao.Form.Select.ListBase extends TaoComponent
6
-
7
- @tag 'tao-select-list'
8
-
9
- @attribute 'empty', 'loading', 'searching', 'searchable', type: 'boolean'
10
-
11
- @attribute 'hiddenSize', type: 'number', observe: true
12
-
13
- @attribute 'maxListSize', type: 'number', default: 20
14
-
15
- _connected: ->
16
- @searchField = @jq.find('.search-field')
17
- @selectedOption ||= []
18
- @_bind()
19
-
20
- _disconnected: ->
21
- @off()
22
-
23
- _bind: ->
24
- @on 'input', '.search-field', _.debounce (e) =>
25
- val = @searchField.val()
26
- @searching = !!val
27
- @namespacedTrigger 'search', [val]
28
- , 200
29
-
30
- @on 'click', '.option', (e) =>
31
- $option = $ e.currentTarget
32
- return if $option.hasClass('selected')
33
- $option.addClass 'selected'
34
- option = $option.data('option')
35
- @namespacedTrigger('select', [option]) if option
36
- null
37
-
38
- _hiddenSizeChanged: ->
39
- @jq.find('.tips .size').text(@hiddenSize)
40
-
41
- _refreshScrollPosition: ->
42
- @reflow()
43
- @jq.find('.list-wrapper').scrollTop 0
44
-
45
- setOptions: (options, totalSize) ->
46
- @options = options.slice 0, @maxListSize
47
- @hiddenSize = (totalSize || @options.length) - @options.length
48
- $list = @jq.find('.options-list').empty()
49
-
50
- if @options.length > 0
51
- @empty = false
52
-
53
- @_lastRenderGroup = null
54
- for option in @options
55
- if option.data.group && @_lastRenderGroup != option.data.group
56
- @_lastRenderGroup = option.data.group
57
- $list.append @_renderGroup(option.data.group)
58
- $list.append @_renderOption(option)
59
-
60
- @_refreshScrollPosition()
61
- else
62
- @empty = true
63
-
64
- _renderGroup: (name) ->
65
- $('<div>', class: 'optgroup').text(name)
66
-
67
- _renderOption: (option) ->
68
- $option = $("""
69
- <div class="option">
70
- <span class="name"></span>
71
- <span class="hint"></span>
72
- </div>
73
- """).data('option', option)
74
- $option.find('.name').text(option.data.label || option.text)
75
- $option.find('.hint').text(option.data.hint) if option.data.hint
76
- $option.attr 'data-value', option.value
77
- if _.findIndex(@selectedOption, (opt) -> opt.value == option.value) > -1
78
- $option.addClass('selected')
79
- $option
80
-
81
- reset: ->
82
- @searchField.val ''
83
- @searching = false
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
@@ -1,76 +0,0 @@
1
-
2
- Option = Tao.Form.Select.Option
3
-
4
- class Tao.Form.Select.DataProvider extends TaoModule
5
-
6
- @option 'remote', default: false
7
-
8
- @option 'field'
9
-
10
- _init: ->
11
- @_initOptions()
12
-
13
- @field.on 'tao:addOption', (e, option) =>
14
- if option.data?.group
15
- index = _.findIndex @options, (opt) ->
16
- opt.data?.group == option.data?.group
17
- @options.splice index, 0, option
18
- else
19
- @options.unshift option
20
-
21
- _initOptions: ->
22
- @options = @field.find('option').map (i, optionEl) ->
23
- Option.fromElement optionEl
24
- .get()
25
-
26
- getOption: (value) ->
27
- return value if value instanceof Option
28
- return null if _.isNull(value) || _.isUndefined(value)
29
-
30
- result = @options.filter (option) -> option.value == value
31
- if result.length > 0 then result[0] else null
32
-
33
- filter: (value, callback) ->
34
- if @remote && @options.length < @remote.totalOptionSize
35
- if value
36
- @_fetch value, callback
37
- else
38
- callback? @options, @remote.totalOptionSize
39
- else
40
- options = @options.filter (option) -> option.match(value)
41
- callback? options
42
-
43
- null
44
-
45
- _fetch: (value, callback) ->
46
- return unless @remote && @remote.url
47
-
48
- $.ajax
49
- url: @remote.url
50
- data: _.extend {}, @remote.params,
51
- "#{@remote.searchKey}": value
52
- dataType: 'json'
53
- .done (result) ->
54
- options = if _.isArray(result.options) && result.options.length > 0 &&\
55
- _.isArray(result.options[0]) && _.isArray(result.options[0][1])
56
- result.options.reduce (opts, group) ->
57
- unless _.isArray(group) && group.length > 1 && _.isArray(group[1])
58
- return
59
- group[1].forEach (opt) ->
60
- opts.push Option.fromJson(opt, group[0])
61
- opts
62
- , []
63
- else if _.isPlainObject(result.options)
64
- _.flatten(
65
- for groupName, opts of result.options
66
- Option.fromJson(opt, groupName) for opt in opts
67
- )
68
- else if _.isArray result.options
69
- (Option.fromJson(option) for option in result.options)
70
- else
71
- []
72
-
73
- callback? options, result.totalSize
74
-
75
- reset: ->
76
- @_initOptions()
@@ -1,2 +0,0 @@
1
- #= require ./option
2
- #= require ./data_provider
@@ -1,37 +0,0 @@
1
-
2
- # instance of this class should be immutable
3
-
4
- class Tao.Form.Select.Option extends TaoModule
5
-
6
- @option 'text', 'value', 'data'
7
-
8
- @fromElement: (element) ->
9
- $element = $ element
10
- return unless (value = $element.val()) && !$element.is(':disabled')
11
-
12
- data = $element.data()
13
- data.group = $element.parent('optgroup').prop('label') if $element.parent('optgroup').length
14
-
15
- new @
16
- text: $element.text()
17
- value: value
18
- data: data
19
-
20
- @fromJson: (json, group) ->
21
- data = if json.length > 2 then json[2] else {}
22
- data.group = group if group
23
-
24
- new @
25
- text: json[0]
26
- value: json[1]
27
- data: data
28
-
29
- _init: ->
30
- if @data
31
- @data[_.camelCase key.replace(/^data-/, '')] = value for key, value of @data
32
- else
33
- @data = {}
34
-
35
- match: (value) ->
36
- filterKey = @data.searchKey || @text
37
- String(filterKey).toLowerCase().indexOf(value.toLowerCase()) > -1
@@ -1,90 +0,0 @@
1
-
2
- class Tao.Form.Select.MultipleResultBase extends TaoComponent
3
-
4
- @tag 'tao-multiple-select-result'
5
-
6
- @attribute 'selected', type: 'boolean'
7
-
8
- @attribute 'disabled', type: 'boolean', observe: true
9
-
10
- _connected: ->
11
- @field = @jq.find 'select'
12
- @selectedOption ||= []
13
- @_bind()
14
-
15
- _disconnected: ->
16
- @off()
17
-
18
- _bind: ->
19
- @on 'click', 'select', =>
20
- @namespacedTrigger 'activeClick'
21
- false
22
-
23
- @on 'click', '.selected-item', (e) =>
24
- return if @disabled
25
- $option = $ e.currentTarget
26
- option = $option.data 'option'
27
- @unselectOption option
28
- @namespacedTrigger 'unselect', [option]
29
- false
30
-
31
- selectOption: (option) ->
32
- return false unless option && !(option in @selectedOption)
33
-
34
- unless @jq.find(".selected-item[data-value='#{option.value}']").length > 0
35
- @_insertItem @_generateItem(option)
36
-
37
- @selectedOption.push option
38
- @_setSelectedOption option
39
- @selected = true
40
- true
41
-
42
- unselectOption: (option) ->
43
- return false unless option && option in @selectedOption
44
- @jq.find(".selected-item[data-value='#{option.value}']").remove()
45
- _.remove @selectedOption, (opt) -> opt.value == option.value
46
- @_setUnselectedOption option
47
- @selected = false if @selectedOption.length == 0
48
- true
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
-
57
- _setSelectedOption: (option) ->
58
- return unless option
59
- $option = @field.find("option[value='#{option.value}']")
60
- $option = @_generateOption(option) unless $option.length > 0
61
- $option.prop 'selected', true
62
-
63
- _setUnselectedOption: (option) ->
64
- return unless option
65
- $option = @field.find("option[value='#{option.value}']")
66
- $option.prop 'selected', false
67
-
68
- _generateOption: (option) ->
69
- $option = $('<option>', text: option.text, value: option.value).appendTo(@field)
70
- @field.trigger 'tao:addOption', option, $option
71
- $option
72
-
73
- _generateItem: (option) ->
74
- $item = $("""
75
- <a href="javascript:;" class="selected-item" tabindex="-1">
76
- <span class="name"></span>
77
- </a>
78
- """)
79
-
80
- $item.append Tao.iconTag('close')
81
- $item.attr 'data-value', option.value
82
- .data 'option', option
83
- .find('.name').text option.text
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