Packages
ckeditor5_phoenix
1.25.1
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/helpers.ex
defmodule CKEditor5.Helpers do
@moduledoc """
Common helper functions for CKEditor5 components.
"""
@doc """
Assigns a unique ID if one is not already present in assigns.
Generates a random UUID-based ID only when :id key is missing.
"""
@spec generate_id_if_missing(map(), String.t()) :: map()
def generate_id_if_missing(assigns, prefix) do
Phoenix.Component.assign_new(assigns, :id, fn ->
uuid = :crypto.strong_rand_bytes(16) |> Base.encode16(case: :lower)
"#{prefix}-#{uuid}"
end)
end
@doc """
Assigns a unique ID if one is not already present in assigns.
Generates a random UUID-based ID only when :id key is missing.
This is an alias for `generate_id_if_missing/2` to maintain backward compatibility.
"""
@spec assign_id_if_missing(map(), String.t()) :: map()
def assign_id_if_missing(assigns, fallback) do
Phoenix.Component.assign_new(assigns, :id, fn -> fallback end)
end
@doc """
Checks if a given version string is in semantic versioning format (e.g., "1.0.0").
"""
def is_semver_version?(version) when is_binary(version) do
String.match?(version, ~r/^\d+\.\d+\.\d+(-[a-zA-Z0-9-.]+)?$/)
end
@doc """
Maps all keys in a map to strings.
"""
def map_keys_to_strings(map) when is_map(map) do
Enum.map(map, fn {key, value} ->
{to_string(key), value}
end)
|> Map.new()
end
@doc """
Serializes a map of styles into a CSS string.
Converts a map of styles into a string suitable for inline CSS.
Example: %{color: "red", "font-size": "16px"} becomes "color: red; font-size: 16px".
"""
def serialize_styles_map(styles_map) when is_map(styles_map) do
styles_map
|> Enum.map_join("; ", fn {key, value} -> "#{key}: #{value}" end)
end
@doc """
Parses a style string into a map.
"""
def parse_style(nil), do: %{}
def parse_style(style) when is_binary(style) do
style
|> String.split(";")
|> Enum.map(&String.trim/1)
|> Enum.reject(&(&1 == ""))
|> Enum.reduce(%{}, fn rule, acc ->
case String.split(rule, ":", parts: 2) do
[key, value] -> Map.put(acc, String.trim(key), String.trim(value))
_ -> acc
end
end)
end
def parse_style(style), do: style
end