formstrap 0.3.3 → 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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/app/assets/javascripts/formstrap/controllers/redactor_controller.js +18 -0
- data/app/assets/javascripts/formstrap/controllers/select_controller.js +22 -18
- data/app/assets/javascripts/formstrap/index.js +5 -2
- data/app/assets/javascripts/formstrap/vendor/redactor/i18n/de.js +214 -0
- data/app/assets/javascripts/formstrap/vendor/redactor/i18n/en.js +214 -0
- data/app/assets/javascripts/formstrap/vendor/redactor/i18n/fr.js +214 -0
- data/app/assets/javascripts/formstrap/vendor/redactor/i18n/nl.js +214 -0
- data/app/assets/javascripts/formstrap/vendor/redactor/index.js +5 -0
- data/app/assets/javascripts/formstrap/vendor/redactor/plugins/emoji.js +332 -0
- data/app/assets/javascripts/formstrap/vendor/redactor/plugins/linkstyles.js +124 -0
- data/app/assets/javascripts/formstrap.js +1295 -148
- data/app/assets/stylesheets/formstrap/general.scss +0 -6
- data/app/assets/stylesheets/formstrap/vendor/overrides/redactor.scss +151 -0
- data/app/assets/stylesheets/formstrap/vendor/redactor.css +2535 -0
- data/app/assets/stylesheets/formstrap.css +2650 -5
- data/app/assets/stylesheets/formstrap.scss +4 -0
- data/app/models/formstrap/redactor_view.rb +57 -0
- data/app/models/formstrap/wysiwyg_view.rb +9 -1
- data/app/views/formstrap/{_redactorx.html.erb → _redactor.html.erb} +4 -7
- data/app/views/formstrap/_wysiwyg.html.erb +3 -5
- data/lib/formstrap/form_builder.rb +12 -4
- data/lib/formstrap/version.rb +1 -1
- data/package.json +2 -2
- data/yarn.lock +4 -4
- metadata +14 -5
- data/app/assets/javascripts/formstrap/controllers/redactorx_controller.js +0 -40
- data/app/models/formstrap/redactorx_view.rb +0 -57
@@ -0,0 +1,57 @@
|
|
1
|
+
module Formstrap
|
2
|
+
class RedactorView < ViewModel
|
3
|
+
def options
|
4
|
+
default_options.deep_merge(to_h)
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def default_options
|
10
|
+
{
|
11
|
+
data: {
|
12
|
+
controller: "redactor",
|
13
|
+
"redactor-options": redactor_options
|
14
|
+
}
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def redactor_options
|
19
|
+
default_redactor_options.deep_merge(redactor || {})
|
20
|
+
end
|
21
|
+
|
22
|
+
def default_redactor_options
|
23
|
+
{
|
24
|
+
lang: I18n.locale,
|
25
|
+
# button to control a block/line in the editor
|
26
|
+
control: false,
|
27
|
+
minHeight: '57px',
|
28
|
+
theme: "light",
|
29
|
+
# Popup when highlighting text
|
30
|
+
context: false,
|
31
|
+
# Top toolbar
|
32
|
+
toolbar: true,
|
33
|
+
popups: {
|
34
|
+
# Options in addbar popup (press + button)
|
35
|
+
addbar: %w[format bold italic deleted list table link embed],
|
36
|
+
# Options in block/line popup
|
37
|
+
control: [],
|
38
|
+
# Options in format popup
|
39
|
+
format: %w[text h1 h2 h3 h4],
|
40
|
+
},
|
41
|
+
block: {
|
42
|
+
# Outline block/line in the editor
|
43
|
+
outline: false,
|
44
|
+
},
|
45
|
+
buttons: {
|
46
|
+
# Options when highlighting text
|
47
|
+
context: %w[bold underline italic],
|
48
|
+
# Options in toolbar on the right
|
49
|
+
extrabar: %w[],
|
50
|
+
# Options in toolbar on the left
|
51
|
+
toolbar: %w[format bold italic deleted list table link html],
|
52
|
+
},
|
53
|
+
plugins: %w[emoji linkstyles],
|
54
|
+
}.delete_if { |k, v| v.nil? }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<%
|
2
|
-
# formstrap/
|
2
|
+
# formstrap/redactor
|
3
3
|
#
|
4
4
|
# ==== Required parameters
|
5
5
|
# * +attribute+ - Name of the attribute of the form model
|
@@ -8,24 +8,21 @@
|
|
8
8
|
# ==== Optional parameters
|
9
9
|
# * +append+ - Display as input group with text on the right-hand side
|
10
10
|
# * +hint+ - Informative text to assist with data input. HTML markup is allowed.
|
11
|
-
# * +hybrid+ - Enables hybrid mode when set to true (default = false)
|
12
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.
|
13
12
|
# * +prepend+ - Display as input group with text on the left-hand side
|
14
13
|
# * +redactor+ - Hash with all options you can pass to redactor JS config
|
15
14
|
# * +wrapper+ - Hash with all options for the surrounding html tag
|
16
15
|
#
|
17
16
|
# ==== References
|
18
|
-
# https://
|
19
|
-
# https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea
|
20
|
-
# https://apidock.com/rails/ActionView/Helpers/FormHelper/text_area
|
17
|
+
# https://imperavi.com/redactor/docs
|
21
18
|
#
|
22
19
|
# ==== Examples
|
23
20
|
# Basic version
|
24
21
|
# <%= form_with do |form| %#>
|
25
|
-
# <%= render "formstrap/
|
22
|
+
# <%= render "formstrap/redactor", form: form, attribute: :text %#>
|
26
23
|
# <% end %#>
|
27
24
|
|
28
|
-
redactor = Formstrap::
|
25
|
+
redactor = Formstrap::RedactorView.new(local_assigns)
|
29
26
|
%>
|
30
27
|
|
31
28
|
<%= render "formstrap/textarea", redactor.options %>
|
@@ -12,17 +12,15 @@
|
|
12
12
|
# * +wrapper+ - Hash with all options for the surrounding html tag
|
13
13
|
#
|
14
14
|
# ==== References
|
15
|
-
# https://
|
16
|
-
# https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea
|
17
|
-
# https://apidock.com/rails/ActionView/Helpers/FormHelper/text_area
|
15
|
+
# https://imperavi.com/redactor/docs
|
18
16
|
#
|
19
17
|
# ==== Examples
|
20
18
|
# Basic version
|
21
19
|
# <%= form_with do |form| %#>
|
22
|
-
# <%= render "formstrap/
|
20
|
+
# <%= render "formstrap/wysiwyg", form: form, attribute: :text %#>
|
23
21
|
# <% end %#>
|
24
22
|
|
25
23
|
wysiwyg = Formstrap::WysiwygView.new(local_assigns)
|
26
24
|
%>
|
27
25
|
|
28
|
-
<%= render "formstrap/
|
26
|
+
<%= render "formstrap/redactor", wysiwyg.options %>
|
@@ -118,8 +118,12 @@ module Formstrap
|
|
118
118
|
@template.render("formstrap/repeater", form: self, attribute: attribute, **options, &block)
|
119
119
|
end
|
120
120
|
|
121
|
-
def
|
122
|
-
|
121
|
+
def redactor(attribute, formstrap: true, **options)
|
122
|
+
if formstrap
|
123
|
+
render_input(:redactor, attribute, options)
|
124
|
+
else
|
125
|
+
text_area attribute, options
|
126
|
+
end
|
123
127
|
end
|
124
128
|
|
125
129
|
def search(attribute, options = {})
|
@@ -162,8 +166,12 @@ module Formstrap
|
|
162
166
|
end
|
163
167
|
end
|
164
168
|
|
165
|
-
def wysiwyg(attribute,
|
166
|
-
|
169
|
+
def wysiwyg(attribute, formstrap: true, **options)
|
170
|
+
if formstrap
|
171
|
+
render_input(:wysiwyg, attribute, options)
|
172
|
+
else
|
173
|
+
text_area attribute, options
|
174
|
+
end
|
167
175
|
end
|
168
176
|
|
169
177
|
def render_input(name, attribute, options)
|
data/lib/formstrap/version.rb
CHANGED
data/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@frontierdotbe/formstrap",
|
3
|
-
"version": "0.3.
|
3
|
+
"version": "0.3.3",
|
4
4
|
"description": "Bootstrap-powered Form Helpers",
|
5
5
|
"module": "app/assets/javascripts/formstrap.js",
|
6
6
|
"main": "app/assets/javascripts/formstrap.js",
|
@@ -28,7 +28,7 @@
|
|
28
28
|
"flatpickr": "^4.6.9",
|
29
29
|
"sass": "^1.58.3",
|
30
30
|
"sortablejs": "^1.14.0",
|
31
|
-
"tom-select": "^2.
|
31
|
+
"tom-select": "^2.3.1",
|
32
32
|
"yarn": "^1.22.18"
|
33
33
|
},
|
34
34
|
"devDependencies": {
|
data/yarn.lock
CHANGED
@@ -1710,10 +1710,10 @@ to-regex-range@^5.0.1:
|
|
1710
1710
|
dependencies:
|
1711
1711
|
is-number "^7.0.0"
|
1712
1712
|
|
1713
|
-
tom-select@^2.
|
1714
|
-
version "2.
|
1715
|
-
resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.
|
1716
|
-
integrity sha512-
|
1713
|
+
tom-select@^2.3.1:
|
1714
|
+
version "2.3.1"
|
1715
|
+
resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.3.1.tgz#df338d9082874cd0bceb3bee87ed0184447c47f1"
|
1716
|
+
integrity sha512-QS4vnOcB6StNGqX4sGboGXL2fkhBF2gIBB+8Hwv30FZXYPn0CyYO8kkdATRvwfCTThxiR4WcXwKJZ3cOmtI9eg==
|
1717
1717
|
dependencies:
|
1718
1718
|
"@orchidjs/sifter" "^1.0.3"
|
1719
1719
|
"@orchidjs/unicode-variants" "^1.0.4"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jef Vlamings
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: An extensive Bootstrap form library to power your Ruby On Rails application.
|
14
14
|
email:
|
@@ -47,11 +47,18 @@ files:
|
|
47
47
|
- app/assets/javascripts/formstrap/controllers/nested_preview_controller.js
|
48
48
|
- app/assets/javascripts/formstrap/controllers/popup_controller.js
|
49
49
|
- app/assets/javascripts/formstrap/controllers/preview_controller.js
|
50
|
-
- app/assets/javascripts/formstrap/controllers/
|
50
|
+
- app/assets/javascripts/formstrap/controllers/redactor_controller.js
|
51
51
|
- app/assets/javascripts/formstrap/controllers/repeater_controller.js
|
52
52
|
- app/assets/javascripts/formstrap/controllers/select_controller.js
|
53
53
|
- app/assets/javascripts/formstrap/controllers/textarea_controller.js
|
54
54
|
- app/assets/javascripts/formstrap/index.js
|
55
|
+
- app/assets/javascripts/formstrap/vendor/redactor/i18n/de.js
|
56
|
+
- app/assets/javascripts/formstrap/vendor/redactor/i18n/en.js
|
57
|
+
- app/assets/javascripts/formstrap/vendor/redactor/i18n/fr.js
|
58
|
+
- app/assets/javascripts/formstrap/vendor/redactor/i18n/nl.js
|
59
|
+
- app/assets/javascripts/formstrap/vendor/redactor/index.js
|
60
|
+
- app/assets/javascripts/formstrap/vendor/redactor/plugins/emoji.js
|
61
|
+
- app/assets/javascripts/formstrap/vendor/redactor/plugins/linkstyles.js
|
55
62
|
- app/assets/stylesheets/formstrap.css
|
56
63
|
- app/assets/stylesheets/formstrap.scss
|
57
64
|
- app/assets/stylesheets/formstrap/autocomplete.scss
|
@@ -69,6 +76,8 @@ files:
|
|
69
76
|
- app/assets/stylesheets/formstrap/utilities.scss
|
70
77
|
- app/assets/stylesheets/formstrap/utilities/dropzone.scss
|
71
78
|
- app/assets/stylesheets/formstrap/vendor/flatpickr.css
|
79
|
+
- app/assets/stylesheets/formstrap/vendor/overrides/redactor.scss
|
80
|
+
- app/assets/stylesheets/formstrap/vendor/redactor.css
|
72
81
|
- app/assets/stylesheets/formstrap/vendor/tom-select-bootstrap.scss
|
73
82
|
- app/controllers/concerns/formstrap/pagination.rb
|
74
83
|
- app/controllers/formstrap/media_controller.rb
|
@@ -104,7 +113,7 @@ files:
|
|
104
113
|
- app/models/formstrap/media_view.rb
|
105
114
|
- app/models/formstrap/number_view.rb
|
106
115
|
- app/models/formstrap/password_view.rb
|
107
|
-
- app/models/formstrap/
|
116
|
+
- app/models/formstrap/redactor_view.rb
|
108
117
|
- app/models/formstrap/search_view.rb
|
109
118
|
- app/models/formstrap/select_view.rb
|
110
119
|
- app/models/formstrap/switch_view.rb
|
@@ -137,7 +146,7 @@ files:
|
|
137
146
|
- app/views/formstrap/_media.html.erb
|
138
147
|
- app/views/formstrap/_number.html.erb
|
139
148
|
- app/views/formstrap/_password.html.erb
|
140
|
-
- app/views/formstrap/
|
149
|
+
- app/views/formstrap/_redactor.html.erb
|
141
150
|
- app/views/formstrap/_repeater.html.erb
|
142
151
|
- app/views/formstrap/_search.html.erb
|
143
152
|
- app/views/formstrap/_select.html.erb
|
@@ -1,40 +0,0 @@
|
|
1
|
-
/* global RedactorX */
|
2
|
-
import { Controller } from '@hotwired/stimulus'
|
3
|
-
|
4
|
-
export default class extends Controller {
|
5
|
-
connect () {
|
6
|
-
this.initRedactor()
|
7
|
-
}
|
8
|
-
|
9
|
-
initRedactor () {
|
10
|
-
if (typeof RedactorX === 'undefined') {
|
11
|
-
console.error('RedactorX is a paid module and is not included in Headmin. Please purchase it and import it as a JS module')
|
12
|
-
return false
|
13
|
-
}
|
14
|
-
|
15
|
-
const defaultOptions = {
|
16
|
-
editor: {
|
17
|
-
minHeight: '57px'
|
18
|
-
},
|
19
|
-
subscribe: {
|
20
|
-
'app.start': () => {
|
21
|
-
this.stylize()
|
22
|
-
}
|
23
|
-
}
|
24
|
-
}
|
25
|
-
const options = JSON.parse(this.element.getAttribute('data-redactor-options'))
|
26
|
-
RedactorX(this.element, { ...defaultOptions, ...options })
|
27
|
-
}
|
28
|
-
|
29
|
-
stylize () {
|
30
|
-
const container = this.element.nextElementSibling
|
31
|
-
|
32
|
-
// Copy textarea classes
|
33
|
-
const inputClasses = this.element.classList
|
34
|
-
container.classList.add(...inputClasses)
|
35
|
-
|
36
|
-
// Add top margin to input group
|
37
|
-
// const inputGroup = container.closest('.input-group')
|
38
|
-
// inputGroup.classList.add('mt-4')
|
39
|
-
}
|
40
|
-
}
|
@@ -1,57 +0,0 @@
|
|
1
|
-
module Formstrap
|
2
|
-
class RedactorxView < ViewModel
|
3
|
-
def options
|
4
|
-
default_options.deep_merge(to_h)
|
5
|
-
end
|
6
|
-
|
7
|
-
private
|
8
|
-
|
9
|
-
def default_options
|
10
|
-
{
|
11
|
-
data: {
|
12
|
-
controller: "redactorx",
|
13
|
-
"redactor-options": redactor_options
|
14
|
-
}
|
15
|
-
}
|
16
|
-
end
|
17
|
-
|
18
|
-
def control
|
19
|
-
@control || (hybrid ? true : nil)
|
20
|
-
end
|
21
|
-
|
22
|
-
def context
|
23
|
-
@context || (hybrid ? true : nil)
|
24
|
-
end
|
25
|
-
|
26
|
-
def toolbar
|
27
|
-
@toolbar || (hybrid ? false : nil)
|
28
|
-
end
|
29
|
-
|
30
|
-
def addbar
|
31
|
-
@addbar || %w[paragraph image embed table quote pre line]
|
32
|
-
end
|
33
|
-
|
34
|
-
def plugins
|
35
|
-
@plugins || %w[shortcut]
|
36
|
-
end
|
37
|
-
|
38
|
-
attr_reader :topbar
|
39
|
-
|
40
|
-
def redactor_options
|
41
|
-
default_redactor_options.deep_merge(redactor || {})
|
42
|
-
end
|
43
|
-
|
44
|
-
def default_redactor_options
|
45
|
-
{
|
46
|
-
control: control,
|
47
|
-
context: context,
|
48
|
-
toolbar: toolbar,
|
49
|
-
buttons: {
|
50
|
-
addbar: addbar,
|
51
|
-
plugins: plugins,
|
52
|
-
topbar: topbar
|
53
|
-
}
|
54
|
-
}.delete_if { |k, v| v.nil? }
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|