Packages
fermo
0.7.0
0.20.1
0.20.0
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.4
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A static site generator
Current section
Files
Jump to
Current section
Files
lib/fermo/helpers/links.ex
defmodule Fermo.Helpers.Links do
@doc false
defmacro __using__(_opts \\ %{}) do
quote do
require Fermo.Helpers.Links
def link_to(href, [do: content] = other) do
link_to(content, href, [])
end
def link_to(text, href) when is_binary(text) and is_binary(href) do
"<a href=\"#{href}\">#{text}</a>"
end
def link_to(text, nil, attributes) when is_binary(text) and is_list(attributes) do
attribs = to_attributes(attributes)
"<a #{Enum.join(attribs, " ")}>#{text}</a>"
end
def link_to(href, attributes, [do: content] = other) when is_binary(href) and is_list(attributes) do
link_to(content, href, attributes)
end
def link_to(text, href, attributes) when is_binary(text) and is_binary(href) and is_list(attributes) do
attribs = to_attributes(attributes)
"<a href=\"#{href}\" #{Enum.join(attribs, " ")}>#{text}</a>"
end
defp to_attributes(attributes) do
Enum.map(attributes, &(to_attribute(&1)))
end
defp to_attribute({k, v}) when is_binary(v) do
"#{k}=\"#{v}\""
end
defp to_attribute({k, v}) when is_map(v) do
Enum.reduce(v, [], fn {k2, v2}, acc ->
"#{k}-#{k2}=\"#{v2}\""
end)
end
def mail_to(email, caption \\ nil, _mail_options \\ %{}) do
# TODO handle _mail_options
mail_href = "mailto:#{email}"
link_to((caption || email), mail_href)
end
end
end
end