Packages
ckeditor5_phoenix
1.15.4
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/installer/installer.ex
defmodule CKEditor5.Installer do
@moduledoc """
Module responsible for downloading CKEditor 5 NPM packages into deps folder.
"""
alias CKEditor5.Installer.NPMRegistry
@doc """
Installs CKEditor 5 packages.
## Options
* `:premium` - If true, installs CKEditor 5 Premium Features package as well.
* `:version` - Specifies the version to install. If not provided, installs the latest version.
"""
def install(opts \\ []) do
packages = ["ckeditor5"]
packages =
if Keyword.get(opts, :premium, false) do
packages ++ ["ckeditor5-premium-features"]
else
packages
end
packages
|> Enum.map(fn package ->
Task.async(fn -> install_package(package, opts) end)
end)
|> Enum.each(&Task.await(&1, :infinity))
end
defp install_package(package_name, opts) do
case get_version(opts, package_name) do
{:ok, version} ->
NPMRegistry.install_package(
package_name,
version,
"deps/#{package_name}",
&modify_package/1
)
{:error, reason} ->
IO.puts("Failed to get version of #{package_name}: #{reason}")
end
end
defp get_version(opts, package_name) do
if version = Keyword.get(opts, :version) do
{:ok, version}
else
NPMRegistry.get_latest_version(package_name)
end
end
defp modify_package(path) do
browser_dist = Path.join(path, "dist/browser")
dist = Path.join(path, "dist")
if File.exists?(browser_dist) do
File.ls!(browser_dist)
|> Enum.filter(fn file ->
String.ends_with?(file, ".js") or String.ends_with?(file, ".css")
end)
|> Enum.each(fn file ->
File.cp!(Path.join(browser_dist, file), Path.join(dist, file))
end)
end
end
end