effective_bootstrap 0.8.4 → 0.9.3
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 +31 -1
- data/app/assets/javascripts/effective_bootstrap.js +1 -1
- data/app/assets/javascripts/effective_bootstrap_editor.js +1 -0
- data/app/assets/javascripts/effective_ck_editor/initialize.js.coffee +1 -2
- data/app/assets/stylesheets/effective_bootstrap.scss +1 -1
- data/app/assets/stylesheets/effective_bootstrap_editor.scss +1 -0
- data/app/assets/stylesheets/effective_rich_text_area/input.scss +25 -0
- data/app/helpers/effective_bootstrap_helper.rb +42 -22
- data/app/models/effective/form_builder.rb +4 -0
- data/app/models/effective/form_input.rb +33 -19
- data/app/models/effective/form_inputs/rich_text_area.rb +11 -0
- data/app/models/effective/form_logic.rb +1 -1
- data/lib/effective_bootstrap/version.rb +1 -1
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 653ce4dc21d9961a88154cbfb0b3c59e4d4f85615e3edc4d89f774fbca7a0026
|
4
|
+
data.tar.gz: 724f3a374fe198d935fb72773e0e411c070bb9365c93228ca64c01bf93893a27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d8d946e930a29d18016012f49f2df1b72a43da46504fdc7e0c943bc111c92d85d34f394fe77a708bb93a27b10bb25c0ef003024d3b29606449057c8d156546ef
|
7
|
+
data.tar.gz: 4d23bd8f9fb754f318a3115ae72ddd924714e9704bfad6d4e489510503dcbdead65f13abef5b0ab2867f18e2377700aa4c672fd7126e0d4889d6a21158d9b112
|
data/README.md
CHANGED
@@ -323,7 +323,7 @@ The end date selector will have its date <= start_date disabled.
|
|
323
323
|
To disable this behaviour, call with `date_linked: false`.
|
324
324
|
|
325
325
|
```ruby
|
326
|
-
= f.
|
326
|
+
= f.date_field :end_at, date_linked: false
|
327
327
|
```
|
328
328
|
|
329
329
|
### Events
|
@@ -334,6 +334,34 @@ More info is available here:
|
|
334
334
|
|
335
335
|
http://eonasdan.github.io/bootstrap-datetimepicker/Events/
|
336
336
|
|
337
|
+
## Custom editor
|
338
|
+
|
339
|
+
A drop in ready rich text editor based on
|
340
|
+
|
341
|
+
https://quilljs.com/
|
342
|
+
|
343
|
+
To use the editor, you must make additional javascript and stylesheet includes:
|
344
|
+
|
345
|
+
In your application.js
|
346
|
+
|
347
|
+
```
|
348
|
+
//= require effective_bootstrap
|
349
|
+
//= require effective_bootstrap_editor
|
350
|
+
```
|
351
|
+
|
352
|
+
In your application.scss
|
353
|
+
|
354
|
+
```
|
355
|
+
@import 'effective_bootstrap';
|
356
|
+
@import 'effective_bootstrap_editor';
|
357
|
+
```
|
358
|
+
|
359
|
+
And then in any form, instead of a text area:
|
360
|
+
|
361
|
+
```
|
362
|
+
= f.editor :body
|
363
|
+
```
|
364
|
+
|
337
365
|
## Custom percent_field
|
338
366
|
|
339
367
|
This custom form input uses no 3rd party jQuery plugins.
|
@@ -622,6 +650,8 @@ The `f.save` is purely a input submit button.
|
|
622
650
|
```
|
623
651
|
|
624
652
|
|
653
|
+
|
654
|
+
|
625
655
|
## License
|
626
656
|
|
627
657
|
MIT License. Copyright [Code and Effect Inc.](http://www.codeandeffect.com/)
|
@@ -13,7 +13,7 @@
|
|
13
13
|
//= require ./effective_clear/input
|
14
14
|
//= require ./effective_checks/input
|
15
15
|
//= require ./effective_ck_editor/input
|
16
|
-
|
16
|
+
|
17
17
|
//= require ./effective_file/input
|
18
18
|
//= require ./effective_integer/input
|
19
19
|
//= require ./effective_number_text/input
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require ./effective_editor/input
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# http://eonasdan.github.io/bootstrap-datetimepicker/Options/
|
2
1
|
(this.EffectiveBootstrap || {}).effective_ck_editor = ($element, options) ->
|
3
2
|
setupCkeditor($element)
|
4
3
|
initCkeditor($element, $element.data('input-js-options'))
|
@@ -69,4 +68,4 @@ initCkeditor = ($element, input_options) ->
|
|
69
68
|
ckeditor.on 'insertElement', (event) ->
|
70
69
|
element = $(event.data.$)
|
71
70
|
if element.is('table')
|
72
|
-
element.removeAttr('style').addClass('table')
|
71
|
+
element.removeAttr('style').addClass('table')
|
@@ -5,8 +5,8 @@
|
|
5
5
|
@import 'effective_date/input';
|
6
6
|
@import 'effective_time/input';
|
7
7
|
|
8
|
-
@import 'effective_editor/input';
|
9
8
|
@import 'effective_file/input';
|
9
|
+
@import 'effective_rich_text_area/input';
|
10
10
|
@import 'effective_select/input';
|
11
11
|
@import 'effective_select_or_text/input';
|
12
12
|
@import 'effective_radio/input';
|
@@ -0,0 +1 @@
|
|
1
|
+
@import 'effective_editor/input';
|
@@ -0,0 +1,25 @@
|
|
1
|
+
.effective_rich_text_area {
|
2
|
+
height: 100%;
|
3
|
+
border-color: #ccc;
|
4
|
+
|
5
|
+
&:hover,
|
6
|
+
&:active,
|
7
|
+
&:focus, {
|
8
|
+
border-color: #ccc;
|
9
|
+
outline: 0px !important;
|
10
|
+
-webkit-appearance: none;
|
11
|
+
box-shadow: none !important;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
// Bootstrap 4 Feedback client side
|
16
|
+
.was-validated .form-control:invalid ~ .trix-content, { border-color: #dc3545 !important; }
|
17
|
+
.was-validated .form-control:valid ~ .trix-content { border-color: #28a745 !important; }
|
18
|
+
.was-validated .form-control:invalid ~ trix-toolbar, { border-color: #dc3545 !important; }
|
19
|
+
.was-validated .form-control:valid ~ trix-toolbar { border-color: #28a745 !important; }
|
20
|
+
|
21
|
+
// Bootstrap 4 Server side feedback
|
22
|
+
.form-control.is-invalid ~ .trix-content { border-color: #dc3545 !important; }
|
23
|
+
.form-control.is-invalid ~ trix-toolbar { border-color: #dc3545 !important; }
|
24
|
+
.form-control.is-valid ~ .trix-content { border-color: #28a745 !important; }
|
25
|
+
.form-control.is-valid ~ trix-toolbar { border-color: #28a745 !important; }
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Boostrap4 Helpers
|
2
4
|
|
3
5
|
module EffectiveBootstrapHelper
|
@@ -72,15 +74,27 @@ module EffectiveBootstrapHelper
|
|
72
74
|
# variations can be :dropup, :dropleft, :dropright
|
73
75
|
# split can be true, false
|
74
76
|
# right is to right align things
|
77
|
+
DROPDOWN_SPLIT_OPTS = {class: "btn dropdown-toggle dropdown-toggle-split btn-sm btn-outline-primary", type: 'button', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false}
|
78
|
+
DROPDOWN_UNSPLIT_OPTS= {class: "btn dropdown-toggle btn-sm btn-outline-primary", type: 'button', 'data-toggle': 'dropdown', 'aria-haspopup': true, 'aria-expanded': false}
|
79
|
+
|
80
|
+
DROPDOWN_DROPLEFT_GROUP_OPTS = {class: 'btn-group'}
|
81
|
+
DROPDOWN_DROPLEFT_OPTS = {class: 'btn-group dropleft', role: 'group'}
|
82
|
+
|
83
|
+
DROPDOWN_MENU_OPTS = {class: 'dropdown-menu'}
|
84
|
+
DROPDOWN_MENU_RIGHT_OPTS = {class: 'dropdown-menu dropdown-menu-right'}
|
85
|
+
|
86
|
+
DROPDOWN_BTN_CLASS = 'btn-sm btn-outline-primary'
|
87
|
+
DROPDOWN_TOGGLE_DROPDOWN = "<span class='sr-only'>Toggle Dropdown</span>".html_safe
|
88
|
+
|
75
89
|
def dropdown(variation: nil, split: true, btn_class: nil, btn_content: nil, right: false, &block)
|
76
90
|
raise 'expected a block' unless block_given?
|
77
91
|
|
78
|
-
btn_class
|
92
|
+
btn_class ||= DROPDOWN_BTN_CLASS
|
79
93
|
|
94
|
+
# Process all dropdown_link_tos
|
80
95
|
@_dropdown_link_tos = []
|
81
96
|
@_dropdown_split = split
|
82
|
-
|
83
|
-
# process dropdown_link_tos
|
97
|
+
@_dropdown_button_class = btn_class
|
84
98
|
yield
|
85
99
|
|
86
100
|
return @_dropdown_link_tos.first if @_dropdown_link_tos.length <= 1
|
@@ -88,31 +102,37 @@ module EffectiveBootstrapHelper
|
|
88
102
|
# Build tags
|
89
103
|
first = @_dropdown_link_tos.first
|
90
104
|
|
91
|
-
|
92
|
-
|
105
|
+
button_opts = (split ? DROPDOWN_SPLIT_OPTS : DROPDOWN_UNSPLIT_OPTS)
|
106
|
+
|
107
|
+
if btn_class != DROPDOWN_BTN_CLASS
|
108
|
+
button_opts[:class] = button_opts[:class].sub(DROPDOWN_BTN_CLASS, btn_class)
|
109
|
+
end
|
110
|
+
|
111
|
+
button = content_tag(:button, button_opts) do
|
112
|
+
btn_content || DROPDOWN_TOGGLE_DROPDOWN
|
93
113
|
end
|
94
114
|
|
115
|
+
menu_opts = (right ? DROPDOWN_MENU_RIGHT_OPTS : DROPDOWN_MENU_OPTS)
|
116
|
+
|
95
117
|
menu = if split
|
96
|
-
content_tag(:div, @_dropdown_link_tos[1..-1].join.html_safe,
|
118
|
+
content_tag(:div, @_dropdown_link_tos[1..-1].join.html_safe, menu_opts)
|
97
119
|
else
|
98
|
-
content_tag(:div, @_dropdown_link_tos.join.html_safe,
|
120
|
+
content_tag(:div, @_dropdown_link_tos.join.html_safe, menu_opts)
|
99
121
|
end
|
100
122
|
|
101
|
-
|
123
|
+
@_dropdown_link_tos = nil
|
124
|
+
|
125
|
+
if split && variation == :dropleft
|
126
|
+
content_tag(:div, DROPDOWN_DROPLEFT_GROUP_OPTS) do
|
127
|
+
content_tag(:div, (button + menu), DROPDOWN_DROPLEFT_OPTS) + first.html_safe
|
128
|
+
end
|
129
|
+
elsif split
|
102
130
|
content_tag(:div, class: 'btn-group') do
|
103
|
-
content_tag(:div, class:
|
104
|
-
[:dropleft].include?(variation) ? (button + menu) : (first + button + menu)
|
105
|
-
end + ([:dropleft].include?(variation) ? first : '').html_safe
|
131
|
+
content_tag(:div, (first + button + menu), class: "btn-group #{variation}", role: 'group')
|
106
132
|
end
|
107
133
|
else
|
108
|
-
content_tag(:div, class: 'dropdown')
|
109
|
-
button + menu
|
110
|
-
end
|
134
|
+
content_tag(:div, (button + menu), class: 'dropdown')
|
111
135
|
end
|
112
|
-
|
113
|
-
@_dropdown_link_tos = nil
|
114
|
-
|
115
|
-
retval
|
116
136
|
end
|
117
137
|
|
118
138
|
# This is a special variant of dropdown
|
@@ -135,17 +155,17 @@ module EffectiveBootstrapHelper
|
|
135
155
|
|
136
156
|
# Works with dots do and dropdown do
|
137
157
|
def dropdown_link_to(label, path, options = {})
|
138
|
-
btn_class = options.delete(:btn_class).presence || 'btn-outline-primary'
|
158
|
+
btn_class = options.delete(:btn_class).presence || @_dropdown_button_class || 'btn-outline-primary'
|
139
159
|
|
140
160
|
unless @_dropdown_link_tos
|
141
|
-
options[:class] = [options[:class]
|
161
|
+
options[:class] = (options[:class] ? "dropdown-item #{options[:class]}" : 'dropdown-item')
|
142
162
|
return link_to(label, path, options)
|
143
163
|
end
|
144
164
|
|
145
165
|
if @_dropdown_link_tos.length == 0 && @_dropdown_split
|
146
|
-
options[:class] =
|
166
|
+
options[:class] = (options[:class] ? "btn #{btn_class} #{options[:class]}" : "btn #{btn_class}")
|
147
167
|
else
|
148
|
-
options[:class] = [options[:class]
|
168
|
+
options[:class] = (options[:class] ? "dropdown-item #{options[:class]}" : 'dropdown-item')
|
149
169
|
end
|
150
170
|
|
151
171
|
@_dropdown_link_tos << link_to(label, path, options)
|
@@ -100,6 +100,10 @@ module Effective
|
|
100
100
|
Effective::FormInputs::RemoteLinkTo.new(name, options, builder: self).to_html(&block)
|
101
101
|
end
|
102
102
|
|
103
|
+
def rich_text_area(name, options = {})
|
104
|
+
Effective::FormInputs::RichTextArea.new(name, options, builder: self).to_html { super(name, options) }
|
105
|
+
end
|
106
|
+
|
103
107
|
def search_field(name, options = {})
|
104
108
|
Effective::FormInputs::SearchField.new(name, options, builder: self).to_html { super(name, options) }
|
105
109
|
end
|
@@ -1,11 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Effective
|
2
4
|
class FormInput
|
3
5
|
attr_accessor :name, :options
|
4
6
|
|
5
7
|
BLANK = ''.html_safe
|
8
|
+
EMPTY_HASH = {}
|
9
|
+
|
6
10
|
EXCLUSIVE_CLASS_PREFIXES = [] # None
|
7
11
|
EXCLUSIVE_CLASS_SUFFIXES = ['-primary', '-secondary', '-success', '-danger', '-warning', '-info', '-light', '-dark']
|
8
12
|
|
13
|
+
DEFAULT_INPUT_GROUP_OPTIONS = { input_group: { class: 'input-group' }, prepend: false, append: false }
|
14
|
+
|
15
|
+
HORIZONTAL_LABEL_OPTIONS = { class: 'col-sm-2 col-form-label'}
|
16
|
+
INLINE_LABEL_OPTIONS = { class: 'sr-only' }
|
17
|
+
|
18
|
+
DEFAULT_FEEDBACK_OPTIONS = { valid: { class: 'valid-feedback' }, invalid: { class: 'invalid-feedback' } }
|
19
|
+
|
20
|
+
HORIZONTAL_WRAPPER_OPTIONS = { class: 'form-group row' }
|
21
|
+
VERTICAL_WRAPPER_OPTIONS = { class: 'form-group' }
|
22
|
+
|
9
23
|
delegate :object, to: :@builder
|
10
24
|
delegate :capture, :content_tag, :image_tag, :link_to, :icon, :asset_path, to: :@template
|
11
25
|
|
@@ -20,7 +34,7 @@ module Effective
|
|
20
34
|
end
|
21
35
|
|
22
36
|
def input_group_options
|
23
|
-
|
37
|
+
DEFAULT_INPUT_GROUP_OPTIONS
|
24
38
|
end
|
25
39
|
|
26
40
|
def input_html_options
|
@@ -28,17 +42,17 @@ module Effective
|
|
28
42
|
end
|
29
43
|
|
30
44
|
def input_js_options
|
31
|
-
|
45
|
+
EMPTY_HASH
|
32
46
|
end
|
33
47
|
|
34
48
|
def label_options
|
35
49
|
case layout
|
36
50
|
when :horizontal
|
37
|
-
|
51
|
+
HORIZONTAL_LABEL_OPTIONS
|
38
52
|
when :inline
|
39
|
-
|
53
|
+
INLINE_LABEL_OPTIONS
|
40
54
|
else
|
41
|
-
|
55
|
+
EMPTY_HASH
|
42
56
|
end
|
43
57
|
end
|
44
58
|
|
@@ -47,7 +61,7 @@ module Effective
|
|
47
61
|
when :inline
|
48
62
|
false
|
49
63
|
else
|
50
|
-
|
64
|
+
DEFAULT_FEEDBACK_OPTIONS
|
51
65
|
end
|
52
66
|
end
|
53
67
|
|
@@ -63,9 +77,9 @@ module Effective
|
|
63
77
|
def wrapper_options
|
64
78
|
case layout
|
65
79
|
when :horizontal
|
66
|
-
|
80
|
+
HORIZONTAL_WRAPPER_OPTIONS
|
67
81
|
else
|
68
|
-
|
82
|
+
VERTICAL_WRAPPER_OPTIONS
|
69
83
|
end
|
70
84
|
end
|
71
85
|
|
@@ -166,7 +180,7 @@ module Effective
|
|
166
180
|
|
167
181
|
invalid = object.errors[name].to_sentence.presence if object.respond_to?(:errors)
|
168
182
|
invalid ||= options[:feedback][:invalid].delete(:text).presence
|
169
|
-
invalid ||= [("can't be blank" if options[:input][:required]), ('must be valid' if validated?(name))].compact.join(' and ').presence
|
183
|
+
invalid ||= [("can't be blank" if options[:input][:required]), ('must be valid' if validated?(name))].tap(&:compact!).join(' and ').presence
|
170
184
|
invalid ||= "can't be blank or is invalid"
|
171
185
|
|
172
186
|
valid = options[:feedback][:valid].delete(:text) || 'Looks good!'
|
@@ -268,7 +282,7 @@ module Effective
|
|
268
282
|
item_value = (item.send(value_method).to_s.parameterize.presence rescue nil)
|
269
283
|
end
|
270
284
|
|
271
|
-
[tag_id, item_value, object_id].compact.join('_')
|
285
|
+
[tag_id, item_value, object_id].tap(&:compact!).join('_')
|
272
286
|
end
|
273
287
|
|
274
288
|
private
|
@@ -282,7 +296,7 @@ module Effective
|
|
282
296
|
# effective_bootstrap specific options
|
283
297
|
layout = options.delete(:layout) # Symbol
|
284
298
|
wrapper = options.delete(:wrapper) # Hash
|
285
|
-
input_group = { append: options.delete(:append), prepend: options.delete(:prepend), input_group: options.delete(:input_group) }.compact
|
299
|
+
input_group = { append: options.delete(:append), prepend: options.delete(:prepend), input_group: options.delete(:input_group) }.tap(&:compact!)
|
286
300
|
|
287
301
|
feedback = options.delete(:feedback) # Hash
|
288
302
|
label = options.delete(:label) # String or Hash
|
@@ -317,11 +331,11 @@ module Effective
|
|
317
331
|
# Server side validation
|
318
332
|
if has_error?
|
319
333
|
if has_error?(name)
|
320
|
-
options[:input][:class] = [options[:input][:class]
|
334
|
+
options[:input][:class] = (options[:input][:class] ? "#{options[:input][:class]} is-invalid" : 'is-invalid')
|
321
335
|
elsif reset_feedback?
|
322
336
|
# Nothing
|
323
337
|
else
|
324
|
-
options[:input][:class] = [options[:input][:class]
|
338
|
+
options[:input][:class] = (options[:input][:class] ? "#{options[:input][:class]} is-valid" : 'is-valid')
|
325
339
|
end
|
326
340
|
end
|
327
341
|
|
@@ -333,7 +347,7 @@ module Effective
|
|
333
347
|
options[:input][:readonly] = 'readonly'
|
334
348
|
|
335
349
|
unless options[:input][:class].to_s.include?('form-control-plaintext')
|
336
|
-
options[:input][:class] = options[:input][:class].
|
350
|
+
options[:input][:class] = (options[:input][:class] || '').sub('form-control', 'form-control-plaintext')
|
337
351
|
end
|
338
352
|
end
|
339
353
|
|
@@ -347,17 +361,17 @@ module Effective
|
|
347
361
|
end
|
348
362
|
|
349
363
|
def merge_defaults!(obj, defaults)
|
350
|
-
defaults =
|
364
|
+
defaults = EMPTY_HASH if defaults.nil?
|
351
365
|
|
352
366
|
case obj
|
353
367
|
when false
|
354
368
|
false
|
355
369
|
when nil, true
|
356
|
-
defaults
|
370
|
+
defaults.dup
|
357
371
|
when String
|
358
372
|
defaults.merge(text: obj)
|
359
373
|
when Hash
|
360
|
-
html_classes = (obj[:class].
|
374
|
+
html_classes = ((obj[:class] || '').split(' ') + (defaults[:class] || '').split(' ')).uniq
|
361
375
|
|
362
376
|
# Try to smart merge bootstrap classes
|
363
377
|
if (exclusive = html_classes.select { |c| c.include?('-') }).length > 1
|
@@ -421,11 +435,11 @@ module Effective
|
|
421
435
|
end
|
422
436
|
|
423
437
|
def sanitized_object_name
|
424
|
-
@builder.object_name.to_s.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
|
438
|
+
@sanitized_object_name ||= @builder.object_name.to_s.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
|
425
439
|
end
|
426
440
|
|
427
441
|
def sanitized_method_name
|
428
|
-
name.to_s.sub(/\?$/, "")
|
442
|
+
@sanitized_method_name ||= name.to_s.sub(/\?$/, "")
|
429
443
|
end
|
430
444
|
|
431
445
|
def input_js_options_method_name
|
@@ -34,7 +34,7 @@ module Effective
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def input_js_options
|
37
|
-
{ 'data-input-js-options' => JSON.generate({method_name: input_js_options_method_name}.merge(logic_options)) }
|
37
|
+
{ 'data-input-js-options' => JSON.generate({method_name: input_js_options_method_name}.merge!(logic_options)) }
|
38
38
|
end
|
39
39
|
|
40
40
|
def input_js_options_method_name
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: effective_bootstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Code and Effect
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -396,6 +396,7 @@ files:
|
|
396
396
|
- app/assets/javascripts/effective_bootstrap/logic.js.coffee
|
397
397
|
- app/assets/javascripts/effective_bootstrap/other.js.coffee
|
398
398
|
- app/assets/javascripts/effective_bootstrap/tabs.js
|
399
|
+
- app/assets/javascripts/effective_bootstrap_editor.js
|
399
400
|
- app/assets/javascripts/effective_checks/initialize.js.coffee
|
400
401
|
- app/assets/javascripts/effective_checks/input.js
|
401
402
|
- app/assets/javascripts/effective_ck_editor/initialize.js.coffee
|
@@ -572,6 +573,7 @@ files:
|
|
572
573
|
- app/assets/stylesheets/effective_bootstrap/forms.scss
|
573
574
|
- app/assets/stylesheets/effective_bootstrap/icons.scss
|
574
575
|
- app/assets/stylesheets/effective_bootstrap/overrides.scss
|
576
|
+
- app/assets/stylesheets/effective_bootstrap_editor.scss
|
575
577
|
- app/assets/stylesheets/effective_checks/input.scss
|
576
578
|
- app/assets/stylesheets/effective_date/input.scss
|
577
579
|
- app/assets/stylesheets/effective_datetime/bootstrap-datetimepicker.scss
|
@@ -582,6 +584,7 @@ files:
|
|
582
584
|
- app/assets/stylesheets/effective_editor/quill.scss
|
583
585
|
- app/assets/stylesheets/effective_file/input.scss
|
584
586
|
- app/assets/stylesheets/effective_radio/input.scss
|
587
|
+
- app/assets/stylesheets/effective_rich_text_area/input.scss
|
585
588
|
- app/assets/stylesheets/effective_select/bootstrap-theme.css
|
586
589
|
- app/assets/stylesheets/effective_select/input.scss
|
587
590
|
- app/assets/stylesheets/effective_select/overrides.scss
|
@@ -621,6 +624,7 @@ files:
|
|
621
624
|
- app/models/effective/form_inputs/radios.rb
|
622
625
|
- app/models/effective/form_inputs/remote_link_to.rb
|
623
626
|
- app/models/effective/form_inputs/reset.rb
|
627
|
+
- app/models/effective/form_inputs/rich_text_area.rb
|
624
628
|
- app/models/effective/form_inputs/save.rb
|
625
629
|
- app/models/effective/form_inputs/search_field.rb
|
626
630
|
- app/models/effective/form_inputs/select.rb
|
@@ -664,7 +668,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
664
668
|
- !ruby/object:Gem::Version
|
665
669
|
version: '0'
|
666
670
|
requirements: []
|
667
|
-
rubygems_version: 3.1.
|
671
|
+
rubygems_version: 3.1.4
|
668
672
|
signing_key:
|
669
673
|
specification_version: 4
|
670
674
|
summary: Everything you need to get set up with bootstrap 4.
|