shoelace-rails 0.4.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +11 -61
- data/.gitignore +1 -6
- data/Appraisals +6 -0
- data/CHANGELOG.md +22 -5
- data/Gemfile +0 -3
- data/Rakefile +2 -17
- data/app/helpers/shoelace/form_helper.rb +63 -14
- data/gemfiles/rails_60.gemfile +0 -1
- data/gemfiles/rails_61.gemfile +0 -1
- data/gemfiles/rails_70.gemfile +0 -1
- data/gemfiles/rails_71.gemfile +10 -0
- data/gemfiles/rails_edge.gemfile +0 -1
- data/lib/shoelace/rails/version.rb +1 -1
- data/shoelace-rails.gemspec +1 -1
- data/test/helpers/form_helper_test.rb +40 -11
- data/test/helpers/translation_test.rb +160 -0
- metadata +7 -58
- data/dist/.keep +0 -0
- data/dist/types/.keep +0 -0
- data/package.json +0 -50
- data/rollup.config.js +0 -49
- data/src/index.ts +0 -2
- data/src/turbo/index.ts +0 -6
- data/src/turbo/polyfills/formdata-event.js +0 -27
- data/src/turbo/sl-turbo-form.ts +0 -110
- data/src/turbolinks/features/confirm.ts +0 -42
- data/src/turbolinks/features/disable.ts +0 -94
- data/src/turbolinks/features/remote.ts +0 -107
- data/src/turbolinks/index.ts +0 -6
- data/src/turbolinks/selectors.ts +0 -38
- data/src/turbolinks/start.ts +0 -38
- data/src/turbolinks/turbolinks.ts +0 -78
- data/src/turbolinks/utils/ajax.ts +0 -146
- data/src/turbolinks/utils/csp.ts +0 -20
- data/src/turbolinks/utils/csrf.ts +0 -33
- data/src/turbolinks/utils/dom.ts +0 -40
- data/src/turbolinks/utils/event.ts +0 -57
- data/src/turbolinks/utils/form.ts +0 -58
- data/test/dummy_app/Gemfile +0 -19
- data/test/dummy_app/Rakefile +0 -6
- data/test/dummy_app/app/controllers/hotwire_forms_controller.rb +0 -46
- data/test/dummy_app/app/controllers/turbolinks_forms_controller.rb +0 -37
- data/test/dummy_app/app/models/user.rb +0 -16
- data/test/dummy_app/app/packs/entrypoints/hotwire.js +0 -1
- data/test/dummy_app/app/packs/entrypoints/turbolinks.js +0 -5
- data/test/dummy_app/app/views/hotwire_forms/form.html.erb +0 -45
- data/test/dummy_app/app/views/hotwire_forms/show.html.erb +0 -5
- data/test/dummy_app/app/views/layouts/application.html.erb +0 -39
- data/test/dummy_app/app/views/turbolinks_forms/form.html.erb +0 -44
- data/test/dummy_app/app/views/turbolinks_forms/show.html.erb +0 -5
- data/test/dummy_app/bin/rails +0 -5
- data/test/dummy_app/bin/webpack +0 -18
- data/test/dummy_app/bin/yarn +0 -18
- data/test/dummy_app/config/application.rb +0 -16
- data/test/dummy_app/config/boot.rb +0 -4
- data/test/dummy_app/config/environment.rb +0 -2
- data/test/dummy_app/config/environments/development.rb +0 -10
- data/test/dummy_app/config/environments/test.rb +0 -18
- data/test/dummy_app/config/routes.rb +0 -4
- data/test/dummy_app/config/webpack/development.js +0 -5
- data/test/dummy_app/config/webpack/production.js +0 -1
- data/test/dummy_app/config/webpack/test.js +0 -5
- data/test/dummy_app/config/webpacker.yml +0 -33
- data/test/dummy_app/config.ru +0 -6
- data/test/dummy_app/package.json +0 -24
- data/test/dummy_app/test/system/hotwire_form_test.rb +0 -63
- data/test/dummy_app/test/system/turbolinks_form_test.rb +0 -38
- data/test/dummy_app/test/test_helper.rb +0 -68
- data/tsconfig.json +0 -19
- data/yarn.lock +0 -249
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 206ca8361dedd910c96e3c13469e9bad996af7d2a91a0ca0af2cb8e1a7430808
|
4
|
+
data.tar.gz: 64df314d89557bd02dbf791bddcc49185017f5cb1d22c5046a23f1767df5bf18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 284ca5c08643f593de6554d02bb8e4857d141c8a4ddc02def92e573a273a3b45694e2ce14783779fbafe83eea1b9cbc85fd80ba52f36dc235e11d5cec6e9f6b1
|
7
|
+
data.tar.gz: 22ca68a850b08eebb0ad6d8fd48a8a7b65a3a4647acd34171f04cac20eca635475147804194957efe75fb4aeef68741b4b65fc3f10edc214165b3eb51addefcb
|
data/.github/workflows/main.yml
CHANGED
@@ -9,6 +9,7 @@ jobs:
|
|
9
9
|
strategy:
|
10
10
|
matrix:
|
11
11
|
ruby_version:
|
12
|
+
- '3.3'
|
12
13
|
- '3.2'
|
13
14
|
- '3.1'
|
14
15
|
- '3.0'
|
@@ -16,17 +17,20 @@ jobs:
|
|
16
17
|
- 'jruby-9.3'
|
17
18
|
- 'jruby-9.4'
|
18
19
|
gemfile:
|
20
|
+
- gemfiles/rails_71.gemfile
|
19
21
|
- gemfiles/rails_70.gemfile
|
20
22
|
- gemfiles/rails_61.gemfile
|
21
23
|
- gemfiles/rails_60.gemfile
|
22
24
|
exclude:
|
25
|
+
- ruby_version: 'jruby-9.3'
|
26
|
+
gemfile: gemfiles/rails_71.gemfile
|
23
27
|
- ruby_version: 'jruby-9.3'
|
24
28
|
gemfile: gemfiles/rails_70.gemfile
|
25
29
|
runs-on: ubuntu-22.04
|
26
30
|
env:
|
27
31
|
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
28
32
|
steps:
|
29
|
-
- uses: actions/checkout@
|
33
|
+
- uses: actions/checkout@v4
|
30
34
|
- name: Set up Ruby
|
31
35
|
uses: ruby/setup-ruby@v1
|
32
36
|
with:
|
@@ -34,89 +38,35 @@ jobs:
|
|
34
38
|
bundler-cache: true
|
35
39
|
- run: bundle exec rake test
|
36
40
|
|
37
|
-
system:
|
38
|
-
needs: unit
|
39
|
-
runs-on: ubuntu-22.04
|
40
|
-
steps:
|
41
|
-
- uses: actions/checkout@v3
|
42
|
-
- name: Set up Ruby
|
43
|
-
uses: ruby/setup-ruby@v1
|
44
|
-
with:
|
45
|
-
ruby-version: 3.2.0
|
46
|
-
bundler-cache: true
|
47
|
-
- name: Install dependencies
|
48
|
-
run: |
|
49
|
-
rm -rf node_modules &&
|
50
|
-
yarn install &&
|
51
|
-
yarn add tslib &&
|
52
|
-
bundle
|
53
|
-
- name: Run the system test in the dummy app
|
54
|
-
run: rake test:system
|
55
|
-
|
56
41
|
rails_edge:
|
57
|
-
needs:
|
42
|
+
needs: unit
|
58
43
|
runs-on: ubuntu-22.04
|
59
44
|
env:
|
60
45
|
BUNDLE_GEMFILE: gemfiles/rails_edge.gemfile
|
61
46
|
steps:
|
62
|
-
- uses: actions/checkout@
|
47
|
+
- uses: actions/checkout@v4
|
63
48
|
- name: Set up Ruby
|
64
49
|
uses: ruby/setup-ruby@v1
|
65
50
|
with:
|
66
|
-
ruby-version: 3.
|
51
|
+
ruby-version: 3.3
|
67
52
|
bundler-cache: true
|
68
53
|
- run: bundle exec rake test || echo "Rails edge test is done."
|
69
54
|
|
70
55
|
ruby_edge:
|
71
|
-
needs:
|
56
|
+
needs: unit
|
72
57
|
strategy:
|
73
58
|
matrix:
|
74
59
|
gemfile:
|
75
60
|
- gemfiles/rails_edge.gemfile
|
76
|
-
- gemfiles/
|
61
|
+
- gemfiles/rails_71.gemfile
|
77
62
|
runs-on: ubuntu-22.04
|
78
63
|
env:
|
79
64
|
BUNDLE_GEMFILE: ${{ matrix.gemfile }}
|
80
65
|
steps:
|
81
|
-
- uses: actions/checkout@
|
66
|
+
- uses: actions/checkout@v4
|
82
67
|
- name: Set up Ruby
|
83
68
|
uses: ruby/setup-ruby@v1
|
84
69
|
with:
|
85
70
|
ruby-version: 'ruby-head'
|
86
71
|
bundler-cache: true
|
87
72
|
- run: bundle exec rake || echo "Ruby edge test is done."
|
88
|
-
|
89
|
-
# browser_tests:
|
90
|
-
# runs-on: ubuntu-22.04
|
91
|
-
# steps:
|
92
|
-
# - uses: actions/checkout@v3
|
93
|
-
# - name: Set up Ruby
|
94
|
-
# uses: ruby/setup-ruby@v1
|
95
|
-
# with:
|
96
|
-
# ruby-version: 3.2.0
|
97
|
-
# bundler-cache: true
|
98
|
-
# - name: Install dependencies
|
99
|
-
# run: |
|
100
|
-
# rm -rf node_modules &&
|
101
|
-
# yarn install &&
|
102
|
-
# yarn add tslib &&
|
103
|
-
# bundle
|
104
|
-
# - name: 'BrowserStack Env Setup'
|
105
|
-
# uses: 'browserstack/github-actions/setup-env@master'
|
106
|
-
# with:
|
107
|
-
# username: ${{ secrets.BROWSERSTACK_USERNAME }}
|
108
|
-
# access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
|
109
|
-
# - name: 'Start BrowserStackLocal Tunnel'
|
110
|
-
# uses: 'browserstack/github-actions/setup-local@master'
|
111
|
-
# with:
|
112
|
-
# local-testing: 'start'
|
113
|
-
# local-logging-level: 'all-logs'
|
114
|
-
# local-identifier: 'random'
|
115
|
-
# - name: Run the system test in the dummy app
|
116
|
-
# run: rake test:system
|
117
|
-
# env:
|
118
|
-
# BROWSERSTACK_URL: ${{ secrets.BROWSERSTACK_URL }}
|
119
|
-
# - name: 'Stop BrowserStackLocal'
|
120
|
-
# uses: 'browserstack/github-actions/setup-local@master'
|
121
|
-
# with:
|
122
|
-
# local-testing: 'stop'
|
data/.gitignore
CHANGED
data/Appraisals
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,11 +1,28 @@
|
|
1
|
-
## v0.
|
1
|
+
## v0.6.0
|
2
2
|
|
3
|
-
|
3
|
+
#### ⭐️ Features
|
4
|
+
|
5
|
+
- Add the ability to use translations with form helpers
|
6
|
+
|
7
|
+
## [v0.5.0](https://github.com/yuki24/shoelace-rails/tree/v0.5.0)
|
8
|
+
|
9
|
+
_<sup>released at 2024-03-09 08:54:30 UTC</sup>_
|
10
|
+
|
11
|
+
#### ⭐️ Features
|
12
|
+
|
13
|
+
- Add support for Ruby 3.3 ([<tt>399f255</tt>](https://github.com/yuki24/shoelace-rails/commit/399f25567f964d0ea2e250eba6db28a2bcd038a3))
|
14
|
+
- Add support for Rails 7.1 ([#4](https://github.com/yuki24/shoelace-rails/pull/4))
|
15
|
+
- Add `#grouped_collection_select` ([<tt>2b91023</tt>](https://github.com/yuki24/shoelace-rails/commit/2b91023d51e1d0a218f2102232241afa82aaf872))
|
16
|
+
- Make the `<sl-radio>` form helpers compatible with Shoelace [2.0.0-beta.80](https://shoelace.style/resources/changelog#id_2_0_0-beta_80) and above ([<tt>ef9a834</tt>](https://github.com/yuki24/shoelace-rails/commit/ef9a8345f2c5c921847aef15e19cf64a471d6473))
|
17
|
+
|
18
|
+
## [v0.4.1](https://github.com/yuki24/shoelace-rails/tree/v0.4.1)
|
19
|
+
|
20
|
+
_<sup>released at 2023-03-21 04:03:27 UTC</sup>_
|
4
21
|
|
5
22
|
#### 🐞Bug Fixes
|
6
23
|
|
7
|
-
- Fixes a bug where `FormHelper` may not be defined when someone loads `ActionView` too early (d91ed3b595c01ce2dfc471b12b14311e0660d3d7)
|
8
|
-
- Fixes a bug where the Shoelace rake tasks blow up when the project does not depend on Sprockets or Propshaft (0e64cd6dc38a037171be04eaf1d3f59c3c8529eb, 75adf831b1faa7f5d1faeed26e672d4bc89b9513)
|
24
|
+
- Fixes a bug where `FormHelper` may not be defined when someone loads `ActionView` too early ([<tt>d91ed3b</tt>](https://github.com/yuki24/shoelace-rails/commit/d91ed3b595c01ce2dfc471b12b14311e0660d3d7))
|
25
|
+
- Fixes a bug where the Shoelace rake tasks blow up when the project does not depend on Sprockets or Propshaft ([<tt>0e64cd6</tt>](https://github.com/yuki24/shoelace-rails/commit/0e64cd6dc38a037171be04eaf1d3f59c3c8529eb), [<tt>75adf83</tt>](https://github.com/yuki24/shoelace-rails/commit/75adf831b1faa7f5d1faeed26e672d4bc89b9513))
|
9
26
|
|
10
27
|
## [v0.4.0](https://github.com/yuki24/shoelace-rails/tree/v0.4.0)
|
11
28
|
|
@@ -13,7 +30,7 @@ _<sup>released at 2023-01-07 07:23:50 UTC</sup>_
|
|
13
30
|
|
14
31
|
#### 🚨 Breaking Changes
|
15
32
|
|
16
|
-
- No longer works with `2.0.0-beta.
|
33
|
+
- No longer works with `2.0.0-beta.87` and below.
|
17
34
|
|
18
35
|
#### ⭐️ Features
|
19
36
|
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -6,22 +6,7 @@ require "rake/testtask"
|
|
6
6
|
Rake::TestTask.new(:test) do |t|
|
7
7
|
t.libs << "test"
|
8
8
|
t.libs << "lib"
|
9
|
-
t.test_files = FileList["test/**/*_test.rb"]
|
9
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
task :system do
|
14
|
-
Bundler.with_original_env do
|
15
|
-
sh <<~CMD
|
16
|
-
yarn build &&
|
17
|
-
cd test/dummy_app &&
|
18
|
-
yarn &&
|
19
|
-
bundle &&
|
20
|
-
RAILS_ENV=test rails webpacker:compile
|
21
|
-
rails test:system
|
22
|
-
CMD
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
task default: [:test, :'test:system']
|
12
|
+
task default: [:test]
|
@@ -57,8 +57,9 @@ module Shoelace
|
|
57
57
|
options = @options.stringify_keys
|
58
58
|
options["value"] = options.fetch("value") { value_before_type_cast }
|
59
59
|
add_default_name_and_id(options)
|
60
|
+
label = options.delete('label').presence || @method_name.humanize
|
60
61
|
|
61
|
-
@template_object.content_tag('sl-switch',
|
62
|
+
@template_object.content_tag('sl-switch', label, options, &block)
|
62
63
|
end
|
63
64
|
end
|
64
65
|
|
@@ -104,11 +105,26 @@ module Shoelace
|
|
104
105
|
end
|
105
106
|
end
|
106
107
|
|
108
|
+
class ShoelaceGroupedCollectionSelect < ActionView::Helpers::Tags::GroupedCollectionSelect #:nodoc:
|
109
|
+
def option_groups_from_collection_for_select(collection, group_method, group_label_method, option_key_method, option_value_method, selected_key = nil)
|
110
|
+
@template_object.sl_option_groups_from_collection_for_select(collection, group_method, group_label_method, option_key_method, option_value_method, selected_key)
|
111
|
+
end
|
112
|
+
|
113
|
+
def select_content_tag(option_tags, _options, html_options)
|
114
|
+
html_options = html_options.stringify_keys
|
115
|
+
html_options['value'] ||= value
|
116
|
+
add_default_name_and_id(html_options)
|
117
|
+
|
118
|
+
@template_object.content_tag("sl-select", option_tags, html_options)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
107
122
|
class ShoelaceCheckBox < ActionView::Helpers::Tags::CheckBox #:nodoc:
|
108
123
|
def render(&block)
|
109
124
|
options = @options.stringify_keys
|
110
125
|
options["value"] = @checked_value
|
111
126
|
options["checked"] = true if input_checked?(options)
|
127
|
+
label = options.delete("label") || @method_name.humanize
|
112
128
|
|
113
129
|
if options["multiple"]
|
114
130
|
add_default_name_and_id_for_value(@checked_value, options)
|
@@ -122,7 +138,7 @@ module Shoelace
|
|
122
138
|
sl_checkbox_tag = if block_given?
|
123
139
|
@template_object.content_tag('sl-checkbox', '', options, &block)
|
124
140
|
else
|
125
|
-
@template_object.content_tag('sl-checkbox', @method_name.to_s.humanize, options)
|
141
|
+
@template_object.content_tag('sl-checkbox', label || @method_name.to_s.humanize, options)
|
126
142
|
end
|
127
143
|
|
128
144
|
if include_hidden
|
@@ -137,8 +153,8 @@ module Shoelace
|
|
137
153
|
def render(&block)
|
138
154
|
options = @options.stringify_keys
|
139
155
|
options["value"] = @tag_value
|
140
|
-
options["checked"] = "checked" if input_checked?(options)
|
141
156
|
add_default_name_and_id_for_value(@tag_value, options)
|
157
|
+
options.delete("name")
|
142
158
|
|
143
159
|
@template_object.content_tag('sl-radio', '', options.except("type"), &block)
|
144
160
|
end
|
@@ -164,7 +180,12 @@ module Shoelace
|
|
164
180
|
private
|
165
181
|
|
166
182
|
def render_collection(&block)
|
167
|
-
|
183
|
+
html_options = @html_options.stringify_keys
|
184
|
+
html_options["value"] = value
|
185
|
+
add_default_name_and_id(html_options)
|
186
|
+
html_options["label"] = @options[:label].presence || @method_name.humanize
|
187
|
+
|
188
|
+
@template_object.content_tag('sl-radio-group', html_options) { super(&block) }
|
168
189
|
end
|
169
190
|
|
170
191
|
def hidden_field
|
@@ -188,48 +209,56 @@ module Shoelace
|
|
188
209
|
url: :url
|
189
210
|
}.each do |field_type, field_class|
|
190
211
|
# def email_field(method, **options, &block)
|
191
|
-
# ShoelaceInputField.new(:email, object_name, method, @template, options.with_defaults(label: method
|
212
|
+
# ShoelaceInputField.new(:email, object_name, method, @template, options.with_defaults(label: label_text(method))).render(&block)
|
192
213
|
# end
|
193
214
|
eval <<-RUBY, nil, __FILE__, __LINE__ + 1
|
194
215
|
def #{field_type}_field(method, **options, &block)
|
195
|
-
ShoelaceInputField.new(:#{field_class}, object_name, method, @template, options.with_defaults(object: @object, label: method
|
216
|
+
ShoelaceInputField.new(:#{field_class}, object_name, method, @template, options.with_defaults(object: @object, label: label_text(method))).render(&block)
|
196
217
|
end
|
197
218
|
RUBY
|
198
219
|
end
|
199
220
|
|
200
221
|
def color_field(method, **options)
|
201
|
-
ShoelaceColorPicker.new(object_name, method, @template, options.with_defaults(object: @object)).render
|
222
|
+
ShoelaceColorPicker.new(object_name, method, @template, options.with_defaults(object: @object, label: label_text(method))).render
|
202
223
|
end
|
203
224
|
alias color_picker color_field
|
204
225
|
|
205
226
|
def range_field(method, **options)
|
206
|
-
ShoelaceRange.new(object_name, method, @template, options.with_defaults(object: @object, label: method
|
227
|
+
ShoelaceRange.new(object_name, method, @template, options.with_defaults(object: @object, label: label_text(method))).render
|
207
228
|
end
|
208
229
|
alias range range_field
|
209
230
|
|
210
231
|
def switch_field(method, **options, &block)
|
211
|
-
|
232
|
+
if block_given?
|
233
|
+
ShoelaceSwitch.new(object_name, method, @template, options.with_defaults(object: @object)).render(&block)
|
234
|
+
else
|
235
|
+
ShoelaceSwitch.new(object_name, method, @template, options.with_defaults(object: @object, label: label_text(method))).render(&block)
|
236
|
+
end
|
212
237
|
end
|
213
238
|
alias switch switch_field
|
214
239
|
|
215
240
|
def text_area(method, **options, &block)
|
216
|
-
ShoelaceTextArea.new(object_name, method, @template, options.with_defaults(object: @object, label: method
|
241
|
+
ShoelaceTextArea.new(object_name, method, @template, options.with_defaults(object: @object, label: label_text(method), resize: 'auto')).render(&block)
|
217
242
|
end
|
218
243
|
|
219
244
|
def check_box(method, options = {}, checked_value = "1", unchecked_value = "0", &block)
|
220
|
-
ShoelaceCheckBox.new(object_name, method, @template, checked_value, unchecked_value, options.merge(object: @object)).render(&block)
|
245
|
+
ShoelaceCheckBox.new(object_name, method, @template, checked_value, unchecked_value, options.with_defaults(label: label_text(method)).merge(object: @object)).render(&block)
|
221
246
|
end
|
222
247
|
|
223
248
|
def select(method, choices = nil, options = {}, html_options = {}, &block)
|
224
|
-
ShoelaceSelect.new(object_name, method, @template, choices, options.with_defaults(object: @object), html_options.with_defaults(label: method
|
249
|
+
ShoelaceSelect.new(object_name, method, @template, choices, options.with_defaults(object: @object), html_options.with_defaults(label: label_text(method)), &block).render
|
225
250
|
end
|
226
251
|
|
227
252
|
def collection_select(method, collection, value_method, text_method, options = {}, html_options = {}, &block)
|
228
|
-
ShoelaceCollectionSelect.new(object_name, method, @template, collection, value_method, text_method, options.with_defaults(object: @object), html_options.with_defaults(label: method
|
253
|
+
ShoelaceCollectionSelect.new(object_name, method, @template, collection, value_method, text_method, options.with_defaults(object: @object), html_options.with_defaults(label: label_text(method)), &block).render
|
254
|
+
end
|
255
|
+
|
256
|
+
def grouped_collection_select(method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})
|
257
|
+
ShoelaceGroupedCollectionSelect.new(object_name, method, @template, collection, group_method, group_label_method, option_key_method, option_value_method, options.with_defaults(object: @object), html_options.with_defaults(label: label_text(method))).render
|
229
258
|
end
|
230
259
|
|
231
260
|
def collection_radio_buttons(method, collection, value_method, text_method, options = {}, html_options = {}, &block)
|
232
|
-
ShoelaceCollectionRadioButtons.new(object_name, method, @template, collection, value_method, text_method, options.with_defaults(object: @object), html_options).render(&block)
|
261
|
+
ShoelaceCollectionRadioButtons.new(object_name, method, @template, collection, value_method, text_method, options.with_defaults(object: @object, label: label_text(method)), html_options).render(&block)
|
233
262
|
end
|
234
263
|
|
235
264
|
def submit(value = nil, options = {})
|
@@ -237,6 +266,12 @@ module Shoelace
|
|
237
266
|
|
238
267
|
@template.sl_submit_tag(value || submit_default_value, **options)
|
239
268
|
end
|
269
|
+
|
270
|
+
private
|
271
|
+
|
272
|
+
def label_text(method, tag_value = nil)
|
273
|
+
::ActionView::Helpers::Tags::Label::LabelBuilder.new(@template, object_name, method, object, tag_value).translation
|
274
|
+
end
|
240
275
|
end
|
241
276
|
|
242
277
|
DEFAULT_FORM_PARAMETERS = { builder: ShoelaceFormBuilder }
|
@@ -307,6 +342,20 @@ module Shoelace
|
|
307
342
|
end.join("\n").html_safe
|
308
343
|
end
|
309
344
|
|
345
|
+
def sl_option_groups_from_collection_for_select(collection, group_method, group_label_method, option_key_method, option_value_method, selected_key = nil)
|
346
|
+
body = "".html_safe
|
347
|
+
|
348
|
+
collection.each_with_index do |group, index|
|
349
|
+
option_tags = sl_options_from_collection_for_select(value_for_collection(group, group_method), option_key_method, option_value_method, selected_key)
|
350
|
+
|
351
|
+
body.safe_concat(DIVIDER_TAG) if index > 0
|
352
|
+
body.safe_concat(content_tag("small", value_for_collection(group, group_label_method)))
|
353
|
+
body.safe_concat(option_tags)
|
354
|
+
end
|
355
|
+
|
356
|
+
body
|
357
|
+
end
|
358
|
+
|
310
359
|
# Returns a string of +<sl-option>+ tags compiled by iterating over the collection and assigning the result of
|
311
360
|
# a call to the +value_method+ as the option value and the +text_method+ as the option text.
|
312
361
|
def sl_options_from_collection_for_select(collection, value_method, text_method, selected = nil)
|
data/gemfiles/rails_60.gemfile
CHANGED
data/gemfiles/rails_61.gemfile
CHANGED
data/gemfiles/rails_70.gemfile
CHANGED
data/gemfiles/rails_edge.gemfile
CHANGED
data/shoelace-rails.gemspec
CHANGED
@@ -31,5 +31,5 @@ Gem::Specification.new do |spec|
|
|
31
31
|
|
32
32
|
spec.add_development_dependency "appraisal"
|
33
33
|
spec.add_development_dependency "minitest", ">= 5.14.4"
|
34
|
-
spec.add_development_dependency "rails-dom-testing", ">= 2.0
|
34
|
+
spec.add_development_dependency "rails-dom-testing", ">= 2.2.0"
|
35
35
|
end
|
@@ -46,7 +46,7 @@ class FormHelperTest < ActionView::TestCase
|
|
46
46
|
|
47
47
|
test "#sl_radio_button" do
|
48
48
|
assert_dom_equal(<<~HTML, sl_radio_button(:user, :name, 'userid-314', checked: true) { "Yuki Nishijima" })
|
49
|
-
<sl-radio value="userid-314" checked="checked"
|
49
|
+
<sl-radio value="userid-314" checked="checked" id="user_name_userid-314">Yuki Nishijima</sl-radio>
|
50
50
|
HTML
|
51
51
|
end
|
52
52
|
|
@@ -149,7 +149,7 @@ class FormHelperTest < ActionView::TestCase
|
|
149
149
|
test "#color_field" do
|
150
150
|
sl_form_for(User.new, url: "/") do |form|
|
151
151
|
assert_dom_equal <<~HTML, form.color_field(:name)
|
152
|
-
<sl-color-picker name="user[name]" id="user_name"></sl-color-picker>
|
152
|
+
<sl-color-picker name="user[name]" id="user_name" label="Name"></sl-color-picker>
|
153
153
|
HTML
|
154
154
|
end
|
155
155
|
end
|
@@ -412,7 +412,7 @@ class FormHelperTest < ActionView::TestCase
|
|
412
412
|
end
|
413
413
|
end
|
414
414
|
|
415
|
-
test "#collection_select with a
|
415
|
+
test "#collection_select with a default value" do
|
416
416
|
users = {
|
417
417
|
1 => "Yuki Nishijima",
|
418
418
|
2 => "Matz",
|
@@ -430,6 +430,35 @@ class FormHelperTest < ActionView::TestCase
|
|
430
430
|
end
|
431
431
|
end
|
432
432
|
|
433
|
+
test "#grouped_collection_select" do
|
434
|
+
users = [
|
435
|
+
OpenStruct.new(
|
436
|
+
group_name: "Main maintainers",
|
437
|
+
members: [
|
438
|
+
OpenStruct.new(id: 1, name: "Matz"),
|
439
|
+
OpenStruct.new(id: 2, name: "Koichi Sasada"),
|
440
|
+
]
|
441
|
+
),
|
442
|
+
OpenStruct.new(
|
443
|
+
group_name: "Default gem maintainers",
|
444
|
+
members: [OpenStruct.new(id: 3, name: "Yuki Nishijima")]
|
445
|
+
),
|
446
|
+
]
|
447
|
+
|
448
|
+
sl_form_for(User.new(name: "2"), url: "/") do |form|
|
449
|
+
assert_dom_equal <<~HTML, form.grouped_collection_select(:name, users, :members, :group_name, :id, :name)
|
450
|
+
<sl-select label="Name" name="user[name]" id="user_name" value="2">
|
451
|
+
<small>Main maintainers</small>
|
452
|
+
<sl-option value="1">Matz</sl-option>
|
453
|
+
<sl-option value="2" checked="checked">Koichi Sasada</sl-option>
|
454
|
+
<sl-divider></sl-divider>
|
455
|
+
<small>Default gem maintainers</small>
|
456
|
+
<sl-option value="3">Yuki Nishijima</sl-option>
|
457
|
+
</sl-select>
|
458
|
+
HTML
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
433
462
|
test "#collection_radio_buttons" do
|
434
463
|
users = {
|
435
464
|
1 => "Yuki Nishijima",
|
@@ -439,10 +468,10 @@ class FormHelperTest < ActionView::TestCase
|
|
439
468
|
|
440
469
|
sl_form_for(User.new, url: "/") do |form|
|
441
470
|
assert_dom_equal <<~HTML, form.collection_radio_buttons(:name, users, :first, :last)
|
442
|
-
<sl-radio-group label="Name">
|
443
|
-
<sl-radio
|
444
|
-
<sl-radio
|
445
|
-
<sl-radio
|
471
|
+
<sl-radio-group label="Name" name="user[name]" id="user_name">
|
472
|
+
<sl-radio value="1" id="user_name_1">Yuki Nishijima</sl-radio>
|
473
|
+
<sl-radio value="2" id="user_name_2">Matz</sl-radio>
|
474
|
+
<sl-radio value="3" id="user_name_3">Koichi Sasada</sl-radio>
|
446
475
|
</sl-radio-group>
|
447
476
|
HTML
|
448
477
|
end
|
@@ -457,10 +486,10 @@ class FormHelperTest < ActionView::TestCase
|
|
457
486
|
|
458
487
|
sl_form_for(User.new(name: 1), url: "/") do |form|
|
459
488
|
assert_dom_equal <<~HTML, form.collection_radio_buttons(:name, users, :first, :last)
|
460
|
-
<sl-radio-group label="Name">
|
461
|
-
<sl-radio
|
462
|
-
<sl-radio
|
463
|
-
<sl-radio
|
489
|
+
<sl-radio-group label="Name" name="user[name]" value="1" id="user_name">
|
490
|
+
<sl-radio value="1" id="user_name_1">Yuki Nishijima</sl-radio>
|
491
|
+
<sl-radio value="2" id="user_name_2">Matz</sl-radio>
|
492
|
+
<sl-radio value="3" id="user_name_3">Koichi Sasada</sl-radio>
|
464
493
|
</sl-radio-group>
|
465
494
|
HTML
|
466
495
|
end
|