headmin 0.2.8 → 0.3.4

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 (271) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +29 -3
  4. data/Gemfile +1 -1
  5. data/Gemfile.lock +39 -24
  6. data/README.md +65 -57
  7. data/app/assets/config/headmin_manifest.js +2 -0
  8. data/app/assets/images/document.docx +0 -0
  9. data/{src/scss/headmin/filters.scss → app/assets/images/document.pdf} +0 -0
  10. data/app/assets/images/image.jpg +0 -0
  11. data/app/assets/images/spreadsheet.xls +0 -0
  12. data/app/assets/images/video.mp4 +0 -0
  13. data/app/assets/javascripts/headmin/config/i18n.js +11 -0
  14. data/{src/js → app/assets/javascripts}/headmin/controllers/blocks_controller.js +0 -1
  15. data/{src/js → app/assets/javascripts}/headmin/controllers/date_range_controller.js +0 -2
  16. data/app/assets/javascripts/headmin/controllers/dropzone_controller.js +33 -0
  17. data/app/assets/javascripts/headmin/controllers/file_preview_controller.js +244 -0
  18. data/{src/js → app/assets/javascripts}/headmin/controllers/filter_controller.js +12 -6
  19. data/{src/js → app/assets/javascripts}/headmin/controllers/filters_controller.js +0 -0
  20. data/{src/js → app/assets/javascripts}/headmin/controllers/flatpickr_controller.js +2 -1
  21. data/app/assets/javascripts/headmin/controllers/hello_controller.js +7 -0
  22. data/app/assets/javascripts/headmin/controllers/notification_controller.js +8 -0
  23. data/{src/js → app/assets/javascripts}/headmin/controllers/popup_controller.js +0 -1
  24. data/app/assets/javascripts/headmin/controllers/redactorx_controller.js +13 -0
  25. data/{src/js → app/assets/javascripts}/headmin/controllers/repeater_controller.js +0 -0
  26. data/app/assets/javascripts/headmin/controllers/select_controller.js +48 -0
  27. data/{src/js → app/assets/javascripts}/headmin/controllers/table_actions_controller.js +18 -6
  28. data/{src/js → app/assets/javascripts}/headmin/controllers/table_controller.js +28 -14
  29. data/app/assets/javascripts/headmin/index.js +37 -0
  30. data/app/assets/javascripts/headmin.js +15280 -0
  31. data/{src/scss → app/assets/stylesheets}/headmin/filter.scss +0 -0
  32. data/app/assets/stylesheets/headmin/filters.scss +0 -0
  33. data/{src/scss → app/assets/stylesheets}/headmin/form.scss +53 -4
  34. data/{src/scss → app/assets/stylesheets}/headmin/general.scss +0 -0
  35. data/{src/scss → app/assets/stylesheets}/headmin/layout/body.scss +0 -0
  36. data/{src/scss → app/assets/stylesheets}/headmin/layout/sidebar.scss +0 -0
  37. data/{src/scss → app/assets/stylesheets}/headmin/layout.scss +0 -0
  38. data/{src/scss → app/assets/stylesheets}/headmin/login.scss +0 -0
  39. data/{src/scss/vendor/bootstrap/variables.scss → app/assets/stylesheets/headmin/overrides/bootstrap.scss} +0 -0
  40. data/{src/scss/vendor/redactorx/override.css → app/assets/stylesheets/headmin/overrides/redactorx.css} +0 -0
  41. data/{src/scss → app/assets/stylesheets}/headmin/popup.scss +0 -0
  42. data/app/assets/stylesheets/headmin/syntax.scss +349 -0
  43. data/{src/scss → app/assets/stylesheets}/headmin/table.scss +0 -0
  44. data/app/assets/stylesheets/headmin/thumbnail.scss +20 -0
  45. data/app/assets/stylesheets/headmin/utilities.scss +68 -0
  46. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_accordion.scss +118 -0
  47. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_alert.scss +57 -0
  48. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_badge.scss +29 -0
  49. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_breadcrumb.scss +28 -0
  50. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_button-group.scss +139 -0
  51. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_buttons.scss +111 -0
  52. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_card.scss +216 -0
  53. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_carousel.scss +229 -0
  54. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_close.scss +40 -0
  55. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_containers.scss +41 -0
  56. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_dropdown.scss +240 -0
  57. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_forms.scss +9 -0
  58. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_functions.scss +302 -0
  59. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_grid.scss +33 -0
  60. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_helpers.scss +9 -0
  61. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_images.scss +42 -0
  62. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_list-group.scss +174 -0
  63. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_mixins.scss +43 -0
  64. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_modal.scss +209 -0
  65. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_nav.scss +139 -0
  66. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_navbar.scss +335 -0
  67. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_offcanvas.scss +83 -0
  68. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_pagination.scss +64 -0
  69. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_placeholders.scss +51 -0
  70. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_popover.scss +158 -0
  71. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_progress.scss +48 -0
  72. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_reboot.scss +625 -0
  73. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_root.scss +54 -0
  74. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_spinners.scss +69 -0
  75. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_tables.scss +155 -0
  76. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_toasts.scss +51 -0
  77. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_tooltip.scss +115 -0
  78. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_transitions.scss +27 -0
  79. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_type.scss +104 -0
  80. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_utilities.scss +630 -0
  81. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/_variables.scss +1641 -0
  82. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/bootstrap-grid.scss +67 -0
  83. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/bootstrap-reboot.scss +13 -0
  84. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/bootstrap-utilities.scss +18 -0
  85. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/bootstrap.scss +53 -0
  86. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_floating-labels.scss +63 -0
  87. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-check.scss +152 -0
  88. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-control.scss +219 -0
  89. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-range.scss +91 -0
  90. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-select.scss +72 -0
  91. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_form-text.scss +11 -0
  92. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_input-group.scss +121 -0
  93. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_labels.scss +36 -0
  94. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/forms/_validation.scss +12 -0
  95. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_clearfix.scss +3 -0
  96. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_colored-links.scss +12 -0
  97. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_position.scss +30 -0
  98. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_ratio.scss +26 -0
  99. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_stacks.scss +15 -0
  100. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_stretched-link.scss +15 -0
  101. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_text-truncation.scss +7 -0
  102. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_visually-hidden.scss +8 -0
  103. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/helpers/_vr.scss +8 -0
  104. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_alert.scss +11 -0
  105. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_backdrop.scss +14 -0
  106. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_border-radius.scss +78 -0
  107. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_box-shadow.scss +18 -0
  108. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_breakpoints.scss +127 -0
  109. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_buttons.scss +133 -0
  110. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_caret.scss +64 -0
  111. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_clearfix.scss +9 -0
  112. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_color-scheme.scss +7 -0
  113. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_container.scss +9 -0
  114. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_deprecate.scss +10 -0
  115. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_forms.scss +144 -0
  116. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_gradients.scss +47 -0
  117. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_grid.scss +151 -0
  118. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_image.scss +16 -0
  119. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_list-group.scss +24 -0
  120. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_lists.scss +7 -0
  121. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_pagination.scss +31 -0
  122. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_reset-text.scss +17 -0
  123. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_resize.scss +6 -0
  124. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_table-variants.scss +21 -0
  125. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  126. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_transition.scss +26 -0
  127. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_utilities.scss +89 -0
  128. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/mixins/_visually-hidden.scss +29 -0
  129. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/utilities/_api.scss +47 -0
  130. data/app/assets/stylesheets/headmin/vendor/bootstrap/scss/vendor/_rfs.scss +354 -0
  131. data/app/assets/stylesheets/headmin/vendor/flatpickr.css +903 -0
  132. data/{src/scss/vendor/redactorx → app/assets/stylesheets/headmin/vendor}/redactorx.css +0 -0
  133. data/app/assets/stylesheets/headmin/vendor/tom-select-bootstrap.css +536 -0
  134. data/app/assets/stylesheets/headmin.css +13454 -0
  135. data/app/assets/stylesheets/headmin.scss +65 -0
  136. data/app/controllers/concerns/headmin/authentication.rb +1 -1
  137. data/app/controllers/concerns/headmin/searchable.rb +1 -1
  138. data/app/controllers/concerns/headmin/sortable.rb +7 -7
  139. data/app/helpers/headmin/admin_helper.rb +2 -1
  140. data/app/helpers/headmin/bootstrap_helper.rb +4 -4
  141. data/app/helpers/headmin/documentation_helper.rb +35 -0
  142. data/app/helpers/headmin/filter_helper.rb +1 -1
  143. data/app/helpers/headmin/form_helper.rb +7 -3
  144. data/app/helpers/headmin/notification_helper.rb +21 -21
  145. data/app/helpers/headmin/request_helper.rb +5 -10
  146. data/app/models/concerns/headmin/block.rb +1 -2
  147. data/app/models/concerns/headmin/blockable.rb +1 -1
  148. data/app/models/concerns/headmin/field.rb +1 -1
  149. data/app/models/concerns/headmin/fieldable.rb +8 -8
  150. data/app/models/headmin/documentation_renderer.rb +32 -0
  151. data/app/models/headmin/form/base.rb +78 -0
  152. data/app/models/headmin/form/text.rb +51 -0
  153. data/app/models/headmin/thumbnail.rb +61 -0
  154. data/app/services/block_service.rb +53 -53
  155. data/app/views/examples/admin.html.erb +1 -1
  156. data/app/views/headmin/_blocks.html.erb +2 -2
  157. data/app/views/headmin/_breadcrumbs.html.erb +1 -1
  158. data/app/views/headmin/_card.html.erb +8 -6
  159. data/app/views/headmin/_dropdown.html.erb +1 -1
  160. data/app/views/headmin/_filters.html.erb +20 -8
  161. data/app/views/headmin/_form.html.erb +14 -14
  162. data/app/views/headmin/_heading.html.erb +1 -1
  163. data/app/views/headmin/_notifications.html.erb +1 -1
  164. data/app/views/headmin/_pagination.html.erb +1 -1
  165. data/app/views/headmin/_popup.html.erb +10 -4
  166. data/app/views/headmin/_table.html.erb +2 -2
  167. data/app/views/headmin/_thumbnail.html.erb +47 -0
  168. data/app/views/headmin/dropdown/_devise.html.erb +2 -2
  169. data/app/views/headmin/dropdown/_item.html.erb +1 -1
  170. data/app/views/headmin/dropdown/_list.html.erb +3 -6
  171. data/app/views/headmin/filters/_date.html.erb +4 -10
  172. data/app/views/headmin/filters/_flatpickr.html.erb +5 -5
  173. data/app/views/headmin/filters/_search.html.erb +5 -5
  174. data/app/views/headmin/filters/_select.html.erb +6 -6
  175. data/app/views/headmin/filters/filter/_button.html.erb +7 -7
  176. data/app/views/headmin/filters/filter/_template.html.erb +1 -1
  177. data/app/views/headmin/forms/_actions.html.erb +1 -1
  178. data/app/views/headmin/forms/_base.html.erb +98 -45
  179. data/app/views/headmin/forms/_blocks.html.erb +4 -4
  180. data/app/views/headmin/forms/_checkbox.html.erb +4 -4
  181. data/app/views/headmin/forms/_date.html.erb +29 -45
  182. data/app/views/headmin/forms/_date_range.html.erb +24 -66
  183. data/app/views/headmin/forms/_email.html.erb +35 -26
  184. data/app/views/headmin/forms/_file.html.erb +186 -34
  185. data/app/views/headmin/forms/_flatpickr.html.erb +18 -39
  186. data/app/views/headmin/forms/_flatpickr_range.html.erb +34 -45
  187. data/app/views/headmin/forms/_hidden.html.erb +13 -12
  188. data/app/views/headmin/forms/_image.html.erb +11 -45
  189. data/app/views/headmin/forms/_label.html.erb +18 -14
  190. data/app/views/headmin/forms/_number.html.erb +40 -37
  191. data/app/views/headmin/forms/_password.html.erb +37 -58
  192. data/app/views/headmin/forms/_redactorx.html.erb +8 -7
  193. data/app/views/headmin/forms/_repeater.html.erb +7 -7
  194. data/app/views/headmin/forms/_select.html.erb +43 -48
  195. data/app/views/headmin/forms/_text.html.erb +95 -58
  196. data/app/views/headmin/forms/_textarea.html.erb +37 -26
  197. data/app/views/headmin/forms/_url.html.erb +35 -26
  198. data/app/views/headmin/forms/_validation.html.erb +3 -3
  199. data/app/views/headmin/forms/_video.html.erb +21 -0
  200. data/app/views/headmin/forms/actions/_destroy.html.erb +3 -3
  201. data/app/views/headmin/forms/fields/_base.html.erb +3 -3
  202. data/app/views/headmin/forms/fields/_file.html.erb +2 -2
  203. data/app/views/headmin/forms/fields/_group.html.erb +4 -4
  204. data/app/views/headmin/forms/fields/_image.html.erb +2 -2
  205. data/app/views/headmin/forms/fields/_list.html.erb +3 -3
  206. data/app/views/headmin/forms/fields/_text.html.erb +2 -2
  207. data/app/views/headmin/forms/repeater/_row.html.erb +1 -1
  208. data/app/views/headmin/heading/_title.html.erb +1 -1
  209. data/app/views/headmin/layout/_body.html.erb +1 -1
  210. data/app/views/headmin/layout/_content.html.erb +1 -1
  211. data/app/views/headmin/layout/_footer.html.erb +1 -1
  212. data/app/views/headmin/layout/_header.html.erb +1 -1
  213. data/app/views/headmin/layout/_main.html.erb +1 -1
  214. data/app/views/headmin/layout/_sidebar.html.erb +3 -3
  215. data/app/views/headmin/layout/sidebar/_bottom.html.erb +1 -1
  216. data/app/views/headmin/layout/sidebar/_nav.html.erb +1 -1
  217. data/app/views/headmin/nav/_dropdown.html.erb +34 -0
  218. data/app/views/headmin/nav/_item.html.erb +22 -13
  219. data/app/views/headmin/nav/item/_devise.html.erb +1 -1
  220. data/app/views/headmin/table/_actions.html.erb +2 -2
  221. data/app/views/headmin/table/_body.html.erb +1 -1
  222. data/app/views/headmin/table/_foot.html.erb +1 -1
  223. data/app/views/headmin/table/_footer.html.erb +1 -1
  224. data/app/views/headmin/table/_head.html.erb +1 -1
  225. data/app/views/headmin/table/_header.html.erb +1 -1
  226. data/app/views/headmin/table/actions/_action.html.erb +6 -5
  227. data/app/views/headmin/table/actions/_delete.html.erb +2 -2
  228. data/app/views/headmin/table/actions/_export.html.erb +1 -1
  229. data/app/views/headmin/table/body/_row.html.erb +2 -2
  230. data/app/views/headmin/views/devise/registrations/_edit.html.erb +2 -2
  231. data/config/importmap.rb +2 -0
  232. data/config/initializers/customize_input_error.rb +4 -4
  233. data/config/locales/en.yml +0 -3
  234. data/config/locales/headmin/forms/en.yml +5 -0
  235. data/config/locales/headmin/forms/nl.yml +5 -0
  236. data/config/locales/headmin/popup/en.yml +4 -0
  237. data/config/locales/headmin/popup/nl.yml +4 -0
  238. data/config/locales/headmin/thumbnail/en.yml +4 -0
  239. data/config/locales/headmin/thumbnail/nl.yml +4 -0
  240. data/config/locales/nl.yml +0 -3
  241. data/esbuild-css.js +25 -0
  242. data/esbuild-js.js +11 -0
  243. data/headmin.gemspec +4 -1
  244. data/lib/generators/headmin/blocks_generator.rb +8 -8
  245. data/lib/generators/headmin/devise_generator.rb +4 -4
  246. data/lib/generators/headmin/fields_generator.rb +9 -9
  247. data/lib/generators/templates/controllers/auth/confirmations_controller.rb +1 -1
  248. data/lib/generators/templates/controllers/auth/omniauth_callbacks_controller.rb +1 -1
  249. data/lib/generators/templates/controllers/auth/passwords_controller.rb +1 -1
  250. data/lib/generators/templates/controllers/auth/registrations_controller.rb +1 -1
  251. data/lib/generators/templates/controllers/auth/sessions_controller.rb +1 -1
  252. data/lib/generators/templates/controllers/auth/unlocks_controller.rb +1 -1
  253. data/lib/generators/templates/models/block.rb +1 -1
  254. data/lib/headmin/engine.rb +18 -3
  255. data/lib/headmin/version.rb +1 -1
  256. data/lib/headmin.rb +1 -1
  257. data/package.json +16 -34
  258. data/src/js/headmin.js +1 -1
  259. data/src/scss/headmin.scss +1 -61
  260. data/yarn-error.log +362 -0
  261. data/yarn.lock +234 -5275
  262. metadata +194 -38
  263. data/.nvmrc +0 -1
  264. data/.rubocop.yml +0 -13
  265. data/app/controllers/concerns/headmin/ckeditor.rb +0 -27
  266. data/app/views/headmin/forms/_ckeditor.html.erb +0 -42
  267. data/dist/css/headmin.css +0 -12357
  268. data/dist/js/headmin.js +0 -1115
  269. data/src/js/headmin/headmin.js +0 -158
  270. data/src/scss/headmin/utilities.scss +0 -19
  271. data/webpack.config.js +0 -30
@@ -1,61 +1,114 @@
1
- <%
2
- # headmin/forms/base
3
- #
4
- # ==== Options
5
- # * <tt>append<tt> - Text or icon to be shown on the left hand side of the input, Doesn't work with float
6
- # * <tt>attribute<tt> - Name of the attribute of the form model
7
- # * <tt>float<tt> - Set to true if you want to show floating labels
8
- # * <tt>form<tt> - Form object
9
- # * <tt>label<tt> - Text to show as label. Label will be hidden if value is false
10
- # * <tt>options<tt> - Hash with all HTML options to pass to
11
- # * <tt>prepend<tt> - Text or icon to be shown on the right hand side of the input, Doesn't work with float
12
- # * <tt>required<tt> - Set to true to mark as required
13
- #
14
- # ==== Examples
15
- # Basic version
16
- # <%= render 'headmin/forms/date', form: form, attribute: :title %#>
17
- #
18
- # With datepicker
19
- # <%= render 'headmin/forms/text', form: form, attribute: :title, datepicker: true %#>
20
-
21
- append = local_assigns.has_key?(:append) ? append : nil
22
- prepend = local_assigns.has_key?(:prepend) ? prepend : nil
23
- group = append || prepend
24
- float = local_assigns.has_key?(:float) ? float : false
25
- label = local_assigns.has_key?(:label) ? label : nil
26
- required = local_assigns.has_key?(:required) ? required : false
27
-
28
- show_label = label != false
29
- %>
30
-
31
- <div class="<%= 'form-floating' if float %> <%= ('mb-3 text-start' if show_label) %>">
32
- <% if show_label && !float %>
33
- <%= render 'headmin/forms/label', form: form, attribute: attribute, name: label, required: required %>
34
- <% end %>
35
-
36
- <% if group %>
1
+ <!--
2
+ <% documentation do %>
3
+ # Base
4
+ This serves as a wrapper around most form views. It allows defining everything that happens outside the input field.
5
+ The main purpose of this view is to coordinate labels and appendages.
6
+
7
+ ```erbx
8
+ <%= form_with do |form| %>
9
+ <%= render "headmin/forms/base", form: form, attribute: "basic_example" do |form| %>
10
+ <%= form.text_field("attribute", class: 'form-control') %>
11
+ <% end %>
12
+ <% end %>
13
+ ```
14
+
15
+ # Parameters
16
+ | Name | Required | Type | Description |
17
+ | ------------ | -------- | ---------------- | ----------- |
18
+ | form | yes | Object | Form object |
19
+ | attribute | yes | String, Symbol | Name of the attribute of the form model |
20
+ | append | no | Boolean | Text or icon to be shown on the left hand side of the input, Doesn't work with float |
21
+ | class | no | String | A space separated string of HTML class names |
22
+ | float | no | Boolean | Set to true if you want to show floating labels |
23
+ | id | no | String | Input identifier to be used as "for" in the label |
24
+ | label | no | Hash | Text to show as label. Label will be hidden if value is false |
25
+ | prepend | no | Boolean | Text or icon to be shown on the right hand side of the input, Doesn't work with float |
26
+
27
+ ## Examples
28
+
29
+ ### Sizing
30
+ ```erbx
31
+ <%= form_with do |form| %>
32
+ <%= render "headmin/forms/base", form: form, attribute: "small", class: 'input-group-sm' do |form| %>
33
+ <%= form.text_field("attribute", class: 'form-control', placeholder: '.input-group-sm') %>
34
+ <% end %>
35
+ <%= render "headmin/forms/base", form: form, attribute: "medium" do |form| %>
36
+ <%= form.text_field("attribute", class: 'form-control', placeholder: 'Default size') %>
37
+ <% end %>
38
+ <%= render "headmin/forms/base", form: form, attribute: "large", class: 'input-group-lg' do |form| %>
39
+ <%= form.text_field("attribute", class: 'form-control', placeholder: '.input-group-lg') %>
40
+ <% end %>
41
+ <% end %>
42
+ ```
43
+
44
+ ### Labels
45
+ ```erbx
46
+ <%= form_with do |form| %>
47
+ <%= render "headmin/forms/base", form: form, attribute: "no_label", label: false do |form| %>
48
+ <%= form.text_field("attribute", class: 'form-control', placeholder: 'Without label') %>
49
+ <% end %>
50
+ <%= render "headmin/forms/base", form: form, attribute: "floating_label", float: true do |form| %>
51
+ <%= form.text_field("attribute", class: 'form-control', placeholder: 'Default size') %>
52
+ <% end %>
53
+ <%= render "headmin/forms/base", form: form, attribute: "custom_label", label: 'Custom label' do |form| %>
54
+ <%= form.text_field("attribute", class: 'form-control') %>
55
+ <% end %>
56
+ <% end %>
57
+ ```
58
+
59
+ ### Appendages
60
+ ```erbx
61
+ <%= form_with do |form| %>
62
+ <%= render "headmin/forms/base", form: form, attribute: "prepend", prepend: "€" do |form| %>
63
+ <%= form.text_field("attribute", class: 'form-control') %>
64
+ <% end %>
65
+ <%= render "headmin/forms/base", form: form, attribute: "append", append: "m²" do |form| %>
66
+ <%= form.text_field("attribute", class: 'form-control') %>
67
+ <% end %>
68
+ <%= render "headmin/forms/base", form: form, attribute: "prepend_and_append", prepend: "€", append: "m²" do |form| %>
69
+ <%= form.text_field("attribute", class: 'form-control') %>
70
+ <% end %>
71
+ <% end %>
72
+ ```
73
+ <% end %>
74
+ -->
75
+
76
+ <% base = Headmin::Form::Base.new(local_assigns) %>
77
+
78
+ <%= tag.div(class: base.class_names, data: base.data) do %>
79
+ <% if base.label != false && !base.float %>
80
+ <%= render 'headmin/forms/label', base.label_options %>
81
+ <% end %>
82
+
83
+ <% if base.append || base.prepend %>
37
84
  <div class="input-group w-100">
38
- <% if prepend %>
85
+ <% if base.prepend %>
39
86
  <span class="input-group-text">
40
- <%= prepend %>
87
+ <%= base.prepend %>
41
88
  </span>
42
89
  <% end %>
43
90
 
44
91
  <%= yield form %>
45
- <%= render 'headmin/forms/validation', form: form, attribute: attribute if form.object.respond_to?(:errors) %>
92
+ <%= render 'headmin/forms/validation', base.validation_options if form.object.respond_to?(:errors) %>
46
93
 
47
- <% if append %>
94
+ <% if base.append %>
48
95
  <span class="input-group-text">
49
- <%= append %>
96
+ <%= base.append %>
50
97
  </span>
51
98
  <% end %>
52
99
  </div>
53
100
  <% else %>
54
101
  <%= yield form %>
55
- <%= render 'headmin/forms/validation', form: form, attribute: attribute if form.object.respond_to?(:errors) %>
102
+ <%= render 'headmin/forms/validation', base.validation_options if form.object.respond_to?(:errors) %>
103
+ <% end %>
104
+
105
+ <% if base.label != false && base.float %>
106
+ <%= render 'headmin/forms/label', base.label_options %>
56
107
  <% end %>
57
108
 
58
- <% if show_label && float %>
59
- <%= render 'headmin/forms/label', form: form, attribute: attribute, name: label, required: required %>
109
+ <% if base.list %>
110
+ <datalist id="<%= base.list_id %>">
111
+ <%= options_for_select(base.list) %>
112
+ </datalist>
60
113
  <% end %>
61
- </div>
114
+ <% end %>
@@ -2,9 +2,9 @@
2
2
  # headmin/forms/blocks
3
3
  #
4
4
  # ==== Options
5
- # * <tt>form</tt> - Form object
6
- # * <tt>path</tt> - Directory where to look for block templates
7
- # * <tt>allow</tt> - Names of block templates that can be added
5
+ # * +form</tt> - Form object
6
+ # * +path</tt> - Directory where to look for block templates
7
+ # * +allow</tt> - Names of block templates that can be added
8
8
  #
9
9
  # ==== Examples
10
10
  # Basic version. This will only look for blocks in 'admin/blocks'
@@ -29,7 +29,7 @@
29
29
  <%= block_form.hidden_field :name, value: name %>
30
30
 
31
31
  <!-- Render block form fields -->
32
- <% view_path = BlockService.form_view(name, path: path).gsub('/_', '/') %>
32
+ <% view_path = BlockService.form_view(name, path: path).gsub('/_', '/').split('.')[0] %>
33
33
  <%= render view_path, form: block_form %>
34
34
 
35
35
  <!-- Label -->
@@ -2,9 +2,9 @@
2
2
  # headmin/forms/checkbox
3
3
  #
4
4
  # ==== Options
5
- # * <tt>form<tt> - Form object
6
- # * <tt>attribute<tt> - Name of the attribute of the form model
7
- # * <tt>label<tt> - Text to show as label. Label will be hidden if value is false
5
+ # * +form+ - Form object
6
+ # * +attribute+ - Name of the attribute of the form model
7
+ # * +label+ - Text to show as label. Label will be hidden if value is false
8
8
  #
9
9
  # ==== Examples
10
10
  # Basic version
@@ -33,7 +33,7 @@
33
33
  <div class="<%= ('mb-3 text-start' if show_label) %>">
34
34
  <%= form.check_box(attribute, options) %>
35
35
  <% if show_label %>
36
- <%= render 'headmin/forms/label', form: form, attribute: attribute, name: label, required: required %>
36
+ <%= render 'headmin/forms/label', form: form, attribute: attribute, text: label, required: required %>
37
37
  <% end %>
38
38
  <%= render 'headmin/forms/validation', form: form, attribute: attribute %>
39
39
  </div>
@@ -1,57 +1,41 @@
1
1
  <%
2
2
  # headmin/forms/date
3
3
  #
4
- # ==== Options
5
- # * <tt>append<tt> - Text or icon to be shown on the left hand side of the input, Doesn't work with float
6
- # * <tt>attribute<tt> - Name of the attribute of the form model
7
- # * <tt>class<tt> - Optional HTML class attribute
8
- # * <tt>data<tt> - Optional HTML data attributes
9
- # * <tt>disabled<tt> - Set to true if the input should be shown as disabled
10
- # * <tt>float<tt> - Set to true if you want to show floating labels
11
- # * <tt>form<tt> - Form object
12
- # * <tt>label<tt> - Text to show as label. Label will be hidden if value is false
13
- # * <tt>name<tt> - The name of the field
14
- # * <tt>prepend<tt> - Text or icon to be shown on the right hand side of the input, Doesn't work with float
15
- # * <tt>readonly<tt> - Set to true if the value of the field can only be read and not be modified
16
- # * <tt>required<tt> - Set to true to show a HTML5 validation message when left blank
4
+ # ==== Required parameters
5
+ # * +form+ - Form object
6
+ # * +attribute+ - Name of the attribute of the form model
7
+ #
8
+ # ==== Optional parameters
9
+ # * +aria+ - Provide a hash to define all aria attributes
10
+ # * +autocomplete+ - Value to be autofilled by the browser
11
+ # * +autofocus+ - Set to true to focus on this field when the page renders
12
+ # * +data+ - Optional HTML data attributes
13
+ # * +disabled+ - Set to true if the input should be shown as disabled
14
+ # * +id+ - Input identifier
15
+ # * +list+ - Add array of options to show in a data list
16
+ # * +readonly+ - Set to true if the value of the field can only be read and not be modified
17
+ # * +required+ - Set to true to mark as required
18
+ # * +step+ - The acceptable value granularity
19
+ # * +value+ - Overrides the value of the form
20
+ #
21
+ # ==== Extra parameters
22
+ # Listed in 'headmin/forms/base'
23
+ #
24
+ # ==== References
25
+ # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date
26
+ # https://apidock.com/rails/ActionView/Helpers/FormHelper/date_field
17
27
  #
18
28
  # ==== Examples
19
29
  # Basic version
20
30
  # <%= render 'headmin/forms/date', form: form, attribute: :date %#>
21
31
 
22
- append = local_assigns.has_key?(:append) ? append : nil
23
- class_names = local_assigns.has_key?(:class) ? local_assigns[:class] : false
24
- data = local_assigns.has_key?(:data) ? data : nil
25
- disabled = local_assigns.has_key?(:disabled) ? disabled : false
26
- float = local_assigns.has_key?(:float) ? float : false
27
- label = local_assigns.has_key?(:label) ? label : nil
28
- prepend = local_assigns.has_key?(:prepend) ? prepend : nil
29
- readonly = local_assigns.has_key?(:readonly) ? readonly : false
30
- required = local_assigns.has_key?(:required) ? required : false
31
-
32
- options = {
33
- 'aria-describedby': form_field_validation_id(form, attribute),
34
- class: "form-control #{form_field_validation_class(form, attribute)} #{class_names}",
35
- data: data,
36
- disabled: disabled,
37
- placeholder: label ? label.to_s.humanize : nil,
38
- readonly: readonly,
39
- required: required,
40
- }
41
-
42
- options[:name] = name if local_assigns.has_key?(:name)
43
-
44
- template_locals = {
45
- append: append,
46
- attribute: attribute,
47
- float: float,
48
- form: form,
49
- label: label,
50
- prepend: prepend,
51
- required: required
52
- }
32
+ option_keys = %i(aria autocomplete autofocus data disabled id list readonly required step value)
33
+ options = local_assigns.slice(*option_keys).merge(
34
+ aria: { describedby: form_field_validation_id(form, attribute) },
35
+ class: ['form-control', form_field_validation_class(form, attribute)].join(' '),
36
+ )
53
37
  %>
54
38
 
55
- <%= render 'headmin/forms/base', template_locals do |form| %>
39
+ <%= render 'headmin/forms/base', local_assigns do |form| %>
56
40
  <%= form.date_field(attribute, options) %>
57
41
  <% end %>
@@ -1,21 +1,18 @@
1
1
  <%
2
2
  # headmin/forms/date_range
3
3
  #
4
- # ==== Options
5
- # * <tt>append<tt> - Text or icon to be shown on the left hand side of the input, Doesn't work with float
6
- # * <tt>class<tt> - Optional HTML class attribute
7
- # * <tt>data<tt> - Optional HTML data attributes
8
- # * <tt>end_attribute<tt> - Name of the end date attribute of the form model
9
- # * <tt>end_label<tt> - Label for the end attribute
10
- # * <tt>float<tt> - Set to true if you want to show floating labels
11
- # * <tt>form<tt> - Form object
12
- # * <tt>label<tt> - Text to show as label. Label will be hidden if value is false
13
- # * <tt>prepend<tt> - Text or icon to be shown on the right hand side of the input, Doesn't work with float
14
- # * <tt>readonly<tt> - Set to true if the value of the field can only be read and not be modified
15
- # * <tt>required<tt> - Set to true to show a HTML5 validation message when left blank
16
- # * <tt>single<tt> - Set to true if only one field should be displayed
17
- # * <tt>start_attribute<tt> - Name of the start date attribute of the form model
18
- # * <tt>start_label<tt> - Label for the start attribute
4
+ # ==== Required parameters
5
+ # * +form+ - Form object
6
+ # * +start_attribute+ - Name of the start date attribute of the form model
7
+ # * +end_attribute+ - Name of the end date attribute of the form model
8
+ #
9
+ # ==== Optional parameters
10
+ # * +end_label+ - Label for the end attribute
11
+ # * +start_label+ - Label for the start attribute
12
+ #
13
+ # ==== Extra parameters
14
+ # Listed in 'headmin/forms/date'
15
+ # Listed in 'headmin/forms/base'
19
16
  #
20
17
  # ==== Examples
21
18
  # Basic version
@@ -24,61 +21,22 @@
24
21
  # With custom labels
25
22
  # <%= render 'headmin/forms/date_range', form: form, start_attribute: :start_date_2, start_label: :start_date, end_attribute: :end_date_2, end_label: :end_date %#>
26
23
 
27
- append = local_assigns.has_key?(:append) ? append : nil
28
- class_names = local_assigns.has_key?(:class) ? local_assigns[:class] : false
29
- data = local_assigns.has_key?(:data) ? data : {}
30
- disabled = local_assigns.has_key?(:disabled) ? disabled : false
31
- end_attribute = local_assigns.has_key?(:end_attribute) ? end_attribute : nil
32
- end_label = local_assigns.has_key?(:end_label) ? end_label : nil
33
- float = local_assigns.has_key?(:float) ? float : false
34
- label = local_assigns.has_key?(:label) ? label : nil
35
- prepend = local_assigns.has_key?(:prepend) ? prepend : nil
36
- readonly = local_assigns.has_key?(:readonly) ? readonly : false
37
- required = local_assigns.has_key?(:required) ? required : false
38
- start_attribute = local_assigns.has_key?(:start_attribute) ? start_attribute : nil
39
- start_label = local_assigns.has_key?(:start_label) ? start_label : nil
40
- single = local_assigns.has_key?(:single) ? single : false
41
-
42
- template_locals = {
43
- form: form,
44
- append: append,
45
- prepend: prepend,
46
- float: float,
47
- label: label,
48
- class: class_names,
49
- data: data.merge(action: 'change->date-range#update'),
50
- disabled: disabled,
51
- readonly: readonly,
52
- required: required
53
- }
54
-
55
- start_template_locals = template_locals.merge(
56
- attribute: start_attribute,
57
- placeholder: start_attribute,
58
- label: start_label
24
+ start_date_options = local_assigns.merge(
25
+ attribute: local_assigns[:start_attribute],
26
+ label: local_assigns[:start_label]
59
27
  )
60
-
61
- end_template_locals = template_locals.merge(
62
- attribute: end_attribute,
63
- placeholder: end_attribute,
64
- label: end_label
28
+ end_date_options = local_assigns.merge(
29
+ attribute: local_assigns[:end_attribute],
30
+ label: local_assigns[:end_label]
65
31
  )
66
32
  %>
67
33
 
68
- <% if single %>
69
- <div data-controller="date-range">
70
- <%= render 'headmin/forms/hidden', start_template_locals.merge(class: nil, data: { 'date-range-target': 'startDateInput' }) %>
71
- <%= render 'headmin/forms/hidden', end_template_locals.merge(class: nil, data: { 'date-range-target': 'endDateInput' }) %>
72
- <%= render 'headmin/forms/date', template_locals.merge(attribute: :date, name: nil) %>
34
+ <div class="row">
35
+ <div class="col">
36
+ <%= render 'headmin/forms/date', start_date_options %>
73
37
  </div>
74
- <% else %>
75
- <div class="row">
76
- <div class="col">
77
- <%= render 'headmin/forms/date', start_template_locals %>
78
- </div>
79
- <div class="col">
80
- <%= render 'headmin/forms/date', end_template_locals %>
81
- </div>
38
+ <div class="col">
39
+ <%= render 'headmin/forms/date', end_date_options %>
82
40
  </div>
83
- <% end %>
41
+ </div>
84
42
 
@@ -1,39 +1,48 @@
1
1
  <%
2
2
  # headmin/forms/email
3
3
  #
4
- # ==== Options
5
- # * <tt>form<tt> - Form object
6
- # * <tt>attribute<tt> - Name of the attribute of the form model
7
- # * <tt>label<tt> - Text to show as label. Label will be hidden if value is false
8
- # * <tt>float<tt> - Set to true if you want to show floating labels
9
- # * <tt>append<tt> - Text or icon to be shown on the left hand side of the input, Doesn't work with float
10
- # * <tt>prepend<tt> - Text or icon to be shown on the right hand side of the input, Doesn't work with float
4
+ # ==== Required parameters
5
+ # * +form+ - Form object
6
+ # * +attribute+ - Name of the attribute of the form model
7
+ #
8
+ # ==== Optional parameters
9
+ # * +aria+ - Provide a hash to define all aria attributes
10
+ # * +autocomplete+ - Value to be autofilled by the browser
11
+ # * +data+ - Provide a hash to define all data attributes
12
+ # * +disabled+ - Sets the placeholder of the field
13
+ # * +id+ - Input identifier
14
+ # * +list+ - Add array of options to show in a data list
15
+ # * +maxlength+ - Maximum amount of characters to be used
16
+ # * +minlength+ - Minimum amount of characters to be used
17
+ # * +multiple+ - Allow multiple comma-separated email addresses to be entered
18
+ # * +pattern+ -a A regular expression that the input's value must match
19
+ # * +placeholder+ - Sets the placeholder of the field
20
+ # * +readonly+ - Sets the placeholder of the field
21
+ # * +required+ - Set to true to mark as required
22
+ # * +size+ - How much of the input should be shown
23
+ # * +value+ - Overrides the value of the form
24
+ #
25
+ # ==== Extra parameters
26
+ # Listed in 'headmin/forms/base'
27
+ #
28
+ # ==== References
29
+ # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/text
30
+ # https://apidock.com/rails/ActionView/Helpers/FormHelper/text_field
11
31
  #
12
32
  # ==== Examples
13
33
  # Basic version
14
34
  # <%= render 'headmin/forms/email', form: form, attribute: :email_address %#>
15
35
 
16
- append = local_assigns.has_key?(:append) ? append : nil
17
- class_names = local_assigns.has_key?(:class) ? local_assigns[:class] : false
18
- data = local_assigns.has_key?(:data) ? data : nil
19
- disabled = local_assigns.has_key?(:disabled) ? disabled : false
20
- float = local_assigns.has_key?(:float) ? float : false
21
- label = local_assigns.has_key?(:label) ? label : nil
22
- prepend = local_assigns.has_key?(:prepend) ? prepend : nil
23
- readonly = local_assigns.has_key?(:readonly) ? readonly : false
24
- required = local_assigns.has_key?(:required) ? required : false
36
+ placeholder = local_assigns[:float] ? local_assigns[:placeholder] || attribute : local_assigns[:placeholder]
25
37
 
26
- options = {
27
- 'aria-describedby': form_field_validation_id(form, attribute),
28
- class: "form-control #{form_field_validation_class(form, attribute)} #{class_names}",
29
- data: data,
30
- disabled: disabled,
31
- placeholder: attribute,
32
- readonly: readonly,
33
- required: required,
34
- }
38
+ option_keys = %i(aria autocomplete data disabled id maxlenght minlength multiple pattern placeholder readonly required size value)
39
+ options = local_assigns.slice(*option_keys).merge(
40
+ aria: { describedby: form_field_validation_id(form, attribute) },
41
+ class: ['form-control', form_field_validation_class(form, attribute)].join(' '),
42
+ placeholder: placeholder
43
+ )
35
44
  %>
36
45
 
37
- <%= render 'headmin/forms/base', form: form, attribute: attribute, append: append, prepend: prepend, float: float, label: label, required: required do |form| %>
46
+ <%= render 'headmin/forms/base', local_assigns do |form| %>
38
47
  <%= form.email_field(attribute, options) %>
39
48
  <% end %>