Class: Effective::FormInputs::Editor

Inherits:
Effective::FormInput show all
Defined in:
app/models/effective/form_inputs/editor.rb

Constant Summary

Constants inherited from Effective::FormInput

Effective::FormInput::BLANK, Effective::FormInput::DEFAULT_FEEDBACK_OPTIONS, Effective::FormInput::DEFAULT_INPUT_GROUP_OPTIONS, Effective::FormInput::EMPTY_HASH, Effective::FormInput::EXCLUSIVE_CLASS_PREFIXES, Effective::FormInput::EXCLUSIVE_CLASS_SUFFIXES, Effective::FormInput::HORIZONTAL_LABEL_OPTIONS, Effective::FormInput::HORIZONTAL_WRAPPER_OPTIONS, Effective::FormInput::INLINE_LABEL_OPTIONS, Effective::FormInput::VERTICAL_WRAPPER_OPTIONS

Instance Attribute Summary

Attributes inherited from Effective::FormInput

#name, #options

Instance Method Summary collapse

Methods inherited from Effective::FormInput

#feedback_options, #hint_options, #initialize, #input_group_options, #label_options, #to_html, #wrapper_options

Constructor Details

This class inherits a constructor from Effective::FormInput

Instance Method Details

#active_storageObject



65
66
67
68
69
70
71
72
73
# File 'app/models/effective/form_inputs/editor.rb', line 65

def active_storage
  return @active_storage unless @active_storage.nil?

  @active_storage = if options.key?(:active_storage)
    options.delete(:active_storage)
  else
    defined?(ActiveStorage).present?
  end
end

#build_input(&block) ⇒ Object



5
6
7
8
9
10
# File 'app/models/effective/form_inputs/editor.rb', line 5

def build_input(&block)
  content = value.presence || (capture(&block) if block_given?)

  @builder.super_text_area(name, (options[:input] || {}).merge(autocomplete: 'off')) +
  (:div, '', class: 'ql-effective', id: unique_id + '_editor')
end

#content_modeObject

default false



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'app/models/effective/form_inputs/editor.rb', line 75

def content_mode # default false
  return @content_mode unless @content_mode.nil?

  @content_mode = (
    if options.delete(:delta)
      :delta
    elsif options.delete(:html)
      :html
    elsif options.delete(:code)
      :code
    else
      :delta
    end
  )
end

#imageDropAndPasteObject



45
46
47
# File 'app/models/effective/form_inputs/editor.rb', line 45

def imageDropAndPaste
  active_storage && !(content_mode == :code)
end

#imageResizeObject



49
50
51
52
53
54
55
56
57
58
59
# File 'app/models/effective/form_inputs/editor.rb', line 49

def imageResize
  {
    displaySize: true,
    displayStyles: {
      backgroundColor: 'black',
      border: 'none',
      color: 'white'
    },
    modules: [ 'Resize', 'DisplaySize' ]
  }
end

#input_html_optionsObject



12
13
14
# File 'app/models/effective/form_inputs/editor.rb', line 12

def input_html_options
  { class: 'effective_editor form-control', id: unique_id }
end

#input_js_optionsObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'app/models/effective/form_inputs/editor.rb', line 16

def input_js_options
  {
    modules: {
      toolbar: toolbar,
      imageResize: imageResize,
      imageDropAndPaste: imageDropAndPaste,
      magicUrl: magicUrl,
      syntax: (content_mode == :code)
    },
    theme: 'snow',
    placeholder: "Add #{name.to_s.pluralize}...",
    content_mode: content_mode,
    active_storage: active_storage
  }
end

#magicUrlObject



61
62
63
# File 'app/models/effective/form_inputs/editor.rb', line 61

def magicUrl
  true
end

#toolbarObject

Commented out ‘Full’ toolbar options because currently we don’t want headers / source / code options



33
34
35
36
37
38
39
40
41
42
43
# File 'app/models/effective/form_inputs/editor.rb', line 33

def toolbar
  return false if content_mode == :code

  [
    # [{'header': [1, 2, 3, 4, false] }],
    ['bold', 'italic', 'underline'],
    ['link', 'image', 'video'], # also 'code-block'
    [{'list': 'ordered'}, {'list': 'bullet'}, 'blockquote'],
    [{'align': [] }, 'clean']
  ]
end