simple_form 5.0.3 → 5.2.0

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.
@@ -1,10 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Please do not make direct changes to this file!
4
- # This generator is maintained by the community around simple_form-bootstrap:
5
- # https://github.com/rafaelfranca/simple_form-bootstrap
6
- # All future development, tests, and organization should happen there.
7
- # Background history: https://github.com/heartcombo/simple_form/issues/1561
3
+ # These defaults are defined and maintained by the community at
4
+ # https://github.com/heartcombo/simple_form-bootstrap
5
+ # Please submit feedback, changes and tests only there.
8
6
 
9
7
  # Uncomment this and change the path if necessary to include your own
10
8
  # components.
@@ -49,7 +47,7 @@ SimpleForm.setup do |config|
49
47
  # vertical forms
50
48
  #
51
49
  # vertical default_wrapper
52
- config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
50
+ config.wrappers :vertical_form, class: 'mb-3' do |b|
53
51
  b.use :html5
54
52
  b.use :placeholder
55
53
  b.optional :maxlength
@@ -57,90 +55,100 @@ SimpleForm.setup do |config|
57
55
  b.optional :pattern
58
56
  b.optional :min_max
59
57
  b.optional :readonly
60
- b.use :label
58
+ b.use :label, class: 'form-label'
61
59
  b.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
62
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
63
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
60
+ b.use :full_error, wrap_with: { class: 'invalid-feedback' }
61
+ b.use :hint, wrap_with: { class: 'form-text' }
64
62
  end
65
63
 
66
64
  # vertical input for boolean
67
- config.wrappers :vertical_boolean, tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
65
+ config.wrappers :vertical_boolean, tag: 'fieldset', class: 'mb-3' do |b|
68
66
  b.use :html5
69
67
  b.optional :readonly
70
- b.wrapper :form_check_wrapper, tag: 'div', class: 'form-check' do |bb|
68
+ b.wrapper :form_check_wrapper, class: 'form-check' do |bb|
71
69
  bb.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
72
70
  bb.use :label, class: 'form-check-label'
73
- bb.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
74
- bb.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
71
+ bb.use :full_error, wrap_with: { class: 'invalid-feedback' }
72
+ bb.use :hint, wrap_with: { class: 'form-text' }
75
73
  end
76
74
  end
77
75
 
78
76
  # vertical input for radio buttons and check boxes
79
- config.wrappers :vertical_collection, item_wrapper_class: 'form-check', item_label_class: 'form-check-label', tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
77
+ config.wrappers :vertical_collection, item_wrapper_class: 'form-check', item_label_class: 'form-check-label', tag: 'fieldset', class: 'mb-3' do |b|
80
78
  b.use :html5
81
79
  b.optional :readonly
82
80
  b.wrapper :legend_tag, tag: 'legend', class: 'col-form-label pt-0' do |ba|
83
81
  ba.use :label_text
84
82
  end
85
83
  b.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
86
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
87
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
84
+ b.use :full_error, wrap_with: { class: 'invalid-feedback d-block' }
85
+ b.use :hint, wrap_with: { class: 'form-text' }
88
86
  end
89
87
 
90
88
  # vertical input for inline radio buttons and check boxes
91
- config.wrappers :vertical_collection_inline, item_wrapper_class: 'form-check form-check-inline', item_label_class: 'form-check-label', tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
89
+ config.wrappers :vertical_collection_inline, item_wrapper_class: 'form-check form-check-inline', item_label_class: 'form-check-label', tag: 'fieldset', class: 'mb-3' do |b|
92
90
  b.use :html5
93
91
  b.optional :readonly
94
92
  b.wrapper :legend_tag, tag: 'legend', class: 'col-form-label pt-0' do |ba|
95
93
  ba.use :label_text
96
94
  end
97
95
  b.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
98
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
99
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
96
+ b.use :full_error, wrap_with: { class: 'invalid-feedback d-block' }
97
+ b.use :hint, wrap_with: { class: 'form-text' }
100
98
  end
101
99
 
102
100
  # vertical file input
103
- config.wrappers :vertical_file, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
101
+ config.wrappers :vertical_file, class: 'mb-3' do |b|
104
102
  b.use :html5
105
103
  b.use :placeholder
106
104
  b.optional :maxlength
107
105
  b.optional :minlength
108
106
  b.optional :readonly
109
- b.use :label
110
- b.use :input, class: 'form-control-file', error_class: 'is-invalid', valid_class: 'is-valid'
111
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
112
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
107
+ b.use :label, class: 'form-label'
108
+ b.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
109
+ b.use :full_error, wrap_with: { class: 'invalid-feedback' }
110
+ b.use :hint, wrap_with: { class: 'form-text' }
111
+ end
112
+
113
+ # vertical select input
114
+ config.wrappers :vertical_select, class: 'mb-3' do |b|
115
+ b.use :html5
116
+ b.optional :readonly
117
+ b.use :label, class: 'form-label'
118
+ b.use :input, class: 'form-select', error_class: 'is-invalid', valid_class: 'is-valid'
119
+ b.use :full_error, wrap_with: { class: 'invalid-feedback' }
120
+ b.use :hint, wrap_with: { class: 'form-text' }
113
121
  end
114
122
 
115
123
  # vertical multi select
116
- config.wrappers :vertical_multi_select, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
124
+ config.wrappers :vertical_multi_select, class: 'mb-3' do |b|
117
125
  b.use :html5
118
126
  b.optional :readonly
119
- b.use :label
120
- b.wrapper tag: 'div', class: 'd-flex flex-row justify-content-between align-items-center' do |ba|
121
- ba.use :input, class: 'form-control mx-1', error_class: 'is-invalid', valid_class: 'is-valid'
127
+ b.use :label, class: 'form-label'
128
+ b.wrapper class: 'd-flex flex-row justify-content-between align-items-center' do |ba|
129
+ ba.use :input, class: 'form-select mx-1', error_class: 'is-invalid', valid_class: 'is-valid'
122
130
  end
123
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
124
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
131
+ b.use :full_error, wrap_with: { class: 'invalid-feedback d-block' }
132
+ b.use :hint, wrap_with: { class: 'form-text' }
125
133
  end
126
134
 
127
135
  # vertical range input
128
- config.wrappers :vertical_range, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
136
+ config.wrappers :vertical_range, class: 'mb-3' do |b|
129
137
  b.use :html5
130
138
  b.use :placeholder
131
139
  b.optional :readonly
132
140
  b.optional :step
133
- b.use :label
134
- b.use :input, class: 'form-control-range', error_class: 'is-invalid', valid_class: 'is-valid'
135
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
136
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
141
+ b.use :label, class: 'form-label'
142
+ b.use :input, class: 'form-range', error_class: 'is-invalid', valid_class: 'is-valid'
143
+ b.use :full_error, wrap_with: { class: 'invalid-feedback' }
144
+ b.use :hint, wrap_with: { class: 'form-text' }
137
145
  end
138
146
 
139
147
 
140
148
  # horizontal forms
141
149
  #
142
150
  # horizontal default_wrapper
143
- config.wrappers :horizontal_form, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
151
+ config.wrappers :horizontal_form, class: 'row mb-3' do |b|
144
152
  b.use :html5
145
153
  b.use :placeholder
146
154
  b.optional :maxlength
@@ -149,94 +157,103 @@ SimpleForm.setup do |config|
149
157
  b.optional :min_max
150
158
  b.optional :readonly
151
159
  b.use :label, class: 'col-sm-3 col-form-label'
152
- b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
160
+ b.wrapper :grid_wrapper, class: 'col-sm-9' do |ba|
153
161
  ba.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
154
- ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
155
- ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
162
+ ba.use :full_error, wrap_with: { class: 'invalid-feedback' }
163
+ ba.use :hint, wrap_with: { class: 'form-text' }
156
164
  end
157
165
  end
158
166
 
159
167
  # horizontal input for boolean
160
- config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
168
+ config.wrappers :horizontal_boolean, class: 'row mb-3' do |b|
161
169
  b.use :html5
162
170
  b.optional :readonly
163
- b.wrapper tag: 'label', class: 'col-sm-3' do |ba|
164
- ba.use :label_text
165
- end
166
- b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |wr|
167
- wr.wrapper :form_check_wrapper, tag: 'div', class: 'form-check' do |bb|
171
+ b.wrapper :grid_wrapper, class: 'col-sm-9 offset-sm-3' do |wr|
172
+ wr.wrapper :form_check_wrapper, class: 'form-check' do |bb|
168
173
  bb.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
169
174
  bb.use :label, class: 'form-check-label'
170
- bb.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
171
- bb.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
175
+ bb.use :full_error, wrap_with: { class: 'invalid-feedback' }
176
+ bb.use :hint, wrap_with: { class: 'form-text' }
172
177
  end
173
178
  end
174
179
  end
175
180
 
176
181
  # horizontal input for radio buttons and check boxes
177
- config.wrappers :horizontal_collection, item_wrapper_class: 'form-check', item_label_class: 'form-check-label', tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
182
+ config.wrappers :horizontal_collection, item_wrapper_class: 'form-check', item_label_class: 'form-check-label', class: 'row mb-3' do |b|
178
183
  b.use :html5
179
184
  b.optional :readonly
180
185
  b.use :label, class: 'col-sm-3 col-form-label pt-0'
181
- b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
186
+ b.wrapper :grid_wrapper, class: 'col-sm-9' do |ba|
182
187
  ba.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
183
- ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
184
- ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
188
+ ba.use :full_error, wrap_with: { class: 'invalid-feedback d-block' }
189
+ ba.use :hint, wrap_with: { class: 'form-text' }
185
190
  end
186
191
  end
187
192
 
188
193
  # horizontal input for inline radio buttons and check boxes
189
- config.wrappers :horizontal_collection_inline, item_wrapper_class: 'form-check form-check-inline', item_label_class: 'form-check-label', tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
194
+ config.wrappers :horizontal_collection_inline, item_wrapper_class: 'form-check form-check-inline', item_label_class: 'form-check-label', class: 'row mb-3' do |b|
190
195
  b.use :html5
191
196
  b.optional :readonly
192
197
  b.use :label, class: 'col-sm-3 col-form-label pt-0'
193
- b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
198
+ b.wrapper :grid_wrapper, class: 'col-sm-9' do |ba|
194
199
  ba.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
195
- ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
196
- ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
200
+ ba.use :full_error, wrap_with: { class: 'invalid-feedback d-block' }
201
+ ba.use :hint, wrap_with: { class: 'form-text' }
197
202
  end
198
203
  end
199
204
 
200
205
  # horizontal file input
201
- config.wrappers :horizontal_file, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
206
+ config.wrappers :horizontal_file, class: 'row mb-3' do |b|
202
207
  b.use :html5
203
208
  b.use :placeholder
204
209
  b.optional :maxlength
205
210
  b.optional :minlength
206
211
  b.optional :readonly
207
212
  b.use :label, class: 'col-sm-3 col-form-label'
208
- b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
209
- ba.use :input, error_class: 'is-invalid', valid_class: 'is-valid'
210
- ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
211
- ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
213
+ b.wrapper :grid_wrapper, class: 'col-sm-9' do |ba|
214
+ ba.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
215
+ ba.use :full_error, wrap_with: { class: 'invalid-feedback' }
216
+ ba.use :hint, wrap_with: { class: 'form-text' }
217
+ end
218
+ end
219
+
220
+ # horizontal select input
221
+ config.wrappers :horizontal_select, class: 'row mb-3' do |b|
222
+ b.use :html5
223
+ b.optional :readonly
224
+ b.use :label, class: 'col-sm-3 col-form-label'
225
+ b.wrapper :grid_wrapper, class: 'col-sm-9' do |ba|
226
+ ba.use :input, class: 'form-select', error_class: 'is-invalid', valid_class: 'is-valid'
227
+ ba.use :full_error, wrap_with: { class: 'invalid-feedback' }
228
+ ba.use :hint, wrap_with: { class: 'form-text' }
212
229
  end
213
230
  end
214
231
 
215
232
  # horizontal multi select
216
- config.wrappers :horizontal_multi_select, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
233
+ config.wrappers :horizontal_multi_select, class: 'row mb-3' do |b|
217
234
  b.use :html5
218
235
  b.optional :readonly
219
236
  b.use :label, class: 'col-sm-3 col-form-label'
220
- b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
221
- ba.wrapper tag: 'div', class: 'd-flex flex-row justify-content-between align-items-center' do |bb|
222
- bb.use :input, class: 'form-control mx-1', error_class: 'is-invalid', valid_class: 'is-valid'
237
+ b.wrapper :grid_wrapper, class: 'col-sm-9' do |ba|
238
+ ba.wrapper class: 'd-flex flex-row justify-content-between align-items-center' do |bb|
239
+ bb.use :input, class: 'form-select mx-1', error_class: 'is-invalid', valid_class: 'is-valid'
223
240
  end
224
- ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
225
- ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
241
+ ba.use :full_error, wrap_with: { class: 'invalid-feedback d-block' }
242
+ ba.use :hint, wrap_with: { class: 'form-text' }
226
243
  end
227
244
  end
228
245
 
229
246
  # horizontal range input
230
- config.wrappers :horizontal_range, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
247
+ config.wrappers :horizontal_range, class: 'row mb-3' do |b|
231
248
  b.use :html5
232
249
  b.use :placeholder
233
250
  b.optional :readonly
234
251
  b.optional :step
235
- b.use :label, class: 'col-sm-3 col-form-label'
236
- b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
237
- ba.use :input, class: 'form-control-range', error_class: 'is-invalid', valid_class: 'is-valid'
238
- ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
239
- ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
252
+ b.use :label, class: 'col-sm-3 col-form-label pt-0'
253
+ b.wrapper :grid_wrapper, class: 'col-sm-9' do |ba|
254
+ ba.use :input, class: 'form-range', error_class: 'is-invalid', valid_class: 'is-valid'
255
+ ba.use :full_error, wrap_with: { class: 'invalid-feedback' }
256
+ ba.use :hint, wrap_with: { class: 'form-text' }
240
257
  end
241
258
  end
242
259
 
@@ -244,7 +261,7 @@ SimpleForm.setup do |config|
244
261
  # inline forms
245
262
  #
246
263
  # inline default_wrapper
247
- config.wrappers :inline_form, tag: 'span', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
264
+ config.wrappers :inline_form, class: 'col-12' do |b|
248
265
  b.use :html5
249
266
  b.use :placeholder
250
267
  b.optional :maxlength
@@ -252,140 +269,66 @@ SimpleForm.setup do |config|
252
269
  b.optional :pattern
253
270
  b.optional :min_max
254
271
  b.optional :readonly
255
- b.use :label, class: 'sr-only'
272
+ b.use :label, class: 'visually-hidden'
256
273
 
257
274
  b.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
258
- b.use :error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
259
- b.optional :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
275
+ b.use :error, wrap_with: { class: 'invalid-feedback' }
276
+ b.optional :hint, wrap_with: { class: 'form-text' }
260
277
  end
261
278
 
262
279
  # inline input for boolean
263
- config.wrappers :inline_boolean, tag: 'span', class: 'form-check mb-2 mr-sm-2', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
280
+ config.wrappers :inline_boolean, class: 'col-12' do |b|
264
281
  b.use :html5
265
282
  b.optional :readonly
266
- b.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
267
- b.use :label, class: 'form-check-label'
268
- b.use :error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
269
- b.optional :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
283
+ b.wrapper :form_check_wrapper, class: 'form-check' do |bb|
284
+ bb.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
285
+ bb.use :label, class: 'form-check-label'
286
+ bb.use :error, wrap_with: { class: 'invalid-feedback' }
287
+ bb.optional :hint, wrap_with: { class: 'form-text' }
288
+ end
270
289
  end
271
290
 
272
291
 
273
292
  # bootstrap custom forms
274
293
  #
275
- # custom input for boolean
276
- config.wrappers :custom_boolean, tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
277
- b.use :html5
278
- b.optional :readonly
279
- b.wrapper :form_check_wrapper, tag: 'div', class: 'custom-control custom-checkbox' do |bb|
280
- bb.use :input, class: 'custom-control-input', error_class: 'is-invalid', valid_class: 'is-valid'
281
- bb.use :label, class: 'custom-control-label'
282
- bb.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
283
- bb.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
284
- end
285
- end
286
-
287
294
  # custom input switch for boolean
288
- config.wrappers :custom_boolean_switch, tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
295
+ config.wrappers :custom_boolean_switch, class: 'mb-3' do |b|
289
296
  b.use :html5
290
297
  b.optional :readonly
291
- b.wrapper :form_check_wrapper, tag: 'div', class: 'custom-control custom-switch' do |bb|
292
- bb.use :input, class: 'custom-control-input', error_class: 'is-invalid', valid_class: 'is-valid'
293
- bb.use :label, class: 'custom-control-label'
298
+ b.wrapper :form_check_wrapper, tag: 'div', class: 'form-check form-switch' do |bb|
299
+ bb.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
300
+ bb.use :label, class: 'form-check-label'
294
301
  bb.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
295
- bb.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
302
+ bb.use :hint, wrap_with: { class: 'form-text' }
296
303
  end
297
304
  end
298
305
 
299
- # custom input for radio buttons and check boxes
300
- config.wrappers :custom_collection, item_wrapper_class: 'custom-control', item_label_class: 'custom-control-label', tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
301
- b.use :html5
302
- b.optional :readonly
303
- b.wrapper :legend_tag, tag: 'legend', class: 'col-form-label pt-0' do |ba|
304
- ba.use :label_text
305
- end
306
- b.use :input, class: 'custom-control-input', error_class: 'is-invalid', valid_class: 'is-valid'
307
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
308
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
309
- end
310
306
 
311
- # custom input for inline radio buttons and check boxes
312
- config.wrappers :custom_collection_inline, item_wrapper_class: 'custom-control custom-control-inline', item_label_class: 'custom-control-label', tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
313
- b.use :html5
314
- b.optional :readonly
315
- b.wrapper :legend_tag, tag: 'legend', class: 'col-form-label pt-0' do |ba|
316
- ba.use :label_text
317
- end
318
- b.use :input, class: 'custom-control-input', error_class: 'is-invalid', valid_class: 'is-valid'
319
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
320
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
321
- end
322
-
323
- # custom file input
324
- config.wrappers :custom_file, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
307
+ # Input Group - custom component
308
+ # see example app and config at https://github.com/heartcombo/simple_form-bootstrap
309
+ config.wrappers :input_group, class: 'mb-3' do |b|
325
310
  b.use :html5
326
311
  b.use :placeholder
327
312
  b.optional :maxlength
328
313
  b.optional :minlength
314
+ b.optional :pattern
315
+ b.optional :min_max
329
316
  b.optional :readonly
330
- b.use :label
331
- b.wrapper :custom_file_wrapper, tag: 'div', class: 'custom-file' do |ba|
332
- ba.use :input, class: 'custom-file-input', error_class: 'is-invalid', valid_class: 'is-valid'
333
- ba.use :label, class: 'custom-file-label'
334
- ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
335
- end
336
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
337
- end
338
-
339
- # custom multi select
340
- config.wrappers :custom_multi_select, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
341
- b.use :html5
342
- b.optional :readonly
343
- b.use :label
344
- b.wrapper tag: 'div', class: 'd-flex flex-row justify-content-between align-items-center' do |ba|
345
- ba.use :input, class: 'custom-select mx-1', error_class: 'is-invalid', valid_class: 'is-valid'
317
+ b.use :label, class: 'form-label'
318
+ b.wrapper :input_group_tag, class: 'input-group' do |ba|
319
+ ba.optional :prepend
320
+ ba.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
321
+ ba.optional :append
322
+ ba.use :full_error, wrap_with: { class: 'invalid-feedback' }
346
323
  end
347
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
348
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
349
- end
350
-
351
- # custom range input
352
- config.wrappers :custom_range, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
353
- b.use :html5
354
- b.use :placeholder
355
- b.optional :readonly
356
- b.optional :step
357
- b.use :label
358
- b.use :input, class: 'custom-range', error_class: 'is-invalid', valid_class: 'is-valid'
359
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
360
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
324
+ b.use :hint, wrap_with: { class: 'form-text' }
361
325
  end
362
326
 
363
327
 
364
- # Input Group - custom component
365
- # see example app and config at https://github.com/rafaelfranca/simple_form-bootstrap
366
- # config.wrappers :input_group, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
367
- # b.use :html5
368
- # b.use :placeholder
369
- # b.optional :maxlength
370
- # b.optional :minlength
371
- # b.optional :pattern
372
- # b.optional :min_max
373
- # b.optional :readonly
374
- # b.use :label
375
- # b.wrapper :input_group_tag, tag: 'div', class: 'input-group' do |ba|
376
- # ba.optional :prepend
377
- # ba.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
378
- # ba.optional :append
379
- # end
380
- # b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
381
- # b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
382
- # end
383
-
384
-
385
328
  # Floating Labels form
386
329
  #
387
330
  # floating labels default_wrapper
388
- config.wrappers :floating_labels_form, tag: 'div', class: 'form-label-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
331
+ config.wrappers :floating_labels_form, class: 'form-floating mb-3' do |b|
389
332
  b.use :html5
390
333
  b.use :placeholder
391
334
  b.optional :maxlength
@@ -395,18 +338,18 @@ SimpleForm.setup do |config|
395
338
  b.optional :readonly
396
339
  b.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
397
340
  b.use :label
398
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
399
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
341
+ b.use :full_error, wrap_with: { class: 'invalid-feedback' }
342
+ b.use :hint, wrap_with: { class: 'form-text' }
400
343
  end
401
344
 
402
345
  # custom multi select
403
- config.wrappers :floating_labels_select, tag: 'div', class: 'form-label-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
346
+ config.wrappers :floating_labels_select, class: 'form-floating mb-3' do |b|
404
347
  b.use :html5
405
348
  b.optional :readonly
406
- b.use :input, class: 'custom-select', error_class: 'is-invalid', valid_class: 'is-valid'
349
+ b.use :input, class: 'form-select', error_class: 'is-invalid', valid_class: 'is-valid'
407
350
  b.use :label
408
- b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
409
- b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
351
+ b.use :full_error, wrap_with: { class: 'invalid-feedback' }
352
+ b.use :hint, wrap_with: { class: 'form-text' }
410
353
  end
411
354
 
412
355
 
@@ -423,18 +366,7 @@ SimpleForm.setup do |config|
423
366
  file: :vertical_file,
424
367
  radio_buttons: :vertical_collection,
425
368
  range: :vertical_range,
426
- time: :vertical_multi_select
369
+ time: :vertical_multi_select,
370
+ select: :vertical_select
427
371
  }
428
-
429
- # enable custom form wrappers
430
- # config.wrapper_mappings = {
431
- # boolean: :custom_boolean,
432
- # check_boxes: :custom_collection,
433
- # date: :custom_multi_select,
434
- # datetime: :custom_multi_select,
435
- # file: :custom_file,
436
- # radio_buttons: :custom_collection,
437
- # range: :custom_range,
438
- # time: :custom_multi_select
439
- # }
440
372
  end
@@ -6,11 +6,9 @@ module SimpleForm
6
6
 
7
7
  module ClassMethods #:nodoc:
8
8
  def translate_required_html
9
- i18n_cache :translate_required_html do
10
- I18n.t(:"required.html", scope: i18n_scope, default:
11
- %(<abbr title="#{translate_required_text}">#{translate_required_mark}</abbr>)
12
- )
13
- end
9
+ I18n.t(:"required.html", scope: i18n_scope, default:
10
+ %(<abbr title="#{translate_required_text}">#{translate_required_mark}</abbr>)
11
+ )
14
12
  end
15
13
 
16
14
  def translate_required_text
@@ -24,10 +24,6 @@ module SimpleForm
24
24
  find_validator(:length)
25
25
  end
26
26
 
27
- def has_tokenizer?(length_validator)
28
- length_validator.options[:tokenizer]
29
- end
30
-
31
27
  def maximum_length_value_from(length_validator)
32
28
  if length_validator
33
29
  length_validator.options[:is] || length_validator.options[:maximum]
@@ -24,10 +24,6 @@ module SimpleForm
24
24
  find_validator(:length)
25
25
  end
26
26
 
27
- def has_tokenizer?(length_validator)
28
- length_validator.options[:tokenizer]
29
- end
30
-
31
27
  def minimum_length_value_from(length_validator)
32
28
  if length_validator
33
29
  length_validator.options[:is] || length_validator.options[:minimum]
@@ -497,7 +497,7 @@ module SimpleForm
497
497
  conditions = reflection.options[:conditions]
498
498
  conditions = object.instance_exec(&conditions) if conditions.respond_to?(:call)
499
499
 
500
- relation = relation.where(conditions) if relation.respond_to?(:where)
500
+ relation = relation.where(conditions) if relation.respond_to?(:where) && conditions.present?
501
501
  relation = relation.order(order) if relation.respond_to?(:order)
502
502
  end
503
503
 
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require 'simple_form/i18n_cache'
3
2
  require 'active_support/core_ext/string/output_safety'
4
3
  require 'action_view/helpers'
5
4
 
@@ -9,8 +8,6 @@ module SimpleForm
9
8
  include ERB::Util
10
9
  include ActionView::Helpers::TranslationHelper
11
10
 
12
- extend I18nCache
13
-
14
11
  include SimpleForm::Helpers::Autofocus
15
12
  include SimpleForm::Helpers::Disabled
16
13
  include SimpleForm::Helpers::Readonly
@@ -12,7 +12,11 @@ module SimpleForm
12
12
  inline_label
13
13
  }
14
14
  else
15
- build_check_box(unchecked_value, merged_input_options)
15
+ if include_hidden?
16
+ build_check_box(unchecked_value, merged_input_options)
17
+ else
18
+ build_check_box_without_hidden_field(merged_input_options)
19
+ end
16
20
  end
17
21
  end
18
22
 
@@ -60,7 +64,7 @@ module SimpleForm
60
64
  # we need the hidden field to be *outside* the label (otherwise it
61
65
  # generates invalid html - html5 only).
62
66
  def build_hidden_field_for_checkbox
63
- return "" if !include_hidden? || !unchecked_value
67
+ return "".html_safe if !include_hidden? || !unchecked_value
64
68
  options = { value: unchecked_value, id: nil, disabled: input_html_options[:disabled] }
65
69
  options[:name] = input_html_options[:name] if input_html_options.key?(:name)
66
70
  options[:form] = input_html_options[:form] if input_html_options.key?(:form)
@@ -10,10 +10,8 @@ module SimpleForm
10
10
  # Texts can be translated using i18n in "simple_form.yes" and
11
11
  # "simple_form.no" keys. See the example locale file.
12
12
  def self.boolean_collection
13
- i18n_cache :boolean_collection do
14
- [ [I18n.t(:"simple_form.yes", default: 'Yes'), true],
15
- [I18n.t(:"simple_form.no", default: 'No'), false] ]
16
- end
13
+ [ [I18n.t(:"simple_form.yes", default: 'Yes'), true],
14
+ [I18n.t(:"simple_form.no", default: 'No'), false] ]
17
15
  end
18
16
 
19
17
  def input(wrapper_options = nil)
@@ -23,7 +23,7 @@ module SimpleForm
23
23
 
24
24
  # Sample collection
25
25
  def collection
26
- @collection ||= grouped_collection.map { |collection| collection.try(:send, group_method) }.detect(&:present?) || []
26
+ @collection ||= grouped_collection.map { |collection| group_method.respond_to?(:call) ? group_method.call(collection) : collection.try(:send, group_method) }.detect(&:present?) || []
27
27
  end
28
28
 
29
29
  def group_method