formstrap 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. checksums.yaml +7 -0
  2. data/.DS_Store +0 -0
  3. data/.gitignore +33 -0
  4. data/CHANGELOG.md +1 -0
  5. data/CODE_OF_CONDUCT.md +84 -0
  6. data/Gemfile +28 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +118 -0
  9. data/Rakefile +10 -0
  10. data/app/assets/config/headmin_manifest.js +2 -0
  11. data/app/assets/images/avatar.jpg +0 -0
  12. data/app/assets/images/document.docx +0 -0
  13. data/app/assets/images/document.pdf +0 -0
  14. data/app/assets/images/image.jpg +0 -0
  15. data/app/assets/images/spreadsheet.xls +0 -0
  16. data/app/assets/images/video.mp4 +0 -0
  17. data/app/assets/javascripts/formstrap/config/i18n.js +11 -0
  18. data/app/assets/javascripts/formstrap/controllers/autocomplete_controller.js +318 -0
  19. data/app/assets/javascripts/formstrap/controllers/date_range_controller.js +38 -0
  20. data/app/assets/javascripts/formstrap/controllers/dropzone_controller.js +31 -0
  21. data/app/assets/javascripts/formstrap/controllers/file_preview_controller.js +244 -0
  22. data/app/assets/javascripts/formstrap/controllers/flatpickr_controller.js +35 -0
  23. data/app/assets/javascripts/formstrap/controllers/infinite_scroller_controller.js +28 -0
  24. data/app/assets/javascripts/formstrap/controllers/media_controller.js +252 -0
  25. data/app/assets/javascripts/formstrap/controllers/media_modal_controller.js +147 -0
  26. data/app/assets/javascripts/formstrap/controllers/redactorx_controller.js +40 -0
  27. data/app/assets/javascripts/formstrap/controllers/repeater_controller.js +148 -0
  28. data/app/assets/javascripts/formstrap/controllers/select_controller.js +49 -0
  29. data/app/assets/javascripts/formstrap/controllers/textarea_controller.js +48 -0
  30. data/app/assets/javascripts/formstrap/index.js +32 -0
  31. data/app/assets/javascripts/formstrap.js +11515 -0
  32. data/app/assets/stylesheets/formstrap/forms/autocomplete.scss +27 -0
  33. data/app/assets/stylesheets/formstrap/forms/file.scss +83 -0
  34. data/app/assets/stylesheets/formstrap/forms/media.scss +10 -0
  35. data/app/assets/stylesheets/formstrap/forms/repeater.scss +62 -0
  36. data/app/assets/stylesheets/formstrap/forms/search.scss +12 -0
  37. data/app/assets/stylesheets/formstrap/forms.scss +12 -0
  38. data/app/assets/stylesheets/formstrap/general.scss +18 -0
  39. data/app/assets/stylesheets/formstrap/media/index.scss +9 -0
  40. data/app/assets/stylesheets/formstrap/media.scss +1 -0
  41. data/app/assets/stylesheets/formstrap/utilities/buttons.scss +27 -0
  42. data/app/assets/stylesheets/formstrap/utilities/dropzone.scss +72 -0
  43. data/app/assets/stylesheets/formstrap/utilities.scss +2 -0
  44. data/app/assets/stylesheets/formstrap/vendor/flatpickr.css +903 -0
  45. data/app/assets/stylesheets/formstrap/vendor/tom-select-bootstrap.scss +535 -0
  46. data/app/assets/stylesheets/formstrap.css +1559 -0
  47. data/app/assets/stylesheets/formstrap.scss +11 -0
  48. data/app/controllers/concerns/formstrap/pagination.rb +27 -0
  49. data/app/controllers/formstrap/media_controller.rb +68 -0
  50. data/app/controllers/formstrap_controller.rb +2 -0
  51. data/app/models/concerns/formstrap/autocompletable.rb +36 -0
  52. data/app/models/concerns/formstrap/hintable.rb +22 -0
  53. data/app/models/concerns/formstrap/input_groupable.rb +21 -0
  54. data/app/models/concerns/formstrap/labelable.rb +31 -0
  55. data/app/models/concerns/formstrap/listable.rb +26 -0
  56. data/app/models/concerns/formstrap/placeholderable.rb +11 -0
  57. data/app/models/concerns/formstrap/validatable.rb +38 -0
  58. data/app/models/concerns/formstrap/wrappable.rb +19 -0
  59. data/app/models/formstrap/.DS_Store +0 -0
  60. data/app/models/formstrap/association_view.rb +100 -0
  61. data/app/models/formstrap/blocks_view.rb +43 -0
  62. data/app/models/formstrap/checkbox_view.rb +50 -0
  63. data/app/models/formstrap/color_view.rb +45 -0
  64. data/app/models/formstrap/date_range_view.rb +23 -0
  65. data/app/models/formstrap/date_view.rb +43 -0
  66. data/app/models/formstrap/datetime_range_view.rb +23 -0
  67. data/app/models/formstrap/datetime_view.rb +43 -0
  68. data/app/models/formstrap/email_view.rb +46 -0
  69. data/app/models/formstrap/file_view.rb +106 -0
  70. data/app/models/formstrap/flatpickr_range_view.rb +89 -0
  71. data/app/models/formstrap/flatpickr_view.rb +27 -0
  72. data/app/models/formstrap/hidden_view.rb +8 -0
  73. data/app/models/formstrap/hint_view.rb +4 -0
  74. data/app/models/formstrap/input_group_view.rb +17 -0
  75. data/app/models/formstrap/label_view.rb +22 -0
  76. data/app/models/formstrap/media_item_view.rb +41 -0
  77. data/app/models/formstrap/media_view.rb +143 -0
  78. data/app/models/formstrap/number_view.rb +47 -0
  79. data/app/models/formstrap/password_view.rb +42 -0
  80. data/app/models/formstrap/redactorx_view.rb +57 -0
  81. data/app/models/formstrap/search_view.rb +46 -0
  82. data/app/models/formstrap/select_view.rb +61 -0
  83. data/app/models/formstrap/switch_view.rb +21 -0
  84. data/app/models/formstrap/text_view.rb +46 -0
  85. data/app/models/formstrap/textarea_view.rb +47 -0
  86. data/app/models/formstrap/url_view.rb +46 -0
  87. data/app/models/formstrap/wrapper_view.rb +17 -0
  88. data/app/models/formstrap/wysiwyg_view.rb +15 -0
  89. data/app/models/view_model.rb +62 -0
  90. data/app/views/formstrap/_association.html.erb +30 -0
  91. data/app/views/formstrap/_autocomplete.html.erb +11 -0
  92. data/app/views/formstrap/_blocks.html.erb +45 -0
  93. data/app/views/formstrap/_checkbox.html.erb +34 -0
  94. data/app/views/formstrap/_color.html.erb +32 -0
  95. data/app/views/formstrap/_datalist.html.erb +3 -0
  96. data/app/views/formstrap/_date.html.erb +41 -0
  97. data/app/views/formstrap/_date_range.html.erb +40 -0
  98. data/app/views/formstrap/_datetime.html.erb +41 -0
  99. data/app/views/formstrap/_datetime_range.html.erb +40 -0
  100. data/app/views/formstrap/_email.html.erb +43 -0
  101. data/app/views/formstrap/_errors.html.erb +19 -0
  102. data/app/views/formstrap/_file.html.erb +94 -0
  103. data/app/views/formstrap/_flatpickr.html.erb +33 -0
  104. data/app/views/formstrap/_flatpickr_range.html.erb +40 -0
  105. data/app/views/formstrap/_hidden.html.erb +23 -0
  106. data/app/views/formstrap/_hint.html.erb +21 -0
  107. data/app/views/formstrap/_input_group.html.erb +21 -0
  108. data/app/views/formstrap/_label.html.erb +22 -0
  109. data/app/views/formstrap/_media.html.erb +60 -0
  110. data/app/views/formstrap/_number.html.erb +41 -0
  111. data/app/views/formstrap/_password.html.erb +39 -0
  112. data/app/views/formstrap/_redactorx.html.erb +31 -0
  113. data/app/views/formstrap/_repeater.html.erb +128 -0
  114. data/app/views/formstrap/_search.html.erb +43 -0
  115. data/app/views/formstrap/_select.html.erb +43 -0
  116. data/app/views/formstrap/_switch.html.erb +29 -0
  117. data/app/views/formstrap/_text.html.erb +42 -0
  118. data/app/views/formstrap/_textarea.html.erb +39 -0
  119. data/app/views/formstrap/_to_ary.html.erb +0 -0
  120. data/app/views/formstrap/_url.html.erb +43 -0
  121. data/app/views/formstrap/_validation.html.erb +18 -0
  122. data/app/views/formstrap/_wrapper.html.erb +8 -0
  123. data/app/views/formstrap/_wysiwyg.html.erb +28 -0
  124. data/app/views/formstrap/autocomplete/_item.html.erb +3 -0
  125. data/app/views/formstrap/autocomplete/_list.html.erb +3 -0
  126. data/app/views/formstrap/blocks/_modal.html.erb +20 -0
  127. data/app/views/formstrap/fields/_base.html.erb +25 -0
  128. data/app/views/formstrap/fields/_file.html.erb +17 -0
  129. data/app/views/formstrap/fields/_files.html.erb +17 -0
  130. data/app/views/formstrap/fields/_group.html.erb +52 -0
  131. data/app/views/formstrap/fields/_list.html.erb +31 -0
  132. data/app/views/formstrap/fields/_text.html.erb +17 -0
  133. data/app/views/formstrap/media/_item.html.erb +38 -0
  134. data/app/views/formstrap/media/_media_item_modal.html.erb +77 -0
  135. data/app/views/formstrap/media/_modal.html.erb +40 -0
  136. data/app/views/formstrap/media/_thumbnail.html.erb +20 -0
  137. data/app/views/formstrap/media/_validation.html.erb +10 -0
  138. data/app/views/formstrap/media/create.turbo_stream.erb +5 -0
  139. data/app/views/formstrap/media/index.html.erb +3 -0
  140. data/app/views/formstrap/media/index.turbo_stream.erb +11 -0
  141. data/app/views/formstrap/media/show.html.erb +9 -0
  142. data/app/views/formstrap/media/thumbnail.html.erb +3 -0
  143. data/app/views/formstrap/media/update.turbo_stream.erb +3 -0
  144. data/app/views/formstrap/pagination/_infinite.html.erb +7 -0
  145. data/app/views/formstrap/repeater/_row.html.erb +53 -0
  146. data/app/views/formstrap/shared/_notifications.html.erb +20 -0
  147. data/app/views/formstrap/shared/_popup.html.erb +32 -0
  148. data/app/views/formstrap/shared/_thumbnail.html.erb +35 -0
  149. data/bin/console +14 -0
  150. data/bin/setup +8 -0
  151. data/config/importmap.rb +2 -0
  152. data/config/locales/activerecord/en.yml +12 -0
  153. data/config/locales/activerecord/nl.yml +13 -0
  154. data/config/locales/defaults/en.yml +215 -0
  155. data/config/locales/defaults/nl.yml +213 -0
  156. data/config/locales/devise/en.yml +65 -0
  157. data/config/locales/devise/nl.yml +85 -0
  158. data/config/locales/en.yml +6 -0
  159. data/config/locales/formstrap/forms/en.yml +39 -0
  160. data/config/locales/formstrap/forms/nl.yml +39 -0
  161. data/config/locales/formstrap/media/en.yml +24 -0
  162. data/config/locales/formstrap/media/nl.yml +24 -0
  163. data/config/locales/formstrap/thumbnail/en.yml +4 -0
  164. data/config/locales/formstrap/thumbnail/nl.yml +4 -0
  165. data/config/locales/nl.yml +6 -0
  166. data/config/routes.rb +11 -0
  167. data/esbuild-css.js +25 -0
  168. data/esbuild-js.js +11 -0
  169. data/formstrap.gemspec +37 -0
  170. data/formstrap.iml +34 -0
  171. data/lib/formstrap/engine.rb +27 -0
  172. data/lib/formstrap/form_builder.rb +177 -0
  173. data/lib/formstrap/form_helper.rb +19 -0
  174. data/lib/formstrap/version.rb +3 -0
  175. data/lib/formstrap.rb +6 -0
  176. data/package.json +54 -0
  177. data/src/js/formstrap.js +1 -0
  178. data/src/scss/formstrap.scss +1 -0
  179. data/yarn.lock +1998 -0
  180. metadata +224 -0
@@ -0,0 +1,46 @@
1
+ module Formstrap
2
+ class SearchView < ViewModel
3
+ include Formstrap::Autocompletable
4
+ include Formstrap::Hintable
5
+ include Formstrap::InputGroupable
6
+ include Formstrap::Labelable
7
+ include Formstrap::Listable
8
+ include Formstrap::Placeholderable
9
+ include Formstrap::Validatable
10
+ include Formstrap::Wrappable
11
+
12
+ def input_options
13
+ keys = attributes - %i[append attribute collection float form input_group label prepend validate wrapper]
14
+ options = to_h.slice(*keys)
15
+ options = default_input_options.deep_merge(options)
16
+ options.deep_merge(autocomplete_input_options)
17
+ end
18
+
19
+ def input_group_options
20
+ default_input_group_options
21
+ .deep_merge(autocomplete_input_group_options)
22
+ .deep_merge(label_input_group_options)
23
+ .deep_merge(@input_group || {})
24
+ end
25
+
26
+ def wrapper_options
27
+ default_wrapper_options.deep_merge({
28
+ class: ["mb-3", ("form-floating" if float)]
29
+ }).deep_merge(@wrapper || {})
30
+ end
31
+
32
+ private
33
+
34
+ def default_input_options
35
+ {
36
+ aria: {describedby: validation_id},
37
+ class: [form_control_class, validation_class],
38
+ placeholder: placeholder
39
+ }
40
+ end
41
+
42
+ def form_control_class
43
+ plaintext ? "form-control-plaintext" : "form-control"
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,61 @@
1
+ module Formstrap
2
+ class SelectView < ViewModel
3
+ include Formstrap::Hintable
4
+ include Formstrap::InputGroupable
5
+ include Formstrap::Labelable
6
+ include Formstrap::Listable
7
+ include Formstrap::Placeholderable
8
+ include Formstrap::Validatable
9
+ include Formstrap::Wrappable
10
+
11
+ def input_options
12
+ keys = attributes - %i[append attribute collection float form input_group include_blank label prepend validate selected tags wrapper]
13
+ options = to_h.slice(*keys)
14
+ default_input_options.deep_merge(options)
15
+ end
16
+
17
+ def input_group_options
18
+ default_input_group_options
19
+ .deep_merge(label_input_group_options)
20
+ .deep_merge(@input_group || {})
21
+ end
22
+
23
+ def wrapper_options
24
+ default_wrapper_options.deep_merge({
25
+ class: ["mb-3", ("form-floating" if float)]
26
+ }).deep_merge(@wrapper || {})
27
+ end
28
+
29
+ def select_options
30
+ keys = %i[include_blank selected]
31
+ options = to_h.slice(*keys)
32
+ default_options.deep_merge(options)
33
+ end
34
+
35
+ private
36
+
37
+ def default_options
38
+ selected = attribute.nil? ? nil : form.object&.send(attribute)
39
+ {
40
+ selected: selected
41
+ }
42
+ end
43
+
44
+ def default_input_options
45
+ {
46
+ aria: {describedby: validation_id},
47
+ class: [form_control_class, validation_class],
48
+ data: {
49
+ tags: tags,
50
+ controller: "select"
51
+ },
52
+ multiple: tags,
53
+ placeholder: placeholder
54
+ }
55
+ end
56
+
57
+ def form_control_class
58
+ plaintext ? "form-control-plaintext" : "form-select"
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,21 @@
1
+ module Formstrap
2
+ class SwitchView < ViewModel
3
+ def options
4
+ default_options.deep_merge(to_h)
5
+ end
6
+
7
+ private
8
+
9
+ def default_options
10
+ {
11
+ wrapper: default_wrapper_options
12
+ }
13
+ end
14
+
15
+ def default_wrapper_options
16
+ {
17
+ class: %w[form-check form-switch mb-3]
18
+ }
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,46 @@
1
+ module Formstrap
2
+ class TextView < ViewModel
3
+ include Formstrap::Autocompletable
4
+ include Formstrap::Hintable
5
+ include Formstrap::InputGroupable
6
+ include Formstrap::Labelable
7
+ include Formstrap::Listable
8
+ include Formstrap::Placeholderable
9
+ include Formstrap::Validatable
10
+ include Formstrap::Wrappable
11
+
12
+ def input_options
13
+ keys = attributes - %i[append attribute collection float form input_group label prepend validate wrapper]
14
+ options = to_h.slice(*keys)
15
+ options = default_input_options.deep_merge(options)
16
+ options.deep_merge(autocomplete_input_options)
17
+ end
18
+
19
+ def input_group_options
20
+ default_input_group_options
21
+ .deep_merge(autocomplete_input_group_options)
22
+ .deep_merge(label_input_group_options)
23
+ .deep_merge(@input_group || {})
24
+ end
25
+
26
+ def wrapper_options
27
+ default_wrapper_options.deep_merge({
28
+ class: ["mb-3", ("form-floating" if float)]
29
+ }).deep_merge(@wrapper || {})
30
+ end
31
+
32
+ private
33
+
34
+ def default_input_options
35
+ {
36
+ aria: {describedby: validation_id},
37
+ class: [form_control_class, validation_class],
38
+ placeholder: placeholder
39
+ }
40
+ end
41
+
42
+ def form_control_class
43
+ plaintext ? "form-control-plaintext" : "form-control"
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,47 @@
1
+ module Formstrap
2
+ class TextareaView < ViewModel
3
+ include Formstrap::Hintable
4
+ include Formstrap::InputGroupable
5
+ include Formstrap::Labelable
6
+ include Formstrap::Placeholderable
7
+ include Formstrap::Validatable
8
+ include Formstrap::Wrappable
9
+
10
+ def input_options
11
+ keys = attributes - %i[attribute float form input_group label validate wrapper]
12
+ options = to_h.slice(*keys)
13
+ default_input_options.deep_merge(options)
14
+ end
15
+
16
+ def input_group_options
17
+ default_input_group_options
18
+ .deep_merge(label_input_group_options)
19
+ .deep_merge(@input_group || {})
20
+ end
21
+
22
+ def wrapper_options
23
+ default_wrapper_options.deep_merge({
24
+ class: ["mb-3", ("form-floating" if float)],
25
+ data: {controller: :textarea}
26
+ }).deep_merge(@wrapper || {})
27
+ end
28
+
29
+ private
30
+
31
+ def default_input_options
32
+ {
33
+ aria: {describedby: validation_id},
34
+ class: [form_control_class, validation_class],
35
+ data: {
36
+ textarea_target: :textarea,
37
+ action: "input->textarea#update"
38
+ },
39
+ placeholder: placeholder
40
+ }
41
+ end
42
+
43
+ def form_control_class
44
+ plaintext ? "form-control-plaintext" : "form-control"
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,46 @@
1
+ module Formstrap
2
+ class UrlView < ViewModel
3
+ include Formstrap::Autocompletable
4
+ include Formstrap::Hintable
5
+ include Formstrap::InputGroupable
6
+ include Formstrap::Labelable
7
+ include Formstrap::Listable
8
+ include Formstrap::Placeholderable
9
+ include Formstrap::Validatable
10
+ include Formstrap::Wrappable
11
+
12
+ def input_options
13
+ keys = attributes - %i[append attribute collection float form input_group label prepend validate wrapper]
14
+ options = to_h.slice(*keys)
15
+ options = default_input_options.deep_merge(options)
16
+ options.deep_merge(autocomplete_input_options)
17
+ end
18
+
19
+ def input_group_options
20
+ default_input_group_options
21
+ .deep_merge(autocomplete_input_group_options)
22
+ .deep_merge(label_input_group_options)
23
+ .deep_merge(@input_group || {})
24
+ end
25
+
26
+ def wrapper_options
27
+ default_wrapper_options.deep_merge({
28
+ class: ["mb-3", ("form-floating" if float)]
29
+ }).deep_merge(@wrapper || {})
30
+ end
31
+
32
+ private
33
+
34
+ def default_input_options
35
+ {
36
+ aria: {describedby: validation_id},
37
+ class: [form_control_class, validation_class],
38
+ placeholder: placeholder
39
+ }
40
+ end
41
+
42
+ def form_control_class
43
+ plaintext ? "form-control-plaintext" : "form-control"
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,17 @@
1
+ module Formstrap
2
+ class WrapperView < ViewModel
3
+ def options
4
+ keys = attributes - %i[bypass]
5
+ options = to_h.slice(*keys)
6
+ default_options.deep_merge(options)
7
+ end
8
+
9
+ private
10
+
11
+ def default_options
12
+ {
13
+ class: ["mb-3"]
14
+ }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module Formstrap
2
+ class WysiwygView < ViewModel
3
+ def options
4
+ default_options.deep_merge(to_h)
5
+ end
6
+
7
+ private
8
+
9
+ def default_options
10
+ {
11
+ hybrid: toolbar == false
12
+ }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ViewModel
4
+ # = View Model
5
+ #
6
+ # A View Model is a class that allows you to set an arbitrary hash of attributes and access all values by calling
7
+ # attribute methods.
8
+ #
9
+ # ==== Examples
10
+ #
11
+ # model = ViewModel.new(a: 1, b: {b1: 1, b2: 2}, c: 3)
12
+ #
13
+ # model.a # => 1
14
+ # model.b # => {b1: 1, b2: 2}
15
+ # model.c # => 3
16
+ #
17
+ # Reserved methods or attributes are left untouched. If you want to access an attribute that collides with a reserved
18
+ # method, you can do it via the +to_hash+ method.
19
+ #
20
+ # model = ViewModel.new(class: "test")
21
+ #
22
+ # model.class # => ViewModel
23
+ # model.to_hash[:class] # => "test"
24
+
25
+ def initialize(hash = {})
26
+ hash.each do |key, value|
27
+ instance_variable_set("@#{key}", value)
28
+ end
29
+ end
30
+
31
+ def attributes
32
+ instance_variables.map { |instance_variable| instance_variable.to_s.delete("@").to_sym }
33
+ end
34
+
35
+ def to_hash
36
+ attributes.map { |attribute| {attribute => value_for(attribute)} }.inject(:merge) || {}
37
+ end
38
+
39
+ alias_method :to_h, :to_hash
40
+
41
+ private
42
+
43
+ def is_defined?(attribute)
44
+ attributes.include?(attribute.to_sym)
45
+ end
46
+
47
+ def value_for(attribute)
48
+ reserved_methods.include?(attribute) ? instance_variable_get("@#{attribute}") : send(attribute)
49
+ end
50
+
51
+ def method_missing(m, *args, &block)
52
+ instance_variable_get("@#{m}")
53
+ end
54
+
55
+ def respond_to_missing?
56
+ true
57
+ end
58
+
59
+ def reserved_methods
60
+ Class.methods + Class.private_methods
61
+ end
62
+ end
@@ -0,0 +1,30 @@
1
+ <%
2
+ # formstrap/association
3
+ #
4
+ # ==== Required parameters
5
+ # * +attribute+ - Name of the association
6
+ # * +form+ - Form object
7
+ #
8
+ # ==== Optional parameters
9
+ # * +collection+ - Values to create option tags for
10
+ #
11
+ #
12
+ # ==== Examples
13
+ # Basic version
14
+ # <%= form_with do |form| %#>
15
+ # <%= render "formstrap/association", form: form, attribute: :product %#>
16
+ # <% end %#>
17
+
18
+ association = Formstrap::AssociationView.new(local_assigns)
19
+
20
+ %>
21
+
22
+ <%= render "formstrap/wrapper", association.wrapper_options do %>
23
+ <%= render "formstrap/label", association.label_options if association.prepend_label? %>
24
+ <%= render "formstrap/input_group", association.input_group_options do %>
25
+ <%= form.select(association.attribute_with_id, formstrap: false, choices: association.collection, options: association.select_options, html_options: association.input_options) %>
26
+ <% end %>
27
+ <%= render "formstrap/validation", association.validation_options if association.validate? %>
28
+ <%= render "formstrap/hint", association.hint_options if association.hint? %>
29
+ <%= render "formstrap/label", association.label_options if association.append_label? %>
30
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <div class="h-autocomplete d-none" data-autocomplete-target="dropdown">
2
+ <% if collection.any? %>
3
+ <%= render "formstrap/autocomplete/list" do %>
4
+ <% collection.each do |value, name| %>
5
+ <%= render "formstrap/autocomplete/item", value: value do %>
6
+ <%= name %>
7
+ <% end %>
8
+ <% end %>
9
+ <% end %>
10
+ <% end %>
11
+ </div>
@@ -0,0 +1,45 @@
1
+ <%
2
+ # formstrap/blocks
3
+ #
4
+ # ==== Required parameters
5
+ # * +form</tt> - Form object
6
+ # * +names</tt> - Names of block templates that can be added
7
+ #
8
+ # ==== Optional parameters
9
+ # * +paths</tt> - Directories where to look for block templates
10
+ #
11
+ # ==== Examples
12
+ # Basic version. (looks in views/admin/blocks, views/blocks or views directory )
13
+ # <%= render "formstrap/blocks", form: form, names: %w(text image button) %#>
14
+ #
15
+ # Define one ore more path where the templates could be located:
16
+ # <%= render "formstrap/blocks", form: form, names: %w(text image button), paths: %w(admin/pages/blocks) %#>
17
+ #
18
+ # Limit the types of blocks
19
+ # <%= render "formstrap/blocks", form: form, names: %w(text text_image list) %#>
20
+
21
+ blocks = Formstrap::BlocksView.new(local_assigns)
22
+ @lookup_context.prefixes = @lookup_context.prefixes + blocks.prefixes
23
+ %>
24
+
25
+ <%= render "formstrap/repeater", blocks.repeater_options do |block_form, template| %>
26
+ <% name = template || block_form.object.name %>
27
+ <!-- Name input of the block -->
28
+ <%= block_form.hidden_field :name, value: name %>
29
+
30
+ <!-- Render block form fields -->
31
+ <div class="<%= block_form.object.visible ? "" : "opacity-50" %>">
32
+ <%= render name, form: block_form %>
33
+ </div>
34
+ <% badge_style = blocks.badge_style(block_form.object) %>
35
+
36
+ <!-- Label -->
37
+ <span class="position-absolute top-0 end-0 badge rounded-0 d-flex align-items-center gap-2 bg-danger <%= badge_style %>">
38
+ <%= t("blocks.#{name}", default: name).humanize %>
39
+ <button type="button" class="btn p-0 <%= badge_style %>" data-bs-toggle="modal" data-bs-target="#modal-block-<%= block_form.object.id %>">
40
+ <%= bootstrap_icon("gear") %>
41
+ </button>
42
+ </span>
43
+
44
+ <%= render "formstrap/blocks/modal", form: block_form, name: name %>
45
+ <% end %>
@@ -0,0 +1,34 @@
1
+ <%
2
+ # formstrap/checkbox
3
+ #
4
+ # ==== Required parameters
5
+ # * +attribute+ - Name of the attribute of the form model
6
+ # * +form+ - Form object
7
+ #
8
+ # ==== Optional parameters
9
+ # * +checked_value+ - Value for checked state
10
+ # * +hint+ - Informative text to assist with data input. HTML markup is allowed.
11
+ # * +label+ - Text to display inside label tag. Defaults to the attribute name. Set to false if you don"t want to show a label.
12
+ # * +unchecked_value+ - Value for unchecked state
13
+ # * +wrapper+ - Hash with all options for the surrounding html tag
14
+ #
15
+ # ==== References
16
+ # https://headmin.dev/docs/forms/checkbox
17
+ # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox
18
+ # https://apidock.com/rails/ActionView/Helpers/FormHelper/check_box
19
+ #
20
+ # ==== Examples
21
+ # Basic version
22
+ # <%= form_with do |form| %#>
23
+ # <%= render "formstrap/checkbox", form: form, attribute: :active %#>
24
+ # <% end %#>
25
+
26
+ checkbox = Formstrap::CheckboxView.new(local_assigns)
27
+ %>
28
+
29
+ <%= render "formstrap/wrapper", checkbox.wrapper_options do %>
30
+ <%= form.check_box(checkbox.attribute, checkbox.input_options, checkbox.checked_value, checkbox.unchecked_value) %>
31
+ <%= render "formstrap/label", checkbox.label_options if checkbox.label? %>
32
+ <%= render "formstrap/validation", checkbox.validation_options if checkbox.validate? %>
33
+ <%= render "formstrap/hint", checkbox.hint_options if checkbox.hint? %>
34
+ <% end %>
@@ -0,0 +1,32 @@
1
+ <%
2
+ # formstrap/color
3
+ #
4
+ # ==== Required parameters
5
+ # * +attribute+ - Name of the attribute of the form model
6
+ # * +form+ - Form object
7
+ #
8
+ # ==== Optional parameters
9
+ # * +hint+ - Informative text to assist with data input. HTML markup is allowed.
10
+ # * +label+ - Text to display inside label tag. Defaults to the attribute name. Set to false if you don"t want to show a label.
11
+ # * +wrapper+ - Hash with all options for the surrounding html tag
12
+ #
13
+ # ==== References
14
+ # https://headmin.dev/docs/forms/color
15
+ # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/color
16
+ # https://apidock.com/rails/v5.2.3/ActionView/Helpers/FormHelper/color_field
17
+ #
18
+ # ==== Examples
19
+ # Basic version
20
+ # <%= form_with do |form| %#>
21
+ # <%= render "formstrap/color", form: form, attribute: :active %#>
22
+ # <% end %#>
23
+
24
+ color = Formstrap::ColorView.new(local_assigns)
25
+ %>
26
+
27
+ <%= render "formstrap/wrapper", color.wrapper_options do %>
28
+ <%= render "formstrap/label", color.label_options if color.label? %>
29
+ <%= form.color_field(color.attribute, color.input_options) %>
30
+ <%= render "formstrap/validation", color.validation_options if color.validate? %>
31
+ <%= render "formstrap/hint", color.hint_options if color.hint? %>
32
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <datalist id="<%= id %>">
2
+ <%= options_for_select(collection) %>
3
+ </datalist>
@@ -0,0 +1,41 @@
1
+ <%
2
+ # formstrap/date
3
+ #
4
+ # ==== Required parameters
5
+ # * +attribute+ - Name of the attribute of the form model
6
+ # * +form+ - Form object
7
+ #
8
+ # ==== Optional parameters
9
+ # * +append+ - Display as input group with text on the right-hand side
10
+ # * +float+ - Use floating labels. Defaults to false
11
+ # * +hint+ - Informative text to assist with data input. HTML markup is allowed.
12
+ # * +label+ - Text to display inside label tag. Defaults to the attribute name. Set to false if you don"t want to show a label.
13
+ # * +list+ - Options are passed through options_for_select
14
+ # * +plaintext+ - Render input as plain text.
15
+ # * +prepend+ - Display as input group with text on the left-hand side
16
+ # * +wrapper+ - Hash with all options for the surrounding html tag
17
+ #
18
+ # ==== References
19
+ # https://headmin.dev/docs/forms/date
20
+ # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date
21
+ # https://apidock.com/rails/ActionView/Helpers/FormHelper/date_field
22
+ #
23
+ # ==== Examples
24
+ # Basic version
25
+ # <%= form_with do |form| %#>
26
+ # <%= render "formstrap/date", form: form, attribute: :date_of_birth %#>
27
+ # <% end %#>
28
+
29
+ date = Formstrap::DateView.new(local_assigns)
30
+ %>
31
+
32
+ <%= render "formstrap/wrapper", date.wrapper_options do %>
33
+ <%= render "formstrap/label", date.label_options if date.prepend_label? %>
34
+ <%= render "formstrap/input_group", date.input_group_options do %>
35
+ <%= form.date_field(date.attribute, date.input_options) %>
36
+ <%= render "formstrap/datalist", date.datalist_options if date.datalist? %>
37
+ <% end %>
38
+ <%= render "formstrap/validation", date.validation_options if date.validate? %>
39
+ <%= render "formstrap/hint", date.hint_options if date.hint? %>
40
+ <%= render "formstrap/label", date.label_options if date.append_label? %>
41
+ <% end %>
@@ -0,0 +1,40 @@
1
+ <%
2
+ # formstrap/date_range
3
+ #
4
+ # ==== Required parameters
5
+ # * +form+ - Form object
6
+ # * +start+ - Hash with all options for the start date input (:attribute is required)
7
+ # * +end+ - Hash with all options for the end date input (:attribute is required)
8
+ #
9
+ # ==== Optional parameters
10
+ # * +append+ - Display as input group with text on the right-hand side
11
+ # * +float+ - Use floating labels. Defaults to false
12
+ # * +hint+ - Informative text to assist with data input. HTML markup is allowed.
13
+ # * +label+ - Text to display inside label tag. Defaults to the attribute name. Set to false if you don"t want to show a label.
14
+ # * +plaintext+ - Render input as plain text.
15
+ # * +prepend+ - Display as input group with text on the left-hand side
16
+ # * +wrapper+ - Hash with all options for the surrounding html tag
17
+ #
18
+ # ==== References
19
+ # https://headmin.dev/docs/forms/date_range
20
+ # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/date
21
+ # https://apidock.com/rails/ActionView/Helpers/FormHelper/date_field
22
+ #
23
+ # ==== Examples
24
+ # Basic version
25
+ # <%= form_with do |form| %#>
26
+ # <%= render "formstrap/date_range", form: form, start: {attribute: :start_date}, end: {attribute: :end_date} %#>
27
+ # <% end %#>
28
+
29
+ date_range = Formstrap::DateRangeView.new(local_assigns)
30
+ %>
31
+
32
+ <div class="row">
33
+ <div class="col">
34
+ <%= render "formstrap/date", date_range.start_options %>
35
+ </div>
36
+ <div class="col">
37
+ <%= render "formstrap/date", date_range.end_options %>
38
+ </div>
39
+ </div>
40
+
@@ -0,0 +1,41 @@
1
+ <%
2
+ # formstrap/datetime
3
+ #
4
+ # ==== Required parameters
5
+ # * +attribute+ - Name of the attribute of the form model
6
+ # * +form+ - Form object
7
+ #
8
+ # ==== Optional parameters
9
+ # * +append+ - Display as input group with text on the right-hand side
10
+ # * +float+ - Use floating labels. Defaults to false
11
+ # * +hint+ - Informative text to assist with data input. HTML markup is allowed.
12
+ # * +label+ - Text to display inside label tag. Defaults to the attribute name. Set to false if you don"t want to show a label.
13
+ # * +list+ - Options are passed through options_for_select
14
+ # * +plaintext+ - Render input as plain text.
15
+ # * +prepend+ - Display as input group with text on the left-hand side
16
+ # * +wrapper+ - Hash with all options for the surrounding html tag
17
+ #
18
+ # ==== References
19
+ # https://headmin.dev/docs/forms/datetime
20
+ # https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local
21
+ # https://apidock.com/rails/ActionView/Helpers/FormHelper/datetime_field
22
+ #
23
+ # ==== Examples
24
+ # Basic version
25
+ # <%= form_with do |form| %#>
26
+ # <%= render "formstrap/datetime", form: form, attribute: :deadline %#>
27
+ # <% end %#>
28
+
29
+ datetime = Formstrap::DatetimeView.new(local_assigns)
30
+ %>
31
+
32
+ <%= render "formstrap/wrapper", datetime.wrapper_options do %>
33
+ <%= render "formstrap/label", datetime.label_options if datetime.prepend_label? %>
34
+ <%= render "formstrap/input_group", datetime.input_group_options do %>
35
+ <%= form.datetime_field(datetime.attribute, datetime.input_options) %>
36
+ <%= render "formstrap/datalist", datetime.datalist_options if datetime.datalist? %>
37
+ <% end %>
38
+ <%= render "formstrap/validation", datetime.validation_options if datetime.validate? %>
39
+ <%= render "formstrap/hint", datetime.hint_options if datetime.hint? %>
40
+ <%= render "formstrap/label", datetime.label_options if datetime.append_label? %>
41
+ <% end %>