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.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +33 -0
- data/CHANGELOG.md +1 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +28 -0
- data/LICENSE.txt +21 -0
- data/README.md +118 -0
- data/Rakefile +10 -0
- data/app/assets/config/headmin_manifest.js +2 -0
- data/app/assets/images/avatar.jpg +0 -0
- data/app/assets/images/document.docx +0 -0
- data/app/assets/images/document.pdf +0 -0
- data/app/assets/images/image.jpg +0 -0
- data/app/assets/images/spreadsheet.xls +0 -0
- data/app/assets/images/video.mp4 +0 -0
- data/app/assets/javascripts/formstrap/config/i18n.js +11 -0
- data/app/assets/javascripts/formstrap/controllers/autocomplete_controller.js +318 -0
- data/app/assets/javascripts/formstrap/controllers/date_range_controller.js +38 -0
- data/app/assets/javascripts/formstrap/controllers/dropzone_controller.js +31 -0
- data/app/assets/javascripts/formstrap/controllers/file_preview_controller.js +244 -0
- data/app/assets/javascripts/formstrap/controllers/flatpickr_controller.js +35 -0
- data/app/assets/javascripts/formstrap/controllers/infinite_scroller_controller.js +28 -0
- data/app/assets/javascripts/formstrap/controllers/media_controller.js +252 -0
- data/app/assets/javascripts/formstrap/controllers/media_modal_controller.js +147 -0
- data/app/assets/javascripts/formstrap/controllers/redactorx_controller.js +40 -0
- data/app/assets/javascripts/formstrap/controllers/repeater_controller.js +148 -0
- data/app/assets/javascripts/formstrap/controllers/select_controller.js +49 -0
- data/app/assets/javascripts/formstrap/controllers/textarea_controller.js +48 -0
- data/app/assets/javascripts/formstrap/index.js +32 -0
- data/app/assets/javascripts/formstrap.js +11515 -0
- data/app/assets/stylesheets/formstrap/forms/autocomplete.scss +27 -0
- data/app/assets/stylesheets/formstrap/forms/file.scss +83 -0
- data/app/assets/stylesheets/formstrap/forms/media.scss +10 -0
- data/app/assets/stylesheets/formstrap/forms/repeater.scss +62 -0
- data/app/assets/stylesheets/formstrap/forms/search.scss +12 -0
- data/app/assets/stylesheets/formstrap/forms.scss +12 -0
- data/app/assets/stylesheets/formstrap/general.scss +18 -0
- data/app/assets/stylesheets/formstrap/media/index.scss +9 -0
- data/app/assets/stylesheets/formstrap/media.scss +1 -0
- data/app/assets/stylesheets/formstrap/utilities/buttons.scss +27 -0
- data/app/assets/stylesheets/formstrap/utilities/dropzone.scss +72 -0
- data/app/assets/stylesheets/formstrap/utilities.scss +2 -0
- data/app/assets/stylesheets/formstrap/vendor/flatpickr.css +903 -0
- data/app/assets/stylesheets/formstrap/vendor/tom-select-bootstrap.scss +535 -0
- data/app/assets/stylesheets/formstrap.css +1559 -0
- data/app/assets/stylesheets/formstrap.scss +11 -0
- data/app/controllers/concerns/formstrap/pagination.rb +27 -0
- data/app/controllers/formstrap/media_controller.rb +68 -0
- data/app/controllers/formstrap_controller.rb +2 -0
- data/app/models/concerns/formstrap/autocompletable.rb +36 -0
- data/app/models/concerns/formstrap/hintable.rb +22 -0
- data/app/models/concerns/formstrap/input_groupable.rb +21 -0
- data/app/models/concerns/formstrap/labelable.rb +31 -0
- data/app/models/concerns/formstrap/listable.rb +26 -0
- data/app/models/concerns/formstrap/placeholderable.rb +11 -0
- data/app/models/concerns/formstrap/validatable.rb +38 -0
- data/app/models/concerns/formstrap/wrappable.rb +19 -0
- data/app/models/formstrap/.DS_Store +0 -0
- data/app/models/formstrap/association_view.rb +100 -0
- data/app/models/formstrap/blocks_view.rb +43 -0
- data/app/models/formstrap/checkbox_view.rb +50 -0
- data/app/models/formstrap/color_view.rb +45 -0
- data/app/models/formstrap/date_range_view.rb +23 -0
- data/app/models/formstrap/date_view.rb +43 -0
- data/app/models/formstrap/datetime_range_view.rb +23 -0
- data/app/models/formstrap/datetime_view.rb +43 -0
- data/app/models/formstrap/email_view.rb +46 -0
- data/app/models/formstrap/file_view.rb +106 -0
- data/app/models/formstrap/flatpickr_range_view.rb +89 -0
- data/app/models/formstrap/flatpickr_view.rb +27 -0
- data/app/models/formstrap/hidden_view.rb +8 -0
- data/app/models/formstrap/hint_view.rb +4 -0
- data/app/models/formstrap/input_group_view.rb +17 -0
- data/app/models/formstrap/label_view.rb +22 -0
- data/app/models/formstrap/media_item_view.rb +41 -0
- data/app/models/formstrap/media_view.rb +143 -0
- data/app/models/formstrap/number_view.rb +47 -0
- data/app/models/formstrap/password_view.rb +42 -0
- data/app/models/formstrap/redactorx_view.rb +57 -0
- data/app/models/formstrap/search_view.rb +46 -0
- data/app/models/formstrap/select_view.rb +61 -0
- data/app/models/formstrap/switch_view.rb +21 -0
- data/app/models/formstrap/text_view.rb +46 -0
- data/app/models/formstrap/textarea_view.rb +47 -0
- data/app/models/formstrap/url_view.rb +46 -0
- data/app/models/formstrap/wrapper_view.rb +17 -0
- data/app/models/formstrap/wysiwyg_view.rb +15 -0
- data/app/models/view_model.rb +62 -0
- data/app/views/formstrap/_association.html.erb +30 -0
- data/app/views/formstrap/_autocomplete.html.erb +11 -0
- data/app/views/formstrap/_blocks.html.erb +45 -0
- data/app/views/formstrap/_checkbox.html.erb +34 -0
- data/app/views/formstrap/_color.html.erb +32 -0
- data/app/views/formstrap/_datalist.html.erb +3 -0
- data/app/views/formstrap/_date.html.erb +41 -0
- data/app/views/formstrap/_date_range.html.erb +40 -0
- data/app/views/formstrap/_datetime.html.erb +41 -0
- data/app/views/formstrap/_datetime_range.html.erb +40 -0
- data/app/views/formstrap/_email.html.erb +43 -0
- data/app/views/formstrap/_errors.html.erb +19 -0
- data/app/views/formstrap/_file.html.erb +94 -0
- data/app/views/formstrap/_flatpickr.html.erb +33 -0
- data/app/views/formstrap/_flatpickr_range.html.erb +40 -0
- data/app/views/formstrap/_hidden.html.erb +23 -0
- data/app/views/formstrap/_hint.html.erb +21 -0
- data/app/views/formstrap/_input_group.html.erb +21 -0
- data/app/views/formstrap/_label.html.erb +22 -0
- data/app/views/formstrap/_media.html.erb +60 -0
- data/app/views/formstrap/_number.html.erb +41 -0
- data/app/views/formstrap/_password.html.erb +39 -0
- data/app/views/formstrap/_redactorx.html.erb +31 -0
- data/app/views/formstrap/_repeater.html.erb +128 -0
- data/app/views/formstrap/_search.html.erb +43 -0
- data/app/views/formstrap/_select.html.erb +43 -0
- data/app/views/formstrap/_switch.html.erb +29 -0
- data/app/views/formstrap/_text.html.erb +42 -0
- data/app/views/formstrap/_textarea.html.erb +39 -0
- data/app/views/formstrap/_to_ary.html.erb +0 -0
- data/app/views/formstrap/_url.html.erb +43 -0
- data/app/views/formstrap/_validation.html.erb +18 -0
- data/app/views/formstrap/_wrapper.html.erb +8 -0
- data/app/views/formstrap/_wysiwyg.html.erb +28 -0
- data/app/views/formstrap/autocomplete/_item.html.erb +3 -0
- data/app/views/formstrap/autocomplete/_list.html.erb +3 -0
- data/app/views/formstrap/blocks/_modal.html.erb +20 -0
- data/app/views/formstrap/fields/_base.html.erb +25 -0
- data/app/views/formstrap/fields/_file.html.erb +17 -0
- data/app/views/formstrap/fields/_files.html.erb +17 -0
- data/app/views/formstrap/fields/_group.html.erb +52 -0
- data/app/views/formstrap/fields/_list.html.erb +31 -0
- data/app/views/formstrap/fields/_text.html.erb +17 -0
- data/app/views/formstrap/media/_item.html.erb +38 -0
- data/app/views/formstrap/media/_media_item_modal.html.erb +77 -0
- data/app/views/formstrap/media/_modal.html.erb +40 -0
- data/app/views/formstrap/media/_thumbnail.html.erb +20 -0
- data/app/views/formstrap/media/_validation.html.erb +10 -0
- data/app/views/formstrap/media/create.turbo_stream.erb +5 -0
- data/app/views/formstrap/media/index.html.erb +3 -0
- data/app/views/formstrap/media/index.turbo_stream.erb +11 -0
- data/app/views/formstrap/media/show.html.erb +9 -0
- data/app/views/formstrap/media/thumbnail.html.erb +3 -0
- data/app/views/formstrap/media/update.turbo_stream.erb +3 -0
- data/app/views/formstrap/pagination/_infinite.html.erb +7 -0
- data/app/views/formstrap/repeater/_row.html.erb +53 -0
- data/app/views/formstrap/shared/_notifications.html.erb +20 -0
- data/app/views/formstrap/shared/_popup.html.erb +32 -0
- data/app/views/formstrap/shared/_thumbnail.html.erb +35 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/config/importmap.rb +2 -0
- data/config/locales/activerecord/en.yml +12 -0
- data/config/locales/activerecord/nl.yml +13 -0
- data/config/locales/defaults/en.yml +215 -0
- data/config/locales/defaults/nl.yml +213 -0
- data/config/locales/devise/en.yml +65 -0
- data/config/locales/devise/nl.yml +85 -0
- data/config/locales/en.yml +6 -0
- data/config/locales/formstrap/forms/en.yml +39 -0
- data/config/locales/formstrap/forms/nl.yml +39 -0
- data/config/locales/formstrap/media/en.yml +24 -0
- data/config/locales/formstrap/media/nl.yml +24 -0
- data/config/locales/formstrap/thumbnail/en.yml +4 -0
- data/config/locales/formstrap/thumbnail/nl.yml +4 -0
- data/config/locales/nl.yml +6 -0
- data/config/routes.rb +11 -0
- data/esbuild-css.js +25 -0
- data/esbuild-js.js +11 -0
- data/formstrap.gemspec +37 -0
- data/formstrap.iml +34 -0
- data/lib/formstrap/engine.rb +27 -0
- data/lib/formstrap/form_builder.rb +177 -0
- data/lib/formstrap/form_helper.rb +19 -0
- data/lib/formstrap/version.rb +3 -0
- data/lib/formstrap.rb +6 -0
- data/package.json +54 -0
- data/src/js/formstrap.js +1 -0
- data/src/scss/formstrap.scss +1 -0
- data/yarn.lock +1998 -0
- 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
|
data/lib/formstrap.rb
ADDED
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
|
+
}
|
data/src/js/formstrap.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export {Formstrap} from "../../app/assets/javascripts/formstrap/index"
|
@@ -0,0 +1 @@
|
|
1
|
+
@import "../../app/assets/stylesheets/formstrap";
|