# frozen_string_literal: true require_relative 'toolbar_builder' require_relative 'plugins_builder' require_relative 'preset_builder' module CKEditor5::Rails::Presets class Manager attr_reader :presets alias to_h presets # Initializes a new Manager instance and sets up the default preset def initialize @presets = {} define_default_preset end # Define a new preset configuration # # @param name [Symbol] Name of the preset # @param inherit [Boolean] Whether to inherit from default preset # @example Define custom preset inheriting from default # presets.define :custom do # menubar visible: false # toolbar :bold, :italic # end # @example Define preset from scratch # presets.define :blank, inherit: false do # version '43.3.1' # gpl # type :classic # end # @return [PresetBuilder] Created preset instance def define(name, inherit: true, &block) preset = if inherit && default.present? default.clone else PresetBuilder.new end preset.instance_eval(&block) @presets[name] = preset end # Override existing preset configuration # # @param name [Symbol] Name of the preset to override # @example Override existing preset # presets.override :custom do # menubar visible: false # toolbar do # remove :underline, :heading # end # end def override(name, &block) @presets[name].instance_eval(&block) end alias extend override # Get the default preset configuration # @return [PresetBuilder, nil] Default preset or nil if not defined def default @presets[:default] end # Get a preset by name # @param name [Symbol] Name of the preset # @return [PresetBuilder, nil] Found preset or nil if not found def [](name) @presets[name] end private # Defines the default preset with common editor settings # @example Basic configuration # CKEditor5::Rails.configure do # presets.define :default do # version '43.3.1' # gpl # type :classic # menubar # end # end def define_default_preset define :default do # Set default version from gem constant version CKEditor5::Rails::DEFAULT_CKEDITOR_VERSION # Enable automatic version upgrades for security patches automatic_upgrades # Use GPL license and classic editor type gpl type :classic menubar # Configure default toolbar items toolbar :undo, :redo, :|, :heading, :|, :bold, :italic, :underline, :|, :link, :insertImage, :mediaEmbed, :insertTable, :blockQuote, :|, :bulletedList, :numberedList, :todoList, :outdent, :indent # Configure default plugins plugins :AccessibilityHelp, :Autoformat, :AutoImage, :Autosave, :BlockQuote, :Bold, :CloudServices, :Essentials, :Heading, :ImageBlock, :ImageCaption, :ImageInline, :ImageInsert, :ImageInsertViaUrl, :ImageResize, :ImageStyle, :ImageTextAlternative, :ImageToolbar, :ImageUpload, :Indent, :IndentBlock, :Italic, :Link, :LinkImage, :List, :ListProperties, :MediaEmbed, :Paragraph, :PasteFromOffice, :PictureEditing, :SelectAll, :Table, :TableCaption, :TableCellProperties, :TableColumnResize, :TableProperties, :TableToolbar, :TextTransformation, :TodoList, :Underline, :Undo, :Base64UploadAdapter # Configure default image toolbar configure :image, { toolbar: ['imageTextAlternative', 'imageStyle:inline', 'imageStyle:block', 'imageStyle:side'] } end end end end