Class: CKEditor5::Rails::Presets::PresetBuilder

Inherits:
Object
  • Object
show all
Includes:
Editor::ConfigHelpers
Defined in:
lib/ckeditor5/rails/presets/preset_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Editor::ConfigHelpers

#ckeditor5_element_ref

Constructor Details

#initializePresetBuilder

Returns a new instance of PresetBuilder.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 10

def initialize
  @version = nil
  @premium = false
  @cdn = :jsdelivr
  @translations = []
  @license_key = nil
  @type = :classic
  @ckbox = nil
  @editable_height = nil
  @config = {
    plugins: [],
    toolbar: []
  }
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



8
9
10
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 8

def config
  @config
end

Instance Method Details

#cdn(cdn = nil, &block) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 96

def cdn(cdn = nil, &block)
  return @cdn if cdn.nil? && block.nil?

  if block_given?
    unless block.arity == 3
      raise ArgumentError,
            'Block must accept exactly 3 arguments: bundle, version, path'
    end

    @cdn = block
  else
    @cdn = cdn
  end
end

#ckbox(version = nil, theme: :lark) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 56

def ckbox(version = nil, theme: :lark)
  return @ckbox if version.nil?

  @ckbox = {
    version: version,
    theme: theme
  }
end

#configure(key, value) ⇒ Object



118
119
120
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 118

def configure(key, value)
  @config[key] = value
end

#editable_height(height = nil) ⇒ Object



50
51
52
53
54
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 50

def editable_height(height = nil)
  return @editable_height if height.nil?

  @editable_height = height
end

#gplObject



73
74
75
76
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 73

def gpl
  license_key('GPL')
  premium(false)
end

#gpl?Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 29

def gpl?
  license_key == 'GPL'
end

#inline_plugin(name, code) ⇒ Object



142
143
144
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 142

def inline_plugin(name, code)
  @config[:plugins] << Editor::PropsInlinePlugin.new(name, code)
end

#language(ui = nil, content: ui) ⇒ Object

rubocop:disable Naming/MethodParameterName



154
155
156
157
158
159
160
161
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 154

def language(ui = nil, content: ui) # rubocop:disable Naming/MethodParameterName
  return @config[:language] if ui.nil?

  @config[:language] = {
    ui: ui,
    content: content
  }
end

#license_key(license_key = nil) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 65

def license_key(license_key = nil)
  return @license_key if license_key.nil?

  @license_key = license_key

  cdn(:cloud) unless gpl?
end


122
123
124
125
126
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 122

def menubar(visible: true)
  @config[:menuBar] = {
    isVisible: visible
  }
end

Returns:

  • (Boolean)


33
34
35
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 33

def menubar?
  @config.dig(:menuBar, :isVisible) || false
end

#plugin(name, **kwargs) ⇒ Object



146
147
148
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 146

def plugin(name, **kwargs)
  @config[:plugins] << Editor::PropsPlugin.new(name, **kwargs)
end

#plugins(*names, **kwargs) ⇒ Object



150
151
152
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 150

def plugins(*names, **kwargs)
  names.each { |name| plugin(name, **kwargs) }
end

#premium(premium = nil) ⇒ Object



78
79
80
81
82
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 78

def premium(premium = nil)
  return @premium if premium.nil?

  @premium = premium
end

#premium?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 25

def premium?
  @premium
end

#to_h_with_overrides(**overrides) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 37

def to_h_with_overrides(**overrides)
  {
    version: overrides.fetch(:version, version),
    premium: overrides.fetch(:premium, premium),
    cdn: overrides.fetch(:cdn, cdn),
    translations: overrides.fetch(:translations, translations),
    license_key: overrides.fetch(:license_key, license_key),
    type: overrides.fetch(:type, type),
    ckbox: overrides.fetch(:ckbox, ckbox),
    config: config.merge(overrides.fetch(:config, {}))
  }
end

#toolbar(*items, should_group_when_full: true, &block) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 128

def toolbar(*items, should_group_when_full: true, &block)
  if @config[:toolbar].blank? || !items.empty?
    @config[:toolbar] = {
      items: items,
      shouldNotGroupWhenFull: !should_group_when_full
    }
  end

  return unless block

  builder = ToolbarBuilder.new(@config[:toolbar])
  builder.instance_eval(&block)
end

#translations(*translations) ⇒ Object



84
85
86
87
88
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 84

def translations(*translations)
  return @translations if translations.empty?

  @translations = translations
end

#type(type = nil) ⇒ Object

Raises:

  • (ArgumentError)


111
112
113
114
115
116
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 111

def type(type = nil)
  return @type if type.nil?
  raise ArgumentError, "Invalid editor type: #{type}" unless Editor::Props.valid_editor_type?(type)

  @type = type
end

#version(version = nil) ⇒ Object



90
91
92
93
94
# File 'lib/ckeditor5/rails/presets/preset_builder.rb', line 90

def version(version = nil)
  return @version.to_s if version.nil?

  @version = Semver.new(version)
end