Packages
floki
0.35.1
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.1
0.37.0
0.36.3
0.36.2
0.36.1
0.36.0
0.35.4
0.35.3
0.35.2
0.35.1
0.35.0
0.34.3
0.34.2
0.34.1
0.34.0
0.33.1
0.33.0
0.32.1
0.32.0
0.31.0
0.30.1
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.23.0
0.22.0
0.21.0
0.20.4
0.20.3
0.20.2
0.20.1
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.2
0.17.1
0.17.0
0.16.0
0.15.0
0.14.0
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.0
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Floki is a simple HTML parser that enables search for nodes using CSS selectors.
Current section
Files
Jump to
Current section
Files
lib/floki/filter_out.ex
defmodule Floki.FilterOut do
@moduledoc false
# Helper functions for filtering out a specific element from the tree.
@type selector :: :comment | :text | Floki.css_selector()
def filter_out(html_tree_or_node, type) when type in [:text, :comment] do
mapper(html_tree_or_node, type)
end
def filter_out(html_tree, selector) when is_list(html_tree) do
Floki.find_and_update(html_tree, selector, fn
{_tag, _attrs} -> :delete
other -> other
end)
end
def filter_out(html_node, selector) do
[html_node]
|> Floki.find_and_update(selector, fn
{_tag, _attrs} -> :delete
other -> other
end)
|> List.first() || []
end
defp filter({nodetext, _, _}, selector) when nodetext === selector, do: false
defp filter({nodetext, _}, selector) when nodetext === selector, do: false
defp filter(text, :text) when is_binary(text), do: false
defp filter(_, _), do: true
defp mapper(nodes, selector) when is_list(nodes) do
nodes
|> Stream.filter(&filter(&1, selector))
|> Stream.map(&mapper(&1, selector))
|> Enum.to_list()
end
defp mapper({nodetext, x, y}, selector) do
{nodetext, x, mapper(y, selector)}
end
defp mapper(nodetext, _), do: nodetext
end