simple_form 5.0.3 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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