effective_bootstrap 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c73961161d3573b8a086dceedd1b2b97b5c51d5
4
- data.tar.gz: 3e73d0c2f628c120064355648474901ccf88d401
3
+ metadata.gz: 0dcabe6562a28a9ad9845025ee4ba974ca38c846
4
+ data.tar.gz: 8b022529edf57d27fd3507dab9029c0242297acc
5
5
  SHA512:
6
- metadata.gz: f50b617e235e67f29da29399ab37e460af5daa2310fbbc9dcbc2b58b6fb8e10fb1be4acaba8f97d226a50ce30c568e1f0ce6af5ab8f5beeed029139e04c7f5ea
7
- data.tar.gz: 475fc4f1332c039099623dbdfb011d1105b361b651dca036f59ae9f0a879a88161c47ea2c80a40ac2959f60a914886b0b810879fc33465c8b4b8e6939f943574
6
+ metadata.gz: 3626fa1ca74154ace16f44e117d0ebef60ec2d9e68dad9d87bbb1f5b10b5fefca5855683cfd9ec2fa981c1028fb4ec2873e1552a3d73936bb6fbf8bc46c612f5
7
+ data.tar.gz: 7d17e33751e29a7cbc81e94a7afcb74dd4bef5634a333d1e8a360d724490b80b28728f8f79dde48712e26b4f8066c00888cde0c61c5a4d32698cd8d0c1327c39
@@ -3,23 +3,32 @@
3
3
  (this.EffectiveBootstrap || {}).effective_editor = ($element, options) ->
4
4
  editor = '#' + $element.attr('id') + '_editor'
5
5
 
6
- delta = options['delta']
7
- delete options['delta']
6
+ content_mode = options['content_mode']
7
+ delete options['content_mode']
8
8
 
9
- quill = new Quill(editor, options)
9
+ quill = new Quill($element.siblings(editor).get(0), options)
10
10
  content = $element.val() || ''
11
11
 
12
12
  if content.length > 0
13
- if content.startsWith('{') then quill.setContents(JSON.parse(content)) else quill.pasteHTML(content)
14
-
15
- if delta
16
- quill.on 'text-change', (delta, old, source) ->
17
- $element.val(JSON.stringify(quill.getContents()))
18
- else
19
- quill.on 'text-change', (delta, old, source) ->
13
+ if content.startsWith('{')
14
+ quill.setContents(JSON.parse(content))
15
+ else if content_mode == 'code'
16
+ quill.setText(content)
17
+ else if content.startsWith('<')
18
+ quill.pasteHTML(content)
19
+ else
20
+ quill.setText(content)
21
+
22
+ if content_mode == 'code'
23
+ quill.formatText(0, quill.getLength(), 'code-block', true)
24
+ quill.on 'text-change', -> $element.val(quill.getText())
25
+ else if content_mode == 'html'
26
+ quill.on 'text-change', ->
20
27
  html = $(editor).children('.ql-editor').html()
21
28
  html = '' if html == '<p><br></p>' || html == '<p></p>'
22
29
  $element.val(html)
30
+ else
31
+ quill.on 'text-change', -> $element.val(JSON.stringify(quill.getContents()))
23
32
 
24
33
  $element.on 'quill:focus', (event) -> quill.focus()
25
34
 
@@ -27,7 +36,18 @@
27
36
  (this.EffectiveBootstrap || {}).effective_editor_tag = ($element, options) ->
28
37
  quill = new Quill('#' + $element.attr('id'), options)
29
38
 
30
- content = ($element.attr('data-delta') || '')
39
+ content = ($element.attr('data-content') || '')
40
+ content_mode = $element.data('input-js-options')['content_mode']
31
41
 
32
42
  if content.length > 0
33
- if content.startsWith('{') then quill.setContents($element.data('delta')) else quill.pasteHTML(content)
43
+ if content.startsWith('{')
44
+ quill.setContents(JSON.parse(content))
45
+ else if content_mode == 'code'
46
+ quill.setText(content)
47
+ else if content.startsWith('<')
48
+ quill.pasteHTML(content)
49
+ else
50
+ quill.setText(content)
51
+
52
+ if content_mode == 'code'
53
+ quill.formatText(0, quill.getLength(), 'code-block', true)
@@ -1,4 +1,5 @@
1
1
  .effective_editor { height: 0; width: 0; padding: 0; margin: 0; visibility: hidden; }
2
+ textarea.form-control.effective_editor { height: 0; }
2
3
 
3
4
  // Bootstrap 4 Feedback client side
4
5
  .was-validated .form-control:invalid ~ .ql-container, { border-color: #dc3545; }
@@ -1,9 +1,29 @@
1
1
  module EffectiveEditorHelper
2
2
 
3
- def effective_editor_tag(delta)
4
- input_js = { method_name: 'effective_editor_tag', theme: 'snow', readOnly: true, modules: { toolbar: false } }
3
+ def effective_editor_tag(content, options = {})
4
+ content = content.presence || '{}'
5
5
 
6
- content_tag(:div, '', id: "ql-#{delta.object_id}", class: 'effective_editor_content ql-effective', data: { 'input-js-options': input_js, 'delta': delta.presence || '{}'})
6
+ content_mode = (
7
+ if options.delete(:delta)
8
+ :delta
9
+ elsif options.delete(:html)
10
+ :html
11
+ elsif options.delete(:code)
12
+ :code
13
+ else
14
+ :delta
15
+ end
16
+ )
17
+
18
+ input_js = {
19
+ method_name: 'effective_editor_tag',
20
+ theme: 'snow',
21
+ readOnly: true,
22
+ content_mode: content_mode,
23
+ modules: { toolbar: false, syntax: (content_mode == :code) }
24
+ }
25
+
26
+ content_tag(:div, '', id: "ql-#{content.object_id}", class: 'effective_editor_content ql-effective', data: { 'input-js-options': input_js, 'content': content })
7
27
  end
8
28
 
9
29
  end
@@ -5,7 +5,7 @@ module EffectiveFormBuilderHelper
5
5
 
6
6
  # Compute the default ID
7
7
  subject = Array(options[:scope] || options[:model]).last
8
- class_name = subject.class.name.parameterize.underscore
8
+ class_name = subject.class.name.underscore
9
9
 
10
10
  html_id = if subject.kind_of?(Symbol)
11
11
  subject.to_s
@@ -18,6 +18,7 @@ module Effective
18
18
  end
19
19
 
20
20
  alias_method :super_text_field, :text_field
21
+ alias_method :super_text_area, :text_area
21
22
 
22
23
  def check_box(name, options = {})
23
24
  Effective::FormInputs::CheckBox.new(name, options, builder: self).to_html { super(name, options) }
@@ -5,7 +5,7 @@ module Effective
5
5
  def build_input(&block)
6
6
  content = value.presence || (capture(&block) if block_given?)
7
7
 
8
- @builder.super_text_field(name, options[:input]) +
8
+ @builder.super_text_area(name, (options[:input] || {}).merge(autocomplete: 'off')) +
9
9
  content_tag(:div, '', class: 'ql-effective', id: unique_id + '_editor')
10
10
  end
11
11
 
@@ -14,11 +14,18 @@ module Effective
14
14
  end
15
15
 
16
16
  def input_js_options
17
- { modules: { toolbar: toolbar }, theme: 'snow', placeholder: "Add #{name.to_s.pluralize}...", delta: delta? }
17
+ {
18
+ modules: { toolbar: toolbar, syntax: (content_mode == :code) },
19
+ theme: 'snow',
20
+ placeholder: "Add #{name.to_s.pluralize}...",
21
+ content_mode: content_mode
22
+ }
18
23
  end
19
24
 
20
25
  # Commented out 'Full' toolbar options because currently we don't want headers / source / code options
21
26
  def toolbar
27
+ return false if content_mode == :code
28
+
22
29
  [
23
30
  # [{'header': [1, 2, 3, 4, false] }],
24
31
  ['bold', 'italic', 'underline'],
@@ -28,14 +35,20 @@ module Effective
28
35
  ]
29
36
  end
30
37
 
31
- def delta? # default false
32
- return @delta unless @delta.nil?
33
-
34
- if options.key?(:html)
35
- @delta = (options.delete(:html) == false)
36
- else
37
- @delta = (options.delete(:delta) || false)
38
- end
38
+ def content_mode # default false
39
+ return @content_mode unless @content_mode.nil?
40
+
41
+ @content_mode = (
42
+ if options.delete(:delta)
43
+ :delta
44
+ elsif options.delete(:html)
45
+ :html
46
+ elsif options.delete(:code)
47
+ :code
48
+ else
49
+ :delta
50
+ end
51
+ )
39
52
  end
40
53
 
41
54
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveBootstrap
2
- VERSION = '0.2.1'.freeze
2
+ VERSION = '0.2.2'.freeze
3
3
  end
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.2.1
4
+ version: 0.2.2
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: 2018-09-16 00:00:00.000000000 Z
11
+ date: 2018-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails