Add support for img tags
This commit is contained in:
@ -5,6 +5,8 @@ defmodule Outlook.InternalTree.Html do
|
||||
|
||||
@desirable_atts %{"a" => [:href], "img" => [:src]}
|
||||
|
||||
@void_elements ~w(img br hr)
|
||||
|
||||
def strip_attributes([%InternalNode{type: :element} = node | rest]) do
|
||||
d_atts = Map.get(@desirable_atts, node.name, [])
|
||||
atts = Map.reject(node.attributes, fn {k,_} -> k not in d_atts end)
|
||||
@ -22,6 +24,11 @@ defmodule Outlook.InternalTree.Html do
|
||||
def strip_attributes([]), do: []
|
||||
|
||||
|
||||
def to_html([%{type: :element} = node | rest]) when node.name in @void_elements do
|
||||
attr_string = Enum.map_join(node.attributes, "", fn {k,v} -> " #{k}=\"#{v}\"" end)
|
||||
"<#{node.name}#{attr_string}>" <> to_html(rest)
|
||||
end
|
||||
|
||||
def to_html([%{type: :element} = node | rest]) do
|
||||
attr_string = Enum.map_join(node.attributes, "", fn {k,v} -> " #{k}=\"#{v}\"" end)
|
||||
"<#{node.name}#{attr_string}>" <>
|
||||
|
||||
@ -10,6 +10,7 @@ defmodule Outlook.InternalTree.RawInternalBasic do
|
||||
|
||||
@splitmarker "@@translationunit@@"
|
||||
@nonperiodmarker "@@nonperiod@@"
|
||||
@void_elements ~w(img br hr)
|
||||
|
||||
def set_split_markers([ %InternalNode{type: :text} = textnode | rest ]) do
|
||||
[ %InternalNode{textnode |
|
||||
@ -68,9 +69,14 @@ defmodule Outlook.InternalTree.RawInternalBasic do
|
||||
|> strip_empty_tunits()
|
||||
end
|
||||
|
||||
def partition_inlinelevel([ node | rest ]) when node.name in @void_elements do
|
||||
[ node | partition_inlinelevel(rest) ]
|
||||
end
|
||||
|
||||
def partition_inlinelevel([ %InternalNode{type: :element} = node | rest ]) do
|
||||
[ partition_inlinelevel(node.content)
|
||||
|> chunk_with_list()
|
||||
# elements without content are being dropped here
|
||||
|> Enum.map(fn nodelist -> %InternalNode{node | content: nodelist} end)
|
||||
| partition_inlinelevel(rest) ]
|
||||
end
|
||||
@ -93,7 +99,7 @@ defmodule Outlook.InternalTree.RawInternalBasic do
|
||||
def partition_inlinelevel([]), do: []
|
||||
|
||||
|
||||
def strip_empty_nodes([%{type: :element} = node | rest]) when node.name in ~w(img br) do
|
||||
def strip_empty_nodes([%{type: :element} = node | rest]) when node.name in @void_elements do
|
||||
[ node | strip_empty_nodes(rest) ]
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user