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/cloud/ckbox.ex
defmodule CKEditor5.Cloud.CKBox do
@moduledoc """
Represents the CKBox configuration for a CKEditor 5 preset.
"""
import Norm
alias CKEditor5.{Errors, Helpers}
@derive Jason.Encoder
@enforce_keys [:version]
@type t :: %__MODULE__{
version: String.t(),
theme: String.t() | nil
}
defstruct [
:version,
theme: nil
]
@doc """
Defines the schema for a raw CKBox configuration map.
"""
def s do
schema =
schema(%{
version: spec(is_binary() and (&Helpers.is_semver_version?/1)),
theme: spec(is_binary())
})
selection(schema, [:version])
end
@doc """
Parses a map into a CKBox struct.
Returns {:ok, %CKBox{}} if valid, {:error, reason} if invalid.
"""
def parse(nil), do: {:ok, nil}
def parse(map) when is_map(map) do
case conform(map, s()) do
{:ok, _} -> {:ok, struct(__MODULE__, map)}
{:error, errors} -> {:error, errors}
end
end
def parse(_), do: {:error, "CKBox configuration must be a map or nil"}
@doc """
Parses a map into a CKBox struct.
Returns %CKBox{} if valid, raises an error if invalid.
"""
def parse!(ckbox_data) do
case parse(ckbox_data) do
{:ok, ckbox} -> ckbox
{:error, reason} -> raise Errors.InvalidCloudConfiguration, reason: reason
end
end
@doc """
Merges the current CKBox configuration with the provided overrides.
"""
def merge(nil, nil), do: nil
def merge(nil, overrides) when is_map(overrides) do
case parse(overrides) do
{:ok, ckbox} -> ckbox
{:error, _} -> nil
end
end
def merge(_, nil), do: nil
def merge(ckbox, %__MODULE__{} = override_struct),
do: merge(ckbox, Map.from_struct(override_struct))
def merge(%__MODULE__{} = ckbox, overrides) when is_map(overrides) do
%__MODULE__{
version: Map.get(overrides, :version, ckbox.version),
theme: Map.get(overrides, :theme, ckbox.theme)
}
end
end