formstrap 0.3.3 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- 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 +2652 -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.4",
|
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.5
|
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
|