formstrap 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/assets/javascripts/formstrap/controllers/redactor_controller.js +18 -0
  4. data/app/assets/javascripts/formstrap/controllers/select_controller.js +22 -18
  5. data/app/assets/javascripts/formstrap/index.js +5 -2
  6. data/app/assets/javascripts/formstrap/vendor/redactor/i18n/de.js +214 -0
  7. data/app/assets/javascripts/formstrap/vendor/redactor/i18n/en.js +214 -0
  8. data/app/assets/javascripts/formstrap/vendor/redactor/i18n/fr.js +214 -0
  9. data/app/assets/javascripts/formstrap/vendor/redactor/i18n/nl.js +214 -0
  10. data/app/assets/javascripts/formstrap/vendor/redactor/index.js +5 -0
  11. data/app/assets/javascripts/formstrap/vendor/redactor/plugins/emoji.js +332 -0
  12. data/app/assets/javascripts/formstrap/vendor/redactor/plugins/linkstyles.js +124 -0
  13. data/app/assets/javascripts/formstrap.js +1295 -148
  14. data/app/assets/stylesheets/formstrap/general.scss +0 -6
  15. data/app/assets/stylesheets/formstrap/vendor/overrides/redactor.scss +151 -0
  16. data/app/assets/stylesheets/formstrap/vendor/redactor.css +2535 -0
  17. data/app/assets/stylesheets/formstrap.css +2650 -5
  18. data/app/assets/stylesheets/formstrap.scss +4 -0
  19. data/app/models/formstrap/redactor_view.rb +57 -0
  20. data/app/models/formstrap/wysiwyg_view.rb +9 -1
  21. data/app/views/formstrap/{_redactorx.html.erb → _redactor.html.erb} +4 -7
  22. data/app/views/formstrap/_wysiwyg.html.erb +3 -5
  23. data/lib/formstrap/form_builder.rb +12 -4
  24. data/lib/formstrap/version.rb +1 -1
  25. data/package.json +2 -2
  26. data/yarn.lock +4 -4
  27. metadata +14 -5
  28. data/app/assets/javascripts/formstrap/controllers/redactorx_controller.js +0 -40
  29. data/app/models/formstrap/redactorx_view.rb +0 -57
@@ -4,6 +4,10 @@
4
4
  // Flatpickr
5
5
  @import "formstrap/vendor/flatpickr";
6
6
 
7
+ // Redactor
8
+ @import "formstrap/vendor/redactor";
9
+ @import "formstrap/vendor/overrides/redactor";
10
+
7
11
  // Formstrap
8
12
  @import "formstrap/general";
9
13
  @import "formstrap/utilities";
@@ -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
@@ -6,9 +6,17 @@ module Formstrap
6
6
 
7
7
  private
8
8
 
9
+ def toolbar
10
+ @toolbar != false
11
+ end
12
+
9
13
  def default_options
10
14
  {
11
- hybrid: toolbar == false
15
+ redactor: {
16
+ context: !toolbar,
17
+ extrabar: toolbar,
18
+ toolbar: toolbar
19
+ }
12
20
  }
13
21
  end
14
22
  end
@@ -1,5 +1,5 @@
1
1
  <%
2
- # formstrap/redactorx
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://headmin.dev/docs/forms/redactorx
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/redactorx", form: form, attribute: :text %#>
22
+ # <%= render "formstrap/redactor", form: form, attribute: :text %#>
26
23
  # <% end %#>
27
24
 
28
- redactor = Formstrap::RedactorxView.new(local_assigns)
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://headmin.dev/docs/forms/redactorx
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/redactorx", form: form, attribute: :text %#>
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/redactorx", wysiwyg.options %>
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 redactorx(attribute, options = {})
122
- render_input(:redactorx, attribute, options)
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, options = {})
166
- render_input(:wysiwyg, attribute, options)
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)
@@ -1,3 +1,3 @@
1
1
  module Formstrap
2
- VERSION = "0.3.3"
2
+ VERSION = "0.3.4"
3
3
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontierdotbe/formstrap",
3
- "version": "0.3.2",
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.0.0",
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.0.0:
1714
- version "2.2.2"
1715
- resolved "https://registry.yarnpkg.com/tom-select/-/tom-select-2.2.2.tgz#8e5f9296e6d80254feccb57f0986bd6c44d126e2"
1716
- integrity sha512-igGah1yY6yhrnN2h/Ky8I5muw/nE/YQxIsEZoYu5qaA4bsRibvKto3s8QZZosKpOd0uO8fNYhRfAwgHB4IAYew==
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.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-02 00:00:00.000000000 Z
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/redactorx_controller.js
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/redactorx_view.rb
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/_redactorx.html.erb
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