lib/shared/slug.ex
defmodule ZoonkWeb.Shared.Slug do
@moduledoc """
Slug module for generating slugs.
Forked from https://github.com/norbajunior/slugy
"""
@doc """
Generate a slug from a string.
"""
@spec slug(String.t()) :: String.t()
def slug(str) do
str
|> String.trim()
|> String.normalize(:nfd)
|> String.replace(~r/\s\s+/, " ")
|> String.replace(~r/[^A-z\s\d-]/u, "")
|> String.replace(~r/\s/, "-")
|> String.replace(~r/--+/, "-")
|> String.downcase()
end
end