effective_form_inputs 1.0.4 → 1.0.5
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 +20 -0
- data/app/assets/stylesheets/effective_radio_buttons/input.scss +24 -0
- data/app/models/inputs/effective_radio_buttons/input.rb +25 -2
- data/app/models/inputs/effective_radio_buttons_input.rb +15 -5
- data/app/models/inputs/effective_select/input.rb +8 -0
- 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: 1f902d1b47f8f42634665e3f866708573532a4eb
|
4
|
+
data.tar.gz: 447661ba85bf6b67274d762b4f135a3bfa90a22e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dcf849517c895cf279b678db02583ed25c27589e2f8ca51ad91f1be63e989fa61cf2326ee9209ccc1d01ff29e5262831b4e2ebb5908afe2c64a9667c8f7c1115
|
7
|
+
data.tar.gz: 95a8268916ad69957724cea6f3779328d81ef1a7d7f9a737e8a1245a72549f3229d9bcc3725e5b3927bacd45013151b81bb7848f4cac47154804dad404000c2c
|
data/README.md
CHANGED
@@ -396,6 +396,12 @@ To add a css class to the select2 container or dropdown:
|
|
396
396
|
:dropdownClass => 'custom-dropdown-class'
|
397
397
|
```
|
398
398
|
|
399
|
+
### Additional
|
400
|
+
|
401
|
+
Call with `single_selected: true` to ensure only the first selected option tag will be `<option selected="selected">`.
|
402
|
+
|
403
|
+
This can be useful when displaying multiple options with an identical value.
|
404
|
+
|
399
405
|
### Working with dynamic options
|
400
406
|
|
401
407
|
The following information applies to `effective_select` only, and is not part of the standard select2 API.
|
@@ -705,6 +711,20 @@ As a SimpleForm input:
|
|
705
711
|
:buttons => true
|
706
712
|
```
|
707
713
|
|
714
|
+
### Inline
|
715
|
+
|
716
|
+
Pass `inline: true` to the input options to render the radio buttons inline.
|
717
|
+
|
718
|
+
As a SimpleForm input:
|
719
|
+
|
720
|
+
```ruby
|
721
|
+
= simple_form_for @user do |f|
|
722
|
+
= f.input :breakfast,
|
723
|
+
:as => :effective_radio_buttons,
|
724
|
+
:collection => ['eggs', 'toast', 'bacon'],
|
725
|
+
:inline => true
|
726
|
+
```
|
727
|
+
|
708
728
|
### Images
|
709
729
|
|
710
730
|
Pass `images: []` as an array of strings with the same length as the collection to render image buttons.
|
@@ -23,3 +23,27 @@ div.effective_radio_buttons.image_radio_buttons {
|
|
23
23
|
border: 3px solid #009bc9;
|
24
24
|
}
|
25
25
|
}
|
26
|
+
|
27
|
+
div.effective_radio_buttons.inline_radio_buttons {
|
28
|
+
label.control-label { display: block; }
|
29
|
+
|
30
|
+
label.radio-inline {
|
31
|
+
padding-top: 7px;
|
32
|
+
padding-bottom: 7px;
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
div.effective_radio_buttons.button_radio_buttons {
|
37
|
+
input { display: none; }
|
38
|
+
}
|
39
|
+
|
40
|
+
.btn-group.effective_radio_buttons > .btn.radio-first:not(:first-child):not(:last-child):not(.dropdown-toggle) {
|
41
|
+
border-bottom-left-radius: 4px;
|
42
|
+
border-top-left-radius: 4px;
|
43
|
+
}
|
44
|
+
|
45
|
+
form.form-horizontal {
|
46
|
+
.btn-group.effective_radio_buttons {
|
47
|
+
display: block;
|
48
|
+
}
|
49
|
+
}
|
@@ -23,17 +23,28 @@ module Inputs
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def render_item(builder)
|
26
|
-
if options[:
|
26
|
+
if options[:inline] || options[:buttons]
|
27
|
+
item = builder.radio_button + item_image_or_text(builder)
|
28
|
+
elsif options[:nested_boolean_style] == :nested
|
27
29
|
item = builder.label { builder.radio_button + item_image_or_text(builder) }
|
28
30
|
else
|
29
31
|
item = builder.radio_button + builder.label { item_image_or_text(builder) }
|
30
32
|
end
|
31
33
|
|
34
|
+
if options[:buttons]
|
35
|
+
@button_index ||= -1; @button_index += 1
|
36
|
+
end
|
37
|
+
|
32
38
|
if options[:item_wrapper_tag]
|
33
39
|
active = (builder.object.send(options[:value_method]).to_s == value.to_s)
|
34
40
|
|
35
41
|
content_tag(options[:item_wrapper_tag], item,
|
36
|
-
class: [
|
42
|
+
class: [
|
43
|
+
options[:item_wrapper_class],
|
44
|
+
('btn btn-default' if options[:buttons]),
|
45
|
+
('radio-first' if options[:buttons] && @button_index == 0),
|
46
|
+
('active' if active)
|
47
|
+
].flatten.compact.uniq.join(' ')
|
37
48
|
)
|
38
49
|
else
|
39
50
|
item
|
@@ -71,6 +82,18 @@ module Inputs
|
|
71
82
|
options[:checked] || super
|
72
83
|
end
|
73
84
|
|
85
|
+
def options
|
86
|
+
@effective_radio_buttons_options ||= super().tap do |options|
|
87
|
+
options[:item_wrapper_class] = Array(options[:item_wrapper_class]).flatten.uniq
|
88
|
+
|
89
|
+
if options[:inline] || options[:buttons]
|
90
|
+
options[:item_wrapper_tag] = :label unless options[:buttons]
|
91
|
+
options[:item_wrapper_class] = 'radio-inline'
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
74
97
|
private
|
75
98
|
|
76
99
|
def initialize_and_validate_images!
|
@@ -12,15 +12,25 @@ if defined?(SimpleForm)
|
|
12
12
|
options[:value_method] = value_method
|
13
13
|
options[:nested_boolean_style] = :nested if nested_boolean_style?
|
14
14
|
|
15
|
+
# Wrapper
|
16
|
+
options[:wrapper_html] ||= {}
|
17
|
+
options[:wrapper_html][:class] = Array(options[:wrapper_html][:class])
|
18
|
+
|
15
19
|
if options[:images]
|
16
|
-
options[:wrapper_html]
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
options[:wrapper_html][:class]
|
20
|
+
options[:wrapper_html][:class] << 'image_radio_buttons'
|
21
|
+
end
|
22
|
+
|
23
|
+
if options[:buttons]
|
24
|
+
options[:wrapper_html][:class] << 'button_radio_buttons btn-group inline_radio_buttons'
|
21
25
|
options[:wrapper_html][:data] = { toggle: 'buttons' }
|
22
26
|
end
|
23
27
|
|
28
|
+
if options[:inline] && !options[:buttons]
|
29
|
+
options[:wrapper_html][:class] << 'inline_radio_buttons'
|
30
|
+
end
|
31
|
+
|
32
|
+
options[:wrapper_html][:class] = options[:wrapper_html][:class].join(' ')
|
33
|
+
|
24
34
|
Inputs::EffectiveRadioButtons::Input.new(object, object_name, template, attribute_name, input_options, (merge_wrapper_options(input_html_options, wrapper_options) || {})).to_html
|
25
35
|
end
|
26
36
|
|
@@ -31,6 +31,12 @@ module Inputs
|
|
31
31
|
html += hidden_field(@object_name, polymorphic_id_method, value: polymorphic_id_value)
|
32
32
|
end
|
33
33
|
|
34
|
+
if options[:single_selected]
|
35
|
+
if html.sub!('selected="selected"', "selected='selected'")
|
36
|
+
html.gsub!('selected="selected"', '')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
34
40
|
html
|
35
41
|
end
|
36
42
|
|
@@ -112,6 +118,8 @@ module Inputs
|
|
112
118
|
elsif value.first.respond_to?(options[:value_method]) # This is probably a belongs_to ActiveRecord object
|
113
119
|
options[:selected] = value.map { |value| (value.public_send(options[:value_method]) rescue value) }
|
114
120
|
end
|
121
|
+
when Integer
|
122
|
+
options[:selected] = value
|
115
123
|
else # Value is not an Array
|
116
124
|
if options[:polymorphic]
|
117
125
|
options[:selected] = polymorphic_value(value)
|
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: 1.0.
|
4
|
+
version: 1.0.5
|
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: 2017-04-
|
11
|
+
date: 2017-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|