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(
- 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
- 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