defmodule Outlook.InternalTree.Html do alias Outlook.InternalTree.InternalNode alias Outlook.InternalTree.TranslationUnit def to_html([ %InternalNode{type: :element} = node | rest]) do attr_string = Map.put(node.attributes, :uuid, node.uuid) |> Enum.map_join(" ", fn {k,v} -> "#{k}=\"#{v}\"" end) "<#{node.name} #{attr_string}>" <> to_html(node.content) <> "" <> to_html(rest) end def to_html([ %InternalNode{type: :text} = node | rest]) do node.content <> to_html(rest) end def to_html([ %InternalNode{type: :comment} = node | rest]) do "" <> to_html(rest) end def to_html([ %TranslationUnit{} = tunit | rest]) do ~s(#{tunit.content}) <> to_html(rest) end def to_html([]), do: "" def to_html_preview([ %InternalNode{type: :element} = node | rest], target_id) do attr_string = Map.put(node.attributes, :uuid, node.uuid) |> Enum.map_join(" ", fn {k,v} -> "#{k}=\"#{v}\"" end) "<#{node.name} #{attr_string}>" <> to_html_preview(node.content, target_id) <> "" <> to_html_preview(rest, target_id) end def to_html_preview([ %InternalNode{type: :text} = node | rest], target_id) do ~s(#{node.content}) <> to_html_preview(rest, target_id) end def to_html_preview([ %InternalNode{type: :comment} = node | rest], target_id) do ~s() <> to_html_preview(rest, target_id) end def to_html_preview([ %TranslationUnit{} = tunit | rest], target_id) do ~s|#{tunit.content}| <> to_html_preview(rest, target_id) end def to_html_preview([], _target_id), do: "" end