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/editor/editor.ex
defmodule CKEditor5.Components.Editor do
@moduledoc """
LiveView component for CKEditor 5 integration in Phoenix Framework.
This module provides the necessary functionality to render and manage
CKEditor 5 instances within Phoenix LiveView applications.
"""
use Phoenix.LiveComponent
import CKEditor5.Components.FormAttrs
alias CKEditor5.Components.Editor.Assigns
alias CKEditor5.Components.HiddenInput
@doc """
Renders the CKEditor 5 component in a LiveView.
"""
attr :id, :string, required: false, doc: "The ID for the editor instance."
attr :class, :string,
required: false,
default: "",
doc: "Additional CSS classes to apply to the editor container."
attr :style, :string,
required: false,
default: "",
doc: "Inline styles to apply to the editor container."
attr :preset, :string, default: "default", doc: "The name of the preset to use."
attr :change_event, :boolean,
default: false,
doc:
"Whether the editor should push events to the LiveView. If true, the editor will send `ckeditor5:change` event every time the content changes."
attr :editable_height, :string,
default: nil,
required: false,
doc:
"The height of the editable area (e.g., \"300px\"). If not provided, the height will be determined by the editor's content."
attr :save_debounce_ms, :integer,
default: 400,
required: false,
doc: "Debounce time in ms for saving/syncing editor content."
attr :type, :string,
required: false,
default: nil,
doc: "The type of the editor. Overrides the type from the preset."
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`."
slot :inner_block,
required: false,
doc: "Optional content to render inside the editor container."
form_attrs()
def render(assigns) do
assigns = Assigns.prepare(assigns)
~H"""
<div
id={@id}
class={@class}
style={@style}
phx-hook="CKEditor5"
phx-update="ignore"
cke-preset={Jason.encode!(@preset)}
cke-editable-height={@editable_height}
cke-initial-value={@value || ""}
cke-change-event={@change_event}
cke-save-debounce-ms={@save_debounce_ms}
cke-language={@language}
cke-content-language={@content_language}
>
<div id={"#{@id}_editor"}></div>
<%= if @name do %>
<HiddenInput.render
id={"#{@id}_input"}
name={@name}
value={@value}
required={@required}
/>
<% end %>
<%= render_slot(@inner_block) %>
</div>
"""
end
end