tao_form 0.2.3 → 1.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
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