Packages
ckeditor5_phoenix
1.5.0
1.28.2
1.28.1
1.28.0
1.27.2
1.27.1
1.27.0
1.26.0
1.25.1
1.25.0
1.24.2
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.0
1.19.0
1.18.0
1.17.2
1.17.1
1.17.0
1.16.1
1.16.0
1.15.8
1.15.7
1.15.6
1.15.5
1.15.4
1.15.3
1.15.2
1.15.1
1.15.0
1.14.2
1.14.1
1.14.0
1.13.0
1.12.0
1.11.0
1.10.2
1.10.1
1.10.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.0
1.4.1
1.4.0
1.3.0
1.2.1
1.2.0
1.1.0
1.0.8
1.0.7
CKEditor 5 integration for Phoenix Framework
Current section
Files
Jump to
Current section
Files
lib/components/cloud/modulepreload.ex
defmodule CKEditor5.Components.Cloud.ModulePreload do
@moduledoc """
A component for rendering module preload link tags in Phoenix.
This component generates link tags with rel="modulepreload" for all modules in the import map.
It helps browsers preload ES modules, improving performance by downloading dependencies
before they are actually needed.
"""
use Phoenix.Component
alias CKEditor5.Cloud
alias CKEditor5.Cloud.AssetPackageBuilder
alias CKEditor5.Preset.CloudCompatibilityChecker
alias CKEditor5.Presets
@doc """
Renders module preload link tags for all modules in the import map.
This helps browsers preload ES modules, improving performance by downloading
dependencies before they are actually needed.
"""
attr :preset, :string, default: "default", doc: "The name of the preset to use."
attr :translations, :any,
default: nil,
doc:
"The languages codes for the editor (e.g., 'en', 'pl', 'de', etc.)." <>
"If not provided, then the `cloud.translations` will be used to load language files."
attr :nonce, :string, default: nil, doc: "The CSP nonce to use for the script tag."
def render(assigns) do
assigns = assign_modules_for_preload(assigns)
~H"""
<link
:for={module_url <- @module_urls}
rel="modulepreload"
href={module_url}
nonce={@nonce}
crossorigin="anonymous"
/>
"""
end
defp assign_modules_for_preload(%{preset: preset, translations: translations} = assigns) do
preset = Presets.get!(preset)
CloudCompatibilityChecker.ensure_cloud_configured!(preset)
module_urls =
preset.cloud
|> Cloud.override_translations(translations)
|> AssetPackageBuilder.build()
|> Map.get(:js)
|> Enum.filter(&(&1.type == :esm))
|> Enum.map(& &1.url)
Map.put(assigns, :module_urls, module_urls)
end
end