Packages
ckeditor5_phoenix
1.19.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/context.ex
defmodule CKEditor5.Components.Context do
@moduledoc """
A component for rendering a CKEditor5 context.
"""
use Phoenix.Component
alias CKEditor5.{Context, Contexts, Helpers}
attr :id, :string,
required: false,
doc:
"The ID of the context to be used. " <>
"Use it later in editor components to specify which context to use." <>
"If not specified, then a random ID will be generated."
attr :context, :any,
required: true,
doc: "The name or reference of the context to be used."
slot :inner_block,
required: false,
doc:
"Optional content of the context. Every editor instance within block will use this context."
attr :language, :string,
required: false,
default: nil,
doc:
"The language code for the editor UI (e.g., 'en', 'pl', 'de', etc.). If not provided, will use the default \"en\" language."
attr :content_language, :string,
required: false,
default: nil,
doc:
"The content language code for the editor (e.g. 'en', 'pl', 'de', etc.). This is used to set the `lang` attribute on the editable area. " <>
"If not provided, it will default to the same value as `language`."
attr :rest, :global
def render(assigns) do
assigns =
assigns
|> Helpers.generate_id_if_missing("cke-context")
|> load_context()
~H"""
<div
id={@id}
phx-hook="CKContext"
phx-update="ignore"
data-cke-language={@language}
data-cke-content-language={@content_language}
data-cke-context={Jason.encode!(@context)}
{@rest}
>
<%= render_slot(@inner_block) %>
</div>
"""
end
# Loads the preset configuration from the preset name
defp load_context(%{context: %Context{}} = assigns), do: assigns
defp load_context(%{context: preset} = assigns) when is_binary(preset) do
preset = Contexts.get!(preset)
Map.put(assigns, :context, preset)
end
end