Packages
ckeditor5_phoenix
1.26.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/context/context.ex
defmodule CKEditor5.Context do
@moduledoc """
Represents the CKEditor 5 context configuration.
"""
import Norm
alias CKEditor5.{CustomTranslations, Errors}
@derive Jason.Encoder
@type t :: %__MODULE__{
config: map(),
watchdog: map(),
custom_translations: CustomTranslations.t() | nil
}
defstruct config: %{
plugins: []
},
watchdog: nil,
custom_translations: nil
@doc """
Defines the schema for a raw Context configuration map.
"""
def s do
schema =
schema(%{
config: spec(is_map()),
watchdog: spec(is_map() or is_nil()),
custom_translations: spec(is_map() or is_nil())
})
selection(schema, [:config])
end
@doc """
Parses a map into a Context struct.
Returns {:ok, %Context{}} if valid, {:error, reason} if invalid.
"""
def parse(nil), do: {:ok, nil}
def parse(%__MODULE__{} = context), do: {:ok, context}
def parse(map) when is_map(map) do
with {:ok, _} <- conform(map, s()),
{:ok, parsed_map} <- parse_custom_translations(map) do
{:ok, struct(__MODULE__, parsed_map)}
else
{:error, errors} -> {:error, errors}
end
end
def parse(_), do: {:error, "Context configuration must be a map or nil"}
# Parses the custom translations from a map into a CustomTranslations struct.
defp parse_custom_translations(context_map) do
case CustomTranslations.parse(context_map[:custom_translations]) do
{:ok, custom_translations} ->
{:ok, Map.put(context_map, :custom_translations, custom_translations)}
{:error, error} ->
{:error, error}
end
end
@doc """
Parses a map into a Context struct.
Returns %Context{} if valid, raises an error if invalid.
"""
def parse!(data) do
case parse(data) do
{:ok, context} -> context
{:error, reason} -> raise Errors.InvalidContext, reason: reason
end
end
end