standard_view 0.1.0 → 0.1.1

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +31 -10
  3. data/Rakefile +3 -8
  4. data/app/helpers/standard_view/application_helper.rb +38 -0
  5. data/app/helpers/standard_view/badge_helper.rb +22 -0
  6. data/app/helpers/standard_view/flash_helper.rb +16 -0
  7. data/app/helpers/standard_view/formatting_helper.rb +21 -0
  8. data/app/helpers/standard_view/masthead_helper.rb +27 -0
  9. data/app/helpers/standard_view/navigation_helper.rb +51 -0
  10. data/app/views/application/_attributes_card.html.erb +32 -0
  11. data/app/views/application/_flash_messages.html.erb +7 -0
  12. data/app/views/application/_icon.html.erb +5 -0
  13. data/app/views/application/_javascripts.html.erb +25 -0
  14. data/app/views/application/_list_item.html.erb +11 -0
  15. data/app/views/application/_masthead.html.erb +21 -0
  16. data/app/views/application/_masthead_brand.html.erb +1 -0
  17. data/app/views/application/_masthead_nav.html.erb +6 -0
  18. data/app/views/application/_masthead_nav_items.html.erb +8 -0
  19. data/app/views/application/_masthead_nav_menu.html.erb +8 -0
  20. data/app/views/application/_masthead_nav_menu_icon.html.erb +1 -0
  21. data/app/views/application/_masthead_nav_menu_items.html.erb +10 -0
  22. data/app/views/application/_stylesheet_font_awesome.html.erb +6 -0
  23. data/app/views/application/_stylesheets.html.erb +12 -0
  24. data/app/views/application/index.html.erb +1 -0
  25. data/app/views/application/show.html.erb +1 -0
  26. data/app/views/layouts/standard_view/application.html.erb +8 -7
  27. data/app/views/standard_view/_breadcrumbs.html.erb +48 -0
  28. data/app/views/standard_view/_index.html.erb +83 -0
  29. data/app/views/standard_view/_list_item.html.erb +29 -0
  30. data/app/views/standard_view/_navigation_aside.html.erb +5 -0
  31. data/app/views/standard_view/_navigation_tabs.html.erb +5 -0
  32. data/app/views/standard_view/_page_content.html.erb +8 -0
  33. data/app/views/standard_view/_paginated_collection.html.erb +8 -0
  34. data/app/views/standard_view/_show.html.erb +48 -0
  35. data/config/initializers/material.rb +9 -0
  36. data/config/initializers/simple_form.rb +184 -0
  37. data/config/initializers/simple_form_bootstrap.rb +457 -0
  38. data/config/initializers/will_paginate.rb +57 -0
  39. data/config/locales/en.yml +12 -0
  40. data/lib/standard_view/engine.rb +11 -0
  41. data/lib/standard_view/version.rb +3 -1
  42. data/lib/standard_view.rb +7 -3
  43. metadata +169 -21
  44. data/app/assets/config/standard_view_manifest.js +0 -2
  45. data/app/assets/javascripts/standard_view/application.js +0 -14
  46. data/app/assets/stylesheets/standard_view/application.css +0 -15
  47. data/app/controllers/standard_view/application_controller.rb +0 -5
  48. data/app/jobs/standard_view/application_job.rb +0 -4
  49. data/app/mailers/standard_view/application_mailer.rb +0 -6
  50. data/app/models/standard_view/application_record.rb +0 -5
@@ -0,0 +1,457 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "simple_form"
4
+
5
+ # Please do not make direct changes to this file!
6
+ # This generator is maintained by the community around simple_form-bootstrap:
7
+ # https://github.com/rafaelfranca/simple_form-bootstrap
8
+ # All future development, tests, and organization should happen there.
9
+ # Background history: https://github.com/plataformatec/simple_form/issues/1561
10
+
11
+ # Uncomment this and change the path if necessary to include your own
12
+ # components.
13
+ # See https://github.com/plataformatec/simple_form#custom-components
14
+ # to know more about custom components.
15
+ # Dir[Rails.root.join('lib/components/**/*.rb')].each { |f| require f }
16
+
17
+ # Use this setup block to configure all options available in SimpleForm.
18
+ SimpleForm.setup do |config|
19
+ # Default class for buttons
20
+ config.button_class = 'btn'
21
+
22
+ # Define the default class of the input wrapper of the boolean input.
23
+ config.boolean_label_class = 'form-check-label'
24
+
25
+ # How the label text should be generated altogether with the required text.
26
+ config.label_text = lambda { |label, required, explicit_label| "#{label} #{required}" }
27
+
28
+ # Define the way to render check boxes / radio buttons with labels.
29
+ config.boolean_style = :inline
30
+
31
+ # You can wrap each item in a collection of radio/check boxes with a tag
32
+ config.item_wrapper_tag = :div
33
+
34
+ # Defines if the default input wrapper class should be included in radio
35
+ # collection wrappers.
36
+ config.include_default_input_wrapper_class = false
37
+
38
+ # CSS class to add for error notification helper.
39
+ config.error_notification_class = 'alert alert-danger'
40
+
41
+ # Method used to tidy up errors. Specify any Rails Array method.
42
+ # :first lists the first message for each field.
43
+ # :to_sentence to list all errors for each field.
44
+ config.error_method = :to_sentence
45
+
46
+ # add validation classes to `input_field`
47
+ config.input_field_error_class = 'is-invalid'
48
+ config.input_field_valid_class = 'is-valid'
49
+
50
+
51
+ # vertical forms
52
+ #
53
+ # vertical default_wrapper
54
+ config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
55
+ b.use :html5
56
+ b.use :placeholder
57
+ b.optional :maxlength
58
+ b.optional :minlength
59
+ b.optional :pattern
60
+ b.optional :min_max
61
+ b.optional :readonly
62
+ b.use :label, class: 'form-control-label'
63
+ b.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
64
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
65
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
66
+ end
67
+
68
+ # vertical input for boolean
69
+ config.wrappers :vertical_boolean, tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
70
+ b.use :html5
71
+ b.optional :readonly
72
+ b.wrapper :form_check_wrapper, tag: 'div', class: 'form-check' do |bb|
73
+ bb.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
74
+ bb.use :label, class: 'form-check-label'
75
+ bb.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
76
+ bb.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
77
+ end
78
+ end
79
+
80
+ # vertical input for radio buttons and check boxes
81
+ config.wrappers :vertical_collection, item_wrapper_class: 'form-check', tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
82
+ b.use :html5
83
+ b.optional :readonly
84
+ b.wrapper :legend_tag, tag: 'legend', class: 'col-form-label pt-0' do |ba|
85
+ ba.use :label_text
86
+ end
87
+ b.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
88
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
89
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
90
+ end
91
+
92
+ # vertical input for inline radio buttons and check boxes
93
+ config.wrappers :vertical_collection_inline, item_wrapper_class: 'form-check form-check-inline', tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
94
+ b.use :html5
95
+ b.optional :readonly
96
+ b.wrapper :legend_tag, tag: 'legend', class: 'col-form-label pt-0' do |ba|
97
+ ba.use :label_text
98
+ end
99
+ b.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
100
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
101
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
102
+ end
103
+
104
+ # vertical file input
105
+ config.wrappers :vertical_file, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
106
+ b.use :html5
107
+ b.use :placeholder
108
+ b.optional :maxlength
109
+ b.optional :minlength
110
+ b.optional :readonly
111
+ b.use :label
112
+ b.use :input, class: 'form-control-file', error_class: 'is-invalid', valid_class: 'is-valid'
113
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
114
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
115
+ end
116
+
117
+ # vertical multi select
118
+ config.wrappers :vertical_multi_select, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
119
+ b.use :html5
120
+ b.optional :readonly
121
+ b.use :label, class: 'form-control-label'
122
+ b.wrapper tag: 'div', class: 'd-flex flex-row justify-content-between align-items-center' do |ba|
123
+ ba.use :input, class: 'form-control mx-1', error_class: 'is-invalid', valid_class: 'is-valid'
124
+ end
125
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
126
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
127
+ end
128
+
129
+ # vertical range input
130
+ config.wrappers :vertical_range, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
131
+ b.use :html5
132
+ b.use :placeholder
133
+ b.optional :readonly
134
+ b.optional :step
135
+ b.use :label
136
+ b.use :input, class: 'form-control-range', error_class: 'is-invalid', valid_class: 'is-valid'
137
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
138
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
139
+ end
140
+
141
+
142
+ # horizontal forms
143
+ #
144
+ # horizontal default_wrapper
145
+ config.wrappers :horizontal_form, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
146
+ b.use :html5
147
+ b.use :placeholder
148
+ b.optional :maxlength
149
+ b.optional :minlength
150
+ b.optional :pattern
151
+ b.optional :min_max
152
+ b.optional :readonly
153
+ b.use :label, class: 'col-sm-3 col-form-label'
154
+ b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
155
+ ba.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
156
+ ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
157
+ ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
158
+ end
159
+ end
160
+
161
+ # horizontal input for boolean
162
+ config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
163
+ b.use :html5
164
+ b.optional :readonly
165
+ b.wrapper tag: 'label', class: 'col-sm-3' do |ba|
166
+ ba.use :label_text
167
+ end
168
+ b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |wr|
169
+ wr.wrapper :form_check_wrapper, tag: 'div', class: 'form-check' do |bb|
170
+ bb.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
171
+ bb.use :label, class: 'form-check-label'
172
+ bb.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
173
+ bb.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
174
+ end
175
+ end
176
+ end
177
+
178
+ # horizontal input for radio buttons and check boxes
179
+ config.wrappers :horizontal_collection, item_wrapper_class: 'form-check', tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
180
+ b.use :html5
181
+ b.optional :readonly
182
+ b.use :label, class: 'col-sm-3 form-control-label'
183
+ b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
184
+ ba.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
185
+ ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
186
+ ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
187
+ end
188
+ end
189
+
190
+ # horizontal input for inline radio buttons and check boxes
191
+ config.wrappers :horizontal_collection_inline, item_wrapper_class: 'form-check form-check-inline', tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
192
+ b.use :html5
193
+ b.optional :readonly
194
+ b.use :label, class: 'col-sm-3 form-control-label'
195
+ b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
196
+ ba.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
197
+ ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
198
+ ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
199
+ end
200
+ end
201
+
202
+ # horizontal file input
203
+ config.wrappers :horizontal_file, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
204
+ b.use :html5
205
+ b.use :placeholder
206
+ b.optional :maxlength
207
+ b.optional :minlength
208
+ b.optional :readonly
209
+ b.use :label, class: 'col-sm-3 form-control-label'
210
+ b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
211
+ ba.use :input, error_class: 'is-invalid', valid_class: 'is-valid'
212
+ ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
213
+ ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
214
+ end
215
+ end
216
+
217
+ # horizontal multi select
218
+ config.wrappers :horizontal_multi_select, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
219
+ b.use :html5
220
+ b.optional :readonly
221
+ b.use :label, class: 'col-sm-3 control-label'
222
+ b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
223
+ ba.wrapper tag: 'div', class: 'd-flex flex-row justify-content-between align-items-center' do |bb|
224
+ bb.use :input, class: 'form-control mx-1', error_class: 'is-invalid', valid_class: 'is-valid'
225
+ end
226
+ ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
227
+ ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
228
+ end
229
+ end
230
+
231
+ # horizontal range input
232
+ config.wrappers :horizontal_range, tag: 'div', class: 'form-group row', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
233
+ b.use :html5
234
+ b.use :placeholder
235
+ b.optional :readonly
236
+ b.optional :step
237
+ b.use :label, class: 'col-sm-3 form-control-label'
238
+ b.wrapper :grid_wrapper, tag: 'div', class: 'col-sm-9' do |ba|
239
+ ba.use :input, class: 'form-control-range', error_class: 'is-invalid', valid_class: 'is-valid'
240
+ ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
241
+ ba.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
242
+ end
243
+ end
244
+
245
+
246
+ # inline forms
247
+ #
248
+ # inline default_wrapper
249
+ config.wrappers :inline_form, tag: 'span', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
250
+ b.use :html5
251
+ b.use :placeholder
252
+ b.optional :maxlength
253
+ b.optional :minlength
254
+ b.optional :pattern
255
+ b.optional :min_max
256
+ b.optional :readonly
257
+ b.use :label, class: 'sr-only'
258
+
259
+ b.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
260
+ b.use :error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
261
+ b.optional :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
262
+ end
263
+
264
+ # inline input for boolean
265
+ config.wrappers :inline_boolean, tag: 'span', class: 'form-check flex-wrap justify-content-start mr-sm-2', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
266
+ b.use :html5
267
+ b.optional :readonly
268
+ b.use :input, class: 'form-check-input', error_class: 'is-invalid', valid_class: 'is-valid'
269
+ b.use :label, class: 'form-check-label'
270
+ b.use :error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
271
+ b.optional :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
272
+ end
273
+
274
+
275
+ # bootstrap custom forms
276
+ #
277
+ # custom input for boolean
278
+ config.wrappers :custom_boolean, tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
279
+ b.use :html5
280
+ b.optional :readonly
281
+ b.wrapper :form_check_wrapper, tag: 'div', class: 'custom-control custom-checkbox' do |bb|
282
+ bb.use :input, class: 'custom-control-input', error_class: 'is-invalid', valid_class: 'is-valid'
283
+ bb.use :label, class: 'custom-control-label'
284
+ bb.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
285
+ bb.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
286
+ end
287
+ end
288
+
289
+ config.wrappers :custom_boolean_switch, tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
290
+ b.use :html5
291
+ b.optional :readonly
292
+ b.wrapper :form_check_wrapper, tag: 'div', class: 'custom-control custom-checkbox-switch' do |bb|
293
+ bb.use :input, class: 'custom-control-input', error_class: 'is-invalid', valid_class: 'is-valid'
294
+ bb.use :label, class: 'custom-control-label'
295
+ bb.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
296
+ bb.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
297
+ end
298
+ end
299
+
300
+ # custom input for radio buttons and check boxes
301
+ config.wrappers :custom_collection, item_wrapper_class: 'custom-control', tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
302
+ b.use :html5
303
+ b.optional :readonly
304
+ b.wrapper :legend_tag, tag: 'legend', class: 'col-form-label pt-0' do |ba|
305
+ ba.use :label_text
306
+ end
307
+ b.use :input, class: 'custom-control-input', error_class: 'is-invalid', valid_class: 'is-valid'
308
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
309
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
310
+ end
311
+
312
+ # custom input for inline radio buttons and check boxes
313
+ config.wrappers :custom_collection_inline, item_wrapper_class: 'custom-control custom-control-inline', tag: 'fieldset', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
314
+ b.use :html5
315
+ b.optional :readonly
316
+ b.wrapper :legend_tag, tag: 'legend', class: 'col-form-label pt-0' do |ba|
317
+ ba.use :label_text
318
+ end
319
+ b.use :input, class: 'custom-control-input', error_class: 'is-invalid', valid_class: 'is-valid'
320
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
321
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
322
+ end
323
+
324
+ # custom file input
325
+ config.wrappers :custom_file, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
326
+ b.use :html5
327
+ b.use :placeholder
328
+ b.optional :maxlength
329
+ b.optional :minlength
330
+ b.optional :readonly
331
+ b.use :label, class: 'form-control-label'
332
+ b.wrapper :custom_file_wrapper, tag: 'div', class: 'custom-file' do |ba|
333
+ ba.use :input, class: 'custom-file-input', error_class: 'is-invalid', valid_class: 'is-valid'
334
+ ba.use :label, class: 'custom-file-label'
335
+ ba.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
336
+ end
337
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
338
+ end
339
+
340
+ # custom multi select
341
+ config.wrappers :custom_multi_select, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
342
+ b.use :html5
343
+ b.optional :readonly
344
+ b.use :label, class: 'form-control-label'
345
+ b.wrapper tag: 'div', class: 'd-flex flex-row justify-content-between align-items-center' do |ba|
346
+ ba.use :input, class: 'custom-select mx-1', error_class: 'is-invalid', valid_class: 'is-valid'
347
+ end
348
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
349
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
350
+ end
351
+
352
+ # custom range input
353
+ config.wrappers :custom_range, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
354
+ b.use :html5
355
+ b.use :placeholder
356
+ b.optional :readonly
357
+ b.optional :step
358
+ b.use :label, class: 'form-control-label'
359
+ b.use :input, class: 'custom-range', error_class: 'is-invalid', valid_class: 'is-valid'
360
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
361
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
362
+ end
363
+
364
+
365
+ # Input Group - custom component
366
+ # see example app and config at https://github.com/rafaelfranca/simple_form-bootstrap
367
+ config.wrappers :input_group, tag: 'div', class: 'form-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
368
+ b.use :html5
369
+ b.use :placeholder
370
+ b.optional :maxlength
371
+ b.optional :minlength
372
+ b.optional :pattern
373
+ b.optional :min_max
374
+ b.optional :readonly
375
+ b.use :label, class: 'form-control-label'
376
+ b.wrapper :input_group_tag, tag: 'div', class: 'input-group' do |ba|
377
+ ba.optional :prepend
378
+ ba.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
379
+ ba.optional :append
380
+ end
381
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback d-block' }
382
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
383
+ end
384
+
385
+
386
+ # Floating Labels form
387
+ #
388
+ # floating labels default_wrapper
389
+ config.wrappers :floating_labels_form, tag: 'div', class: 'form-label-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
390
+ b.use :html5
391
+ b.use :placeholder
392
+ b.optional :maxlength
393
+ b.optional :minlength
394
+ b.optional :pattern
395
+ b.optional :min_max
396
+ b.optional :readonly
397
+ b.use :input, class: 'form-control', error_class: 'is-invalid', valid_class: 'is-valid'
398
+ b.use :label, class: 'form-control-label'
399
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
400
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
401
+ end
402
+
403
+ # custom multi select
404
+ config.wrappers :floating_labels_select, tag: 'div', class: 'form-label-group', error_class: 'form-group-invalid', valid_class: 'form-group-valid' do |b|
405
+ b.use :html5
406
+ b.optional :readonly
407
+ b.use :input, class: 'custom-select custom-select-lg', error_class: 'is-invalid', valid_class: 'is-valid'
408
+ b.use :label, class: 'form-control-label'
409
+ b.use :full_error, wrap_with: { tag: 'div', class: 'invalid-feedback' }
410
+ b.use :hint, wrap_with: { tag: 'small', class: 'form-text text-muted' }
411
+ end
412
+
413
+
414
+ # The default wrapper to be used by the FormBuilder.
415
+ config.default_wrapper = :vertical_form
416
+
417
+ # Custom wrappers for input types. This should be a hash containing an input
418
+ # type as key and the wrapper that will be used for all inputs with specified type.
419
+ config.wrapper_mappings = {
420
+ boolean: :vertical_boolean,
421
+ check_boxes: :vertical_collection,
422
+ date: :vertical_multi_select,
423
+ datetime: :vertical_multi_select,
424
+ file: :vertical_file,
425
+ radio_buttons: :vertical_collection,
426
+ range: :vertical_range,
427
+ time: :vertical_multi_select
428
+ }
429
+
430
+ # enable custom form wrappers
431
+ # config.wrapper_mappings = {
432
+ # boolean: :custom_boolean,
433
+ # check_boxes: :custom_collection,
434
+ # date: :custom_multi_select,
435
+ # datetime: :custom_multi_select,
436
+ # file: :custom_file,
437
+ # radio_buttons: :custom_collection,
438
+ # range: :custom_range,
439
+ # time: :custom_multi_select
440
+ # }
441
+ end
442
+
443
+ # custom component requires input group wrapper
444
+ module InputGroup
445
+ def prepend(wrapper_options = nil)
446
+ span_tag = content_tag(:span, options[:prepend], class: "input-group-text")
447
+ template.content_tag(:div, span_tag, class: "input-group-prepend")
448
+ end
449
+
450
+ def append(wrapper_options = nil)
451
+ span_tag = content_tag(:span, options[:append], class: "input-group-text")
452
+ template.content_tag(:div, span_tag, class: "input-group-append")
453
+ end
454
+ end
455
+
456
+ # Register the component in Simple Form.
457
+ SimpleForm.include_component(InputGroup)
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # config/initializers/will_paginate.rb
4
+ #
5
+ # This extension code was written by Isaac Bowen, originally found
6
+ # at http://isaacbowen.com/blog/using-will_paginate-action_view-and-bootstrap/
7
+
8
+ require "will_paginate/view_helpers/action_view"
9
+
10
+ module WillPaginate
11
+ module ActionView
12
+ def will_paginate(collection = nil, options = {})
13
+ options, collection = collection, nil if collection.is_a? Hash
14
+ # Taken from original will_paginate code to handle if the helper is not passed a collection object.
15
+ collection ||= infer_collection_from_controller
16
+ options[:renderer] ||= BootstrapLinkRenderer
17
+ super.try :html_safe
18
+ end
19
+
20
+ class Bootstrap4LinkRenderer < LinkRenderer
21
+ protected
22
+
23
+ def html_container(html)
24
+ tag :nav, tag(:ul, html, class: ul_class)
25
+ end
26
+
27
+ def page_number(page)
28
+ item_class = if(page == current_page)
29
+ "active page-item"
30
+ else
31
+ "page-item"
32
+ end
33
+
34
+ tag :li, link(page, page, :rel => rel_value(page), class: "page-link"), class: item_class
35
+ end
36
+
37
+ def gap
38
+ tag :li, link("&hellip;".html_safe, "#", class: "page-link"), class: "page-item disabled"
39
+ end
40
+
41
+ def previous_or_next_page(page, text, classname)
42
+ tag :li,
43
+ link(text, page || "#", class: "page-link"),
44
+ class: [
45
+ (classname[0..3] if @options[:page_links]),
46
+ (classname if @options[:page_links]),
47
+ ("disabled" unless page),
48
+ "page-item"
49
+ ].join(" ")
50
+ end
51
+
52
+ def ul_class
53
+ ["pagination", container_attributes[:class]].compact.join(" ")
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,12 @@
1
+ en:
2
+ common:
3
+ new: New
4
+ overview: Overview
5
+ application:
6
+ title: Example Title
7
+ separator: "|"
8
+ brand: Example Brand
9
+ attributes_card:
10
+ title: Attributes
11
+ icons:
12
+ masthead_nav_menu: user
@@ -1,5 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module StandardView
2
4
  class Engine < ::Rails::Engine
3
5
  isolate_namespace StandardView
6
+
7
+ config.to_prepare do
8
+ ApplicationController.helper(StandardView::ApplicationHelper)
9
+ ApplicationController.helper(StandardView::FlashHelper)
10
+ ApplicationController.helper(StandardView::FormattingHelper)
11
+ ApplicationController.helper(StandardView::MastheadHelper)
12
+ ApplicationController.helper(StandardView::BadgeHelper)
13
+ ApplicationController.helper(StandardView::NavigationHelper)
14
+ end
4
15
  end
5
16
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module StandardView
2
- VERSION = '0.1.0'
4
+ VERSION = "0.1.1"
3
5
  end
data/lib/standard_view.rb CHANGED
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "standard_view/engine"
2
4
 
3
- module StandardView
4
- # Your code goes here...
5
- end
5
+ require "material"
6
+ require "will_paginate"
7
+ require "will_paginate/active_record"
8
+
9
+ module StandardView; end