Packages
ckeditor5_phoenix
1.14.2
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/assigns/attribute_validator.ex
defmodule CKEditor5.Components.Editor.AttributeValidator do
@moduledoc """
Validates attributes for different editor types in the Editor component.
"""
alias CKEditor5.Errors.Error
alias CKEditor5.Preset
alias CKEditor5.Preset.EditorType
@doc """
Validates attributes based on the editor type.
"""
def validate_for_editor_type(%{preset: %Preset{type: preset_type}} = assigns) do
if EditorType.single_editing_like?(preset_type) do
assigns
else
validate_multiroot_attrs(assigns, preset_type)
end
end
# Validates that single-root-only attributes are not used in multiroot editors
defp validate_multiroot_attrs(assigns, preset_type) do
disallowed = [
{:name, assigns.name, "Remove the `field` and `name` attributes."},
{:value, assigns.value, "Use the `<.cke_editable>` component to set content instead."},
{:editable_height, assigns.editable_height,
"Set height on individual editable areas if needed."},
{:required, assigns.required, "The `required` attribute is only for form integration."}
]
case Enum.find(disallowed, &has_value?/1) do
{attr, _value, hint} ->
raise Error,
"The `#{attr}` attribute is not supported for editor type '#{preset_type}'. #{hint}"
nil ->
assigns
end
end
defp has_value?({:value, value, _}), do: value not in [nil, ""]
defp has_value?({:required, value, _}), do: value == true
defp has_value?({_, value, _}), do: value != nil
end