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/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_no_disallowed_attrs(assigns, preset_type)
end
end
# Validates that disallowed attributes are not present for multi-editing editors
defp validate_no_disallowed_attrs(assigns, preset_type) do
disallowed_attrs = build_disallowed_attrs_list(assigns)
case find_present_disallowed_attr(disallowed_attrs) do
{attr, _value, hint} ->
message =
"The `#{attr}` attribute is not supported for editor type '#{preset_type}'. #{hint}"
raise Error, message
nil ->
assigns
end
end
# Builds a list of potentially disallowed attributes with their values and error hints
defp build_disallowed_attrs_list(assigns) do
[
{: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."}
]
end
# Finds the first disallowed attribute that is present
defp find_present_disallowed_attr(disallowed_attrs) do
Enum.find(disallowed_attrs, fn {attr, value, _hint} -> attr_present?(attr, value) end)
end
# Checks if an attribute is present based on its type and value
defp attr_present?(:value, value), do: value != "" && not is_nil(value)
defp attr_present?(:required, value), do: value == true
defp attr_present?(_attr, value), do: not is_nil(value)
end