module CKEditor5::Rails::Cdn::Helpers

def build_assets_html_tags(bundle, importmap:, lazy: nil)

def build_assets_html_tags(bundle, importmap:, lazy: nil)
  serializer = Assets::AssetsBundleHtmlSerializer.new(
    bundle,
    importmap: importmap && !importmap_available?,
    lazy: lazy
  )
  html = serializer.to_html
  if importmap_available?
    @__ckeditor_context[:html_tags] = html
    nil
  else
    html
  end
end

def ckeditor5_assets(

Other tags:
    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, importmap: importmap, lazy: lazy)
end

def ckeditor5_lazy_javascript_tags

Other 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!
  if importmap_available?
    @__ckeditor_context = {
      bundle: combined_bundle
    }
    return Assets::WebComponentBundle.instance.to_html
  end
  safe_join([
              Assets::AssetsImportMap.new(combined_bundle).to_html,
              Assets::WebComponentBundle.instance.to_html
            ])
end

def combined_bundle

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!

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?

def importmap_available?
  respond_to?(:importmap_rendered?)
end

def merge_with_editor_preset(preset, language: nil, **kwargs)

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
  %i[version type].each do |key|
    next if new_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}` preset!"
  end
  new_preset
end