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.
- checksums.yaml +4 -4
- data/lib/tao_form/components/select/multiple_result_component.rb +4 -6
- data/lib/tao_form/components/select/result_component.rb +4 -6
- data/lib/tao_form/components/select_component.rb +3 -7
- data/lib/tao_form/inputs/collection_select_input.rb +3 -1
- data/lib/tao_form/version.rb +1 -1
- data/lib/views/components/tao_form/components/select/_list.html.erb +1 -16
- data/lib/views/components/tao_form/components/select/_list_content.html.erb +16 -0
- data/lib/views/components/tao_form/components/select/_multiple_result.html.erb +1 -1
- metadata +12 -201
- data/lib/assets/icons/arrow_down.svg +0 -3
- data/lib/assets/icons/arrow_left.svg +0 -3
- data/lib/assets/icons/arrow_right.svg +0 -3
- data/lib/assets/icons/calendar.svg +0 -3
- data/lib/assets/icons/check.svg +0 -3
- data/lib/assets/icons/clock.svg +0 -3
- data/lib/assets/icons/search.svg +0 -3
- data/lib/assets/icons/success.svg +0 -3
- data/lib/assets/javascripts/tao/form/element.coffee +0 -16
- data/lib/assets/javascripts/tao/form/fields/checkbox.coffee +0 -15
- data/lib/assets/javascripts/tao/form/fields/index.coffee +0 -10
- data/lib/assets/javascripts/tao/form/fields/moment_picker/element.coffee +0 -38
- data/lib/assets/javascripts/tao/form/fields/moment_picker/index.coffee +0 -7
- data/lib/assets/javascripts/tao/form/fields/moment_picker/result.coffee +0 -25
- data/lib/assets/javascripts/tao/form/fields/moment_picker/segment_list.coffee +0 -14
- data/lib/assets/javascripts/tao/form/fields/radio.coffee +0 -14
- data/lib/assets/javascripts/tao/form/fields/select/element.coffee +0 -79
- data/lib/assets/javascripts/tao/form/fields/select/index.coffee +0 -8
- data/lib/assets/javascripts/tao/form/fields/select/list.coffee +0 -103
- data/lib/assets/javascripts/tao/form/fields/select/multiple_result.coffee +0 -41
- data/lib/assets/javascripts/tao/form/fields/select/result.coffee +0 -39
- data/lib/assets/javascripts/tao/form/fields/switch.coffee +0 -14
- data/lib/assets/javascripts/tao/form/index.coffee +0 -11
- data/lib/assets/javascripts/tao/form/mobile/element.coffee +0 -5
- data/lib/assets/javascripts/tao/form/mobile/fields/checkbox.coffee +0 -5
- data/lib/assets/javascripts/tao/form/mobile/fields/index.coffee +0 -10
- data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/element.coffee +0 -40
- data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/index.coffee +0 -7
- data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/result.coffee +0 -5
- data/lib/assets/javascripts/tao/form/mobile/fields/moment_picker/segment_list.coffee +0 -24
- data/lib/assets/javascripts/tao/form/mobile/fields/radio.coffee +0 -5
- data/lib/assets/javascripts/tao/form/mobile/fields/select/element.coffee +0 -74
- data/lib/assets/javascripts/tao/form/mobile/fields/select/index.coffee +0 -8
- data/lib/assets/javascripts/tao/form/mobile/fields/select/list.coffee +0 -5
- data/lib/assets/javascripts/tao/form/mobile/fields/select/multiple_result.coffee +0 -5
- data/lib/assets/javascripts/tao/form/mobile/fields/select/result.coffee +0 -5
- data/lib/assets/javascripts/tao/form/mobile/fields/switch.coffee +0 -5
- data/lib/assets/javascripts/tao/form/mobile/index.coffee +0 -11
- data/lib/assets/javascripts/tao/form/shared/element/base.coffee +0 -53
- data/lib/assets/javascripts/tao/form/shared/fields/checkbox.coffee +0 -31
- data/lib/assets/javascripts/tao/form/shared/fields/date_picker.coffee +0 -10
- data/lib/assets/javascripts/tao/form/shared/fields/date_range_picker.coffee +0 -75
- data/lib/assets/javascripts/tao/form/shared/fields/datetime_picker.coffee +0 -78
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/element/base.coffee +0 -70
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/result/base.coffee +0 -39
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segment_list/base.coffee +0 -88
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/base.coffee +0 -30
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/date_segment.coffee +0 -107
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/hour_segment.coffee +0 -28
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/index.coffee +0 -1
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/minute_segment.coffee +0 -28
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/month_segment.coffee +0 -46
- data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/year_segment.coffee +0 -57
- data/lib/assets/javascripts/tao/form/shared/fields/month_picker.coffee +0 -10
- data/lib/assets/javascripts/tao/form/shared/fields/radio.coffee +0 -23
- data/lib/assets/javascripts/tao/form/shared/fields/select/element/base.coffee +0 -132
- data/lib/assets/javascripts/tao/form/shared/fields/select/list/base.coffee +0 -97
- data/lib/assets/javascripts/tao/form/shared/fields/select/models/data_provider.coffee +0 -76
- data/lib/assets/javascripts/tao/form/shared/fields/select/models/index.coffee +0 -2
- data/lib/assets/javascripts/tao/form/shared/fields/select/models/option.coffee +0 -37
- data/lib/assets/javascripts/tao/form/shared/fields/select/multiple_result/base.coffee +0 -90
- data/lib/assets/javascripts/tao/form/shared/fields/select/result/base.coffee +0 -57
- data/lib/assets/javascripts/tao/form/shared/fields/switch.coffee +0 -23
- data/lib/assets/javascripts/tao/form/shared/fields/time_picker.coffee +0 -10
- data/lib/assets/javascripts/tao/form/shared/init.coffee +0 -23
- data/lib/assets/javascripts/tao/form/shared/mixins/checkable.coffee +0 -11
- data/lib/assets/javascripts/tao/ui/icons/form.coffee +0 -11
- data/lib/assets/stylesheets/tao/form/_globals.scss +0 -3
- data/lib/assets/stylesheets/tao/form/_mixins.scss +0 -28
- data/lib/assets/stylesheets/tao/form/_variables.scss +0 -3
- data/lib/assets/stylesheets/tao/form/fields/checkbox.scss +0 -36
- data/lib/assets/stylesheets/tao/form/fields/date_range_picker.scss +0 -20
- data/lib/assets/stylesheets/tao/form/fields/datetime_picker.scss +0 -22
- data/lib/assets/stylesheets/tao/form/fields/index.scss +0 -7
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/index.scss +0 -10
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/result.scss +0 -61
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segment_list.scss +0 -53
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/date_segment.scss +0 -17
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/hour_segment.scss +0 -15
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/minute_segment.scss +0 -17
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/month_segment.scss +0 -15
- data/lib/assets/stylesheets/tao/form/fields/moment_picker/segments/year_segment.scss +0 -15
- data/lib/assets/stylesheets/tao/form/fields/radio.scss +0 -33
- data/lib/assets/stylesheets/tao/form/fields/select/index.scss +0 -14
- data/lib/assets/stylesheets/tao/form/fields/select/list.scss +0 -55
- data/lib/assets/stylesheets/tao/form/fields/select/multiple_result.scss +0 -76
- data/lib/assets/stylesheets/tao/form/fields/select/result.scss +0 -101
- data/lib/assets/stylesheets/tao/form/fields/switch.scss +0 -14
- data/lib/assets/stylesheets/tao/form/index.scss +0 -5
- data/lib/assets/stylesheets/tao/form/inputs/boolean.scss +0 -8
- data/lib/assets/stylesheets/tao/form/inputs/group.scss +0 -2
- data/lib/assets/stylesheets/tao/form/inputs/index.scss +0 -1
- data/lib/assets/stylesheets/tao/form/inputs/text.scss +0 -2
- data/lib/assets/stylesheets/tao/form/layouts/default.scss +0 -146
- data/lib/assets/stylesheets/tao/form/layouts/index.scss +0 -2
- data/lib/assets/stylesheets/tao/form/layouts/narrow.scss +0 -35
- data/lib/assets/stylesheets/tao/form/mobile/_globals.scss +0 -3
- data/lib/assets/stylesheets/tao/form/mobile/_mixins.scss +0 -22
- data/lib/assets/stylesheets/tao/form/mobile/_variables.scss +0 -3
- data/lib/assets/stylesheets/tao/form/mobile/fields/checkbox.scss +0 -2
- data/lib/assets/stylesheets/tao/form/mobile/fields/date_range_picker.scss +0 -18
- data/lib/assets/stylesheets/tao/form/mobile/fields/datetime_picker.scss +0 -18
- data/lib/assets/stylesheets/tao/form/mobile/fields/index.scss +0 -1
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/index.scss +0 -9
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/result.scss +0 -19
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segment_list.scss +0 -52
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/date_segment.scss +0 -14
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/hour_segment.scss +0 -14
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/minute_segment.scss +0 -14
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/month_segment.scss +0 -14
- data/lib/assets/stylesheets/tao/form/mobile/fields/moment_picker/segments/year_segment.scss +0 -14
- data/lib/assets/stylesheets/tao/form/mobile/fields/radio.scss +0 -2
- data/lib/assets/stylesheets/tao/form/mobile/fields/select/index.scss +0 -80
- data/lib/assets/stylesheets/tao/form/mobile/fields/select/list.scss +0 -10
- data/lib/assets/stylesheets/tao/form/mobile/fields/select/multiple_result.scss +0 -12
- data/lib/assets/stylesheets/tao/form/mobile/fields/select/result.scss +0 -28
- data/lib/assets/stylesheets/tao/form/mobile/fields/switch.scss +0 -2
- data/lib/assets/stylesheets/tao/form/mobile/index.scss +0 -5
- data/lib/assets/stylesheets/tao/form/mobile/inputs/boolean.scss +0 -7
- data/lib/assets/stylesheets/tao/form/mobile/inputs/group.scss +0 -6
- data/lib/assets/stylesheets/tao/form/mobile/inputs/index.scss +0 -1
- data/lib/assets/stylesheets/tao/form/mobile/inputs/text.scss +0 -18
- data/lib/assets/stylesheets/tao/form/mobile/layout.scss +0 -137
- data/lib/assets/stylesheets/tao/form/mobile/reset.scss +0 -29
- data/lib/assets/stylesheets/tao/form/mobile/variables/_base.scss +0 -12
- data/lib/assets/stylesheets/tao/form/mobile/variables/_moment_picker.scss +0 -9
- data/lib/assets/stylesheets/tao/form/mobile/variables/_select.scss +0 -9
- data/lib/assets/stylesheets/tao/form/reset.scss +0 -31
- data/lib/assets/stylesheets/tao/form/shared/fields/_checkbox.scss +0 -61
- data/lib/assets/stylesheets/tao/form/shared/fields/_radio.scss +0 -53
- data/lib/assets/stylesheets/tao/form/shared/fields/_switch.scss +0 -56
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_result.scss +0 -46
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/_segment_list.scss +0 -93
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_date_segment.scss +0 -56
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_hour_segment.scss +0 -35
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_minute_segment.scss +0 -23
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_month_segment.scss +0 -27
- data/lib/assets/stylesheets/tao/form/shared/fields/moment_picker/segments/_year_segment.scss +0 -27
- data/lib/assets/stylesheets/tao/form/shared/fields/select/_list.scss +0 -140
- data/lib/assets/stylesheets/tao/form/shared/fields/select/_multiple_result.scss +0 -50
- data/lib/assets/stylesheets/tao/form/shared/inputs/_boolean.scss +0 -5
- data/lib/assets/stylesheets/tao/form/shared/inputs/_group.scss +0 -25
- data/lib/assets/stylesheets/tao/form/shared/inputs/_text.scss +0 -35
- data/lib/assets/stylesheets/tao/form/variables/_base.scss +0 -15
- data/lib/assets/stylesheets/tao/form/variables/_moment_picker.scss +0 -9
- data/lib/assets/stylesheets/tao/form/variables/_select.scss +0 -10
- data/vendor/assets/javascripts/moment.js +0 -4463
- data/vendor/assets/javascripts/moment/zh-cn.js +0 -112
data/lib/assets/javascripts/tao/form/shared/fields/moment_picker/segments/year_segment.coffee
DELETED
@@ -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,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,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
|