effective_form_inputs 0.7.5 → 0.7.6
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.
- checksums.yaml +4 -4
- data/README.md +36 -2
- data/app/assets/javascripts/effective_select/initialize.js.coffee +7 -1
- data/app/assets/javascripts/effective_select/overrides.js.coffee +37 -4
- data/app/assets/stylesheets/effective_select/overrides.scss +5 -0
- data/app/models/inputs/effective_select/input.rb +15 -2
- data/lib/effective_form_inputs/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 956155606d7d1da40fcca46e7424a36477b3829b
|
4
|
+
data.tar.gz: 6b6ecf49a907ba2803120cd4624b560f17706e3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fec09f2fffabc7b3d827ab26d72ad5f3b81b772f5e815ac0671b5fe094a6ba3e1e45f86774f96cf221fedd8fad0c7431e9f49066a6610ffa73e0509aa884b3d2
|
7
|
+
data.tar.gz: dc8e1de8a5b8391d89f07b66b16db57e7f645eed9d59a2f5eafda11a44e2beea2418b8fbb2f1e5e51a2ce3c2790f20b5f3a96ffc690a0028832fb72683dc2061
|
data/README.md
CHANGED
@@ -329,10 +329,44 @@ To hide the search box entirely:
|
|
329
329
|
:minimumResultsForSearch => 'Infinity'
|
330
330
|
```
|
331
331
|
|
332
|
-
For a full list of options, please refer to:
|
332
|
+
For a full list of options, please refer to: https://select2.github.io/options.html
|
333
|
+
|
334
|
+
|
335
|
+
The following `:input_js => options` are not part of the standard select2 API, and are custom `effective_select` functionality only:
|
336
|
+
|
337
|
+
To add a css class to the select2 container or dropdown:
|
338
|
+
|
339
|
+
```ruby
|
340
|
+
:containerClass => 'custom-container-class'
|
341
|
+
:dropdownClass => 'custom-dropdown-class'
|
342
|
+
```
|
343
|
+
|
344
|
+
### Working with dynamic options
|
333
345
|
|
334
|
-
|
346
|
+
The following information applies to `effective_select` only, and is not part of the standard select2 API.
|
335
347
|
|
348
|
+
To totally hide (instead of just grey out) any disabled options from the select2 dropdown, initialize the input with:
|
349
|
+
|
350
|
+
```ruby
|
351
|
+
= f.input :category, :as => :effective_select, :collection => ..., :hide_disabled => true
|
352
|
+
```
|
353
|
+
|
354
|
+
If you want to dynamically add/remove options from the select field after page load, you must use the `select2:reinitialize` event:
|
355
|
+
|
356
|
+
```coffeescript
|
357
|
+
# When something on my page changes
|
358
|
+
$(document).on 'change', '.something', (event) ->
|
359
|
+
$select = $(event.target).closest('form').find('select.i-want-to-change') # Find the select2 input to be updated
|
360
|
+
|
361
|
+
# Go through its options, and modify some of them.
|
362
|
+
# Using the above 'hide_disabled true' functionality, the following code hides the options from being displayed,
|
363
|
+
# but you could actually remove the options, add new ones, or update the values/texts. whatever.
|
364
|
+
$select.find('option').each (index, option) ->
|
365
|
+
$(option).prop('disabled', true) if index > 10
|
366
|
+
|
367
|
+
# Whenever the underlying options change, you need to manually trigger the following event:
|
368
|
+
$select.select2().trigger('select2:reinitialize')
|
369
|
+
```
|
336
370
|
|
337
371
|
### AJAX Support
|
338
372
|
|
@@ -5,7 +5,13 @@ initialize = ->
|
|
5
5
|
element = $(element)
|
6
6
|
options = element.data('input-js-options') || {}
|
7
7
|
|
8
|
-
element.addClass('initialized').select2(options)
|
8
|
+
$select = element.addClass('initialized').select2(options)
|
9
|
+
|
10
|
+
# effective_select custom class functionality
|
11
|
+
# select2 doesn't provide an initializer to add css classes to its input, so we manually support this feature
|
12
|
+
# js_options[:containerClass] and js_options[:dropdownClass]
|
13
|
+
$select.data('select2').$container.addClass(options['containerClass']) if options['containerClass']
|
14
|
+
$select.data('select2').$dropdown.addClass(options['dropdownClass']) if options['dropdownClass']
|
9
15
|
|
10
16
|
$ -> initialize()
|
11
17
|
$(document).on 'page:change', -> initialize()
|
@@ -4,8 +4,41 @@
|
|
4
4
|
$(document).on 'select2:unselecting', (event) -> $(event.target).data('state', 'unselected')
|
5
5
|
|
6
6
|
$(document).on 'select2:open', (event) ->
|
7
|
-
|
7
|
+
$select = $(event.target)
|
8
|
+
|
9
|
+
if $select.data('state') == 'unselected'
|
10
|
+
$select.removeData('state')
|
11
|
+
setTimeout ( => $select.select2('close') ), 0
|
12
|
+
|
13
|
+
|
14
|
+
# effective_select custom reinitialization functionality
|
15
|
+
# This is a custom event intended to be manually triggered when the underlying options change
|
16
|
+
# You can use this to dynamically disable options (with or without the effective_select hide_disabled: true)
|
17
|
+
# https://github.com/select2/select2/issues/2830
|
18
|
+
|
19
|
+
# To trigger this event,
|
20
|
+
# $(document).on 'change', "select[name$='[something_id]']", (event) ->
|
21
|
+
# ...add/remove/disable this select field's options...
|
22
|
+
# $(event.target).select2().trigger('select2:reinitialize')
|
23
|
+
|
24
|
+
$(document).on 'select2:reinitialize', (event) ->
|
25
|
+
$select = $(event.target)
|
26
|
+
|
27
|
+
# Get the existing options and value
|
28
|
+
options = $select.data('select2').options.options['inputJsOptions'] || {}
|
29
|
+
value = $select.find('option:selected').val()
|
30
|
+
|
31
|
+
# Clear/Restore the value appropriately
|
32
|
+
if value && $select.find("option:enabled[value='#{value}']").length > 0
|
33
|
+
$select.val(value)
|
34
|
+
else
|
35
|
+
$select.val('')
|
36
|
+
|
37
|
+
# Reinitialize select2
|
38
|
+
$select.select2('destroy').select2(options)
|
39
|
+
|
40
|
+
# Restore effective_select custom class functionality
|
41
|
+
$select.data('select2').$container.addClass(options['containerClass']) if options['containerClass']
|
42
|
+
$select.data('select2').$dropdown.addClass(options['dropdownClass']) if options['dropdownClass']
|
43
|
+
|
8
44
|
|
9
|
-
if obj.data('state') == 'unselected'
|
10
|
-
obj.removeData('state')
|
11
|
-
setTimeout ( => obj.select2('close') ), 0
|
@@ -20,3 +20,8 @@
|
|
20
20
|
.select2-container--focus > .selection > .select2-selection {
|
21
21
|
border: 1px solid #9cd5fe !important;
|
22
22
|
}
|
23
|
+
|
24
|
+
// effective_select option "hide_disabled: true"
|
25
|
+
.select2-container.hide-disabled .select2-results__option[aria-disabled=true] {
|
26
|
+
display: none;
|
27
|
+
}
|
@@ -8,7 +8,7 @@ module Inputs
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def default_input_js
|
11
|
-
{theme: 'bootstrap', minimumResultsForSearch: 6, tokenSeparators: [',', ' '], width: 'style', placeholder: 'Please choose'}
|
11
|
+
{ theme: 'bootstrap', minimumResultsForSearch: 6, tokenSeparators: [',', ' '], width: 'style', placeholder: 'Please choose' }
|
12
12
|
end
|
13
13
|
|
14
14
|
def default_input_html
|
@@ -131,14 +131,27 @@ module Inputs
|
|
131
131
|
html_options[:multiple] = options[:multiple]
|
132
132
|
html_options[:class] << 'polymorphic' if options[:polymorphic]
|
133
133
|
html_options[:class] << 'grouped' if options[:grouped]
|
134
|
+
html_options[:class] << 'hide-disabled' if options[:hide_disabled]
|
134
135
|
end
|
135
136
|
end
|
136
137
|
|
137
138
|
def js_options
|
138
|
-
super().tap do |js_options|
|
139
|
+
@effective_select_js_options ||= super().tap do |js_options|
|
139
140
|
js_options[:allowClear] = (options[:multiple] != true)
|
140
141
|
js_options[:tags] = (options[:tags] == true)
|
141
142
|
js_options[:tokenSeparators] = nil if options[:tags] != true
|
143
|
+
|
144
|
+
# select2 doesn't support adding css classes to its input, so we support it through the
|
145
|
+
# js_options[:containerClass] and js_options[:dropdownClass] methods
|
146
|
+
# When we use options[:hide_disabled], we add the 'hide-disabled' class to both the container and the dropdown
|
147
|
+
if options[:hide_disabled]
|
148
|
+
js_options[:containerClass] = (arrayize_html_class_key(js_options[:containerClass]) + ['hide-disabled']).join(' ')
|
149
|
+
end
|
150
|
+
|
151
|
+
if options[:hide_disabled]
|
152
|
+
js_options[:dropdownClass] = (arrayize_html_class_key(js_options[:dropdownClass]) + ['hide-disabled']).join(' ')
|
153
|
+
end
|
154
|
+
|
142
155
|
end
|
143
156
|
end
|
144
157
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_form_inputs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|