shift73k/lib/bones73k_web/views/icon_helpers.ex

36 lines
1,013 B
Elixir
Raw Normal View History

2021-02-25 17:53:44 -05:00
defmodule Bones73kWeb.IconHelpers do
@moduledoc """
Generate SVG sprite use tags for SVG icons
"""
use Phoenix.HTML
import Bones73k.Util.List
alias Bones73kWeb.Router.Helpers, as: Routes
def icon_div(conn, name, div_opts \\ [], svg_opts \\ []) do
content_tag(:div, tag_opts(name, div_opts)) do
icon_svg(conn, name, svg_opts)
end
end
def icon_svg(conn, name, opts \\ []) do
content_tag(:svg, tag_opts(name, opts)) do
tag(:use, "xlink:href": Routes.static_path(conn, "/images/icons.svg#" <> name))
end
end
defp tag_opts(name, opts) do
classes = "#{Keyword.get(opts, :class, "")} #{name}" |> String.trim_leading()
styles = Keyword.get(opts, :style)
width = Keyword.get(opts, :width)
height = Keyword.get(opts, :height)
id = Keyword.get(opts, :id)
[class: classes]
|> prepend_if(styles, {:style, styles})
|> prepend_if(width, {:style, width})
|> prepend_if(height, {:style, height})
|> prepend_if(id, {:id, id})
end
end