diff --git a/lib/bones73k_web/views/icon_helpers.ex b/lib/bones73k_web/views/icon_helpers.ex new file mode 100644 index 00000000..ed5f7c1d --- /dev/null +++ b/lib/bones73k_web/views/icon_helpers.ex @@ -0,0 +1,35 @@ +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