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,177 @@
1
+ module Formstrap
2
+ class FormBuilder < ActionView::Helpers::FormBuilder
3
+ def initialize(object_name, object, template, options)
4
+ super(object_name, object, template, options)
5
+
6
+ custom_helpers_path = "app/views/formstrap/"
7
+ @custom_helpers = Dir["#{custom_helpers_path}*.html.erb"].map { |item| item.gsub("#{custom_helpers_path}_", "").split(".").first.to_sym }
8
+ end
9
+
10
+ def association_field(attribute, options = {})
11
+ render_input(:association, attribute, options)
12
+ end
13
+
14
+ def checkbox(attribute, formstrap: true, **options)
15
+ if formstrap
16
+ render_input :checkbox, attribute, options
17
+ else
18
+ check_box attribute, options
19
+ end
20
+ end
21
+
22
+ def color(attribute, formstrap: true, **options)
23
+ if formstrap
24
+ render_input :color, attribute, options
25
+ else
26
+ color_field attribute, options
27
+ end
28
+ end
29
+
30
+ def date(attribute, formstrap: true, **options)
31
+ if formstrap
32
+ render_input :date, attribute, options
33
+ else
34
+ date_field attribute, options
35
+ end
36
+ end
37
+
38
+ def date_range(attribute, options = {})
39
+ render_input(:date_range, attribute, options)
40
+ end
41
+
42
+ def datetime(attribute, formstrap: true, **options)
43
+ if formstrap
44
+ render_input :datetime, attribute, options
45
+ else
46
+ datetime_field attribute, options
47
+ end
48
+ end
49
+
50
+ def datetime_range(attribute, options = {})
51
+ render_input(:datetime_range, attribute, options)
52
+ end
53
+
54
+ def email(attribute, formstrap: true, **options)
55
+ if formstrap
56
+ render_input :email, attribute, options
57
+ else
58
+ email_field attribute, options
59
+ end
60
+ end
61
+
62
+ def file(attribute, formstrap: true, **options)
63
+ if formstrap
64
+ render_input :file, attribute, options
65
+ else
66
+ file_field attribute, options
67
+ end
68
+ end
69
+
70
+ def flatpickr(attribute, options = {})
71
+ render_input :flatpickr, attribute, options
72
+ end
73
+
74
+ def flatpickr_range(attribute, options = {})
75
+ render_input :flatpickr_range, attribute, options
76
+ end
77
+
78
+ def hidden(attribute, formstrap: true, **options)
79
+ if formstrap
80
+ render_input :hidden, attribute, options
81
+ else
82
+ hidden_field attribute, options
83
+ end
84
+ end
85
+
86
+ def media(attribute, options = {})
87
+ render_input :media, attribute, options
88
+ end
89
+
90
+ def number(attribute, formstrap: true, **options)
91
+ if formstrap
92
+ render_input :number, attribute, options
93
+ else
94
+ number_field attribute, options
95
+ end
96
+ end
97
+
98
+ def password(attribute, formstrap: true, **options)
99
+ if formstrap
100
+ render_input :password, attribute, options
101
+ else
102
+ password_field attribute, options
103
+ end
104
+ end
105
+
106
+ def redactorx(attribute, options = {})
107
+ render_input(:redactorx, attribute, options)
108
+ end
109
+
110
+ def search(attribute, options = {})
111
+ render_input(:search, attribute, options)
112
+ end
113
+
114
+ def select(attribute, formstrap: true, **options)
115
+ if formstrap
116
+ render_input(:select, attribute, options)
117
+ else
118
+ super(attribute, options[:choices], options[:options], options[:html_options])
119
+ end
120
+ end
121
+
122
+ def switch(attribute, options = {})
123
+ render_input(:switch, attribute, options)
124
+ end
125
+
126
+ def text(attribute, formstrap: true, **options)
127
+ if formstrap
128
+ render_input :text, attribute, options
129
+ else
130
+ text_field attribute, options
131
+ end
132
+ end
133
+
134
+ def textarea(attribute, formstrap: true, **options)
135
+ if formstrap
136
+ render_input :textarea, attribute, options
137
+ else
138
+ text_area attribute, options
139
+ end
140
+ end
141
+
142
+ def url(attribute, formstrap: true, **options)
143
+ if formstrap
144
+ render_input :url, attribute, options
145
+ else
146
+ url_field attribute, options
147
+ end
148
+ end
149
+
150
+ def wysiwyg(attribute, options = {})
151
+ render_input(:wysiwyg, attribute, options)
152
+ end
153
+
154
+ def render_input(name, attribute, options)
155
+ # ToDo: Find a way to import the host of the application
156
+ renderer = ApplicationController.renderer.new(
157
+ http_host: "headmin.test",
158
+ https: true
159
+ )
160
+
161
+ renderer.render(template: "formstrap/_#{name}", locals: {form: self, attribute: attribute, **options})
162
+ end
163
+
164
+ def method_missing(name, *args, &block)
165
+ attribute = args[0]
166
+ options = (args.length >= 2) ? args[1] : {}
167
+
168
+ render_input(name, attribute, options)
169
+ end
170
+
171
+ def respond_to_missing?(method_name, include_private = false)
172
+ if @custom_helpers.include?(method_name)
173
+ true
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,19 @@
1
+ module Formstrap
2
+ module FormHelper
3
+ def formstrap_form_for(record, options = {}, &block)
4
+ # ToDo: Can we pass info about the view here (e.g. host, protocol ...)
5
+ options = options.reverse_merge({builder: Formstrap::FormBuilder})
6
+ form_for(record, options, &block)
7
+ end
8
+
9
+ def formstrap_form_with(options = {}, &block)
10
+ # ToDo: Can we pass info about the view here (e.g. host, protocol ...)
11
+ options = options.reverse_merge({builder: Formstrap::FormBuilder})
12
+ form_with(**options, &block)
13
+ end
14
+ end
15
+ end
16
+
17
+ ActiveSupport.on_load(:action_view) do
18
+ include Formstrap::FormHelper
19
+ end
@@ -0,0 +1,3 @@
1
+ module Formstrap
2
+ VERSION = "0.1.0"
3
+ end
data/lib/formstrap.rb ADDED
@@ -0,0 +1,6 @@
1
+ require_relative "formstrap/version"
2
+ require_relative "formstrap/engine"
3
+
4
+ # Formstrap
5
+ require "formstrap/form_builder"
6
+ require "formstrap/form_helper"
data/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "formstrap",
3
+ "version": "0.1",
4
+ "description": "Bootstrap-powered Form Helpers",
5
+ "module": "app/assets/javascripts/formstrap.js",
6
+ "main": "app/assets/javascripts/formstrap.js",
7
+ "sass": "app/assets/stylesheets/formstrap.scss",
8
+ "style": "app/assets/stylesheets/formstrap.css",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/frontierdotbe/formstrap.git"
12
+ },
13
+ "keywords": [
14
+ "formstrap",
15
+ "frontier"
16
+ ],
17
+ "author": "Jef Vlamings <vlamingsjef@gmail.com>",
18
+ "license": "MIT",
19
+ "bugs": {
20
+ "url": "https://github.com/insiting/headmin/issues"
21
+ },
22
+ "homepage": "https://github.com/insiting/headmin#readme",
23
+ "dependencies": {
24
+ "@hotwired/stimulus": "^3.0",
25
+ "@hotwired/stimulus-webpack-helpers": "^1.0",
26
+ "@popperjs/core": "^2.11.2",
27
+ "bootstrap": "^5.1.3",
28
+ "flatpickr": "^4.6.9",
29
+ "sass": "^1.58.3",
30
+ "sortablejs": "^1.14.0",
31
+ "tom-select": "^2.0.0",
32
+ "yarn": "^1.22.18"
33
+ },
34
+ "devDependencies": {
35
+ "esbuild": "^0.14.11",
36
+ "esbuild-sass-plugin": "^2.0.3",
37
+ "standard": "^16.0.4"
38
+ },
39
+ "standard": {
40
+ "ignore": [
41
+ "formstrap.js"
42
+ ]
43
+ },
44
+ "scripts": {
45
+ "lint": "standard --fix",
46
+ "build:css": "node esbuild-css.js",
47
+ "build:js": "node esbuild-js.js",
48
+ "build": "yarn lint && yarn build:css && yarn build:js",
49
+ "watch:css": "node esbuild-css.js -w",
50
+ "watch:js": "node esbuild-js.js -w",
51
+ "watch": "yarn watch:css & yarn watch:js",
52
+ "dev": "yarn watch"
53
+ }
54
+ }
@@ -0,0 +1 @@
1
+ export {Formstrap} from "../../app/assets/javascripts/formstrap/index"
@@ -0,0 +1 @@
1
+ @import "../../app/assets/stylesheets/formstrap";