module CKEditor5::Rails::Cdn::Helpers
def build_assets_html_tags(bundle, preset, importmap:, lazy: nil)
-
(String, nil)
- HTML tags string or nil if using importmap
Parameters:
-
lazy
(Boolean
) -- Whether to enable lazy loading -
importmap
(Boolean
) -- Whether to use importmap for dependencies -
preset
(PresetBuilder
) -- Preset configuration -
bundle
(AssetsBundle
) -- Bundle containing assets to include
def build_assets_html_tags(bundle, preset, importmap:, lazy: nil) serializer = Assets::AssetsBundleHtmlSerializer.new( bundle, importmap: importmap && !importmap_available?, lazy: lazy ) html = safe_join([ serializer.to_html(nonce: content_security_policy_nonce), ckeditor5_inline_plugins_tags(preset) ]) if importmap_available? @__ckeditor_context[:html_tags] = html nil else html end end
def ckeditor5_assets(
- Example: Editor only configuration with different types -
Example: Using preset builder object -
Example: Commercial usage with license key -
Example: Using custom preset with translations and language -
Example: Simple editor with custom configuration -
Example: Basic usage with default preset -
Parameters:
-
kwargs
(Hash
) -- Additional configuration options: -
preset
(Symbol, PresetBuilder
) -- The name of the preset to use (default: :default)
def ckeditor5_assets( preset: :default, importmap: true, lazy: false, **kwargs ) ensure_importmap_not_rendered! mapped_preset = merge_with_editor_preset(preset, **kwargs) bundle = create_preset_bundle(mapped_preset) @__ckeditor_context = { license_key: mapped_preset.license_key, bundle: bundle, preset: mapped_preset } build_assets_html_tags(bundle, mapped_preset, importmap: importmap, lazy: lazy) end
def ckeditor5_lazy_javascript_tags
- Example: With Turbo/Stimulus dynamic editor loading -
Other tags:
- Note: - Do not use this helper if ckeditor5_assets is already included on the page
def ckeditor5_lazy_javascript_tags ensure_importmap_not_rendered! tags = [ Assets::WebComponentBundle.instance.to_html(nonce: content_security_policy_nonce), ckeditor5_inline_plugins_tags ] if importmap_available? @__ckeditor_context = { bundle: combined_bundle } else tags.prepend( Assets::AssetsImportMap.new(combined_bundle).to_html(nonce: content_security_policy_nonce) ) end safe_join(tags) end
def combined_bundle
-
(AssetsBundle)
- Combined bundle containing all preset assets
def combined_bundle acc = Assets::AssetsBundle.new(scripts: [], stylesheets: []) Engine.presets.to_h.values.each_with_object(acc) do |preset, bundle| bundle << create_preset_bundle(preset) end acc end
def ensure_importmap_not_rendered!
-
(ImportmapAlreadyRenderedError)
- If importmap was already rendered
def ensure_importmap_not_rendered! return unless importmap_available? && importmap_rendered? raise ImportmapAlreadyRenderedError, 'CKEditor5 assets must be included before javascript_importmap_tags. ' \ 'Please move ckeditor5_assets helper before javascript_importmap_tags in your layout.' end
def importmap_available?
-
(Boolean)
- true if importmap is supported
def importmap_available? respond_to?(:importmap_rendered?) end
def merge_with_editor_preset(preset, language: nil, **kwargs)
-
(ArgumentError)
- If required parameters are missing
Returns:
-
(PresetBuilder)
- New preset instance with merged configuration
Parameters:
-
kwargs
(Hash
) -- Additional configuration options -
language
(Symbol, nil
) -- UI language code -
preset
(Symbol, PresetBuilder
) -- Base preset to merge with
def merge_with_editor_preset(preset, language: nil, **kwargs) found_preset = Engine.find_preset!(preset) new_preset = found_preset.clone.merge_with_hash!(**kwargs) # Assign default language if not present if language.present? new_preset.language(language) elsif !new_preset.language? new_preset.language(I18n.locale) end validate_required_preset_params!(new_preset, preset) new_preset end
def validate_required_preset_params!(preset, preset_name)
-
(ArgumentError)
- If version or type is missing
Parameters:
-
preset_name
(Symbol
) -- Name of the preset for error messages -
preset
(PresetBuilder
) -- Preset to validate
def validate_required_preset_params!(preset, preset_name) %i[version type].each do |key| next if preset.public_send(key).present? raise ArgumentError, "Poor thing. You forgot to define #{key}. Make sure you passed `#{key}:` parameter to " \ "`ckeditor5_assets` or defined default one in your `#{preset_name}` preset!" end end