Packages
indieweb
0.0.20
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.56
0.0.55
0.0.54
0.0.53
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.3
0.0.2
0.0.1
Collection of common IndieWeb utilites like authorship resolution, Webmention, post type discovery and IndieAuth.
Current section
Files
Jump to
Current section
Files
lib/microformats2/utility.ex
defmodule Microformats2.Utility do
@moduledoc false
def get_format(mf2, format) do
case Enum.fetch(extract_all(mf2, format), 0) do
{:ok, mf2} -> mf2
_ -> nil
end
end
def get_value(mf2, property, default_value \\ [])
def get_value(%{properties: properties}, property, default_value) do
Map.get(properties, property, default_value)
end
def get_value(_, _, _), do: {:error, :no_properties}
def extract_all(mf2, format) do
items = Map.take(mf2, ~w(items children)a) |> Map.values() |> List.flatten()
Stream.flat_map(items, fn item -> do_parse_item(item, format) end)
end
defp do_parse_item(item, format) do
types = Map.get(item, :type, [])
if Enum.member?(types, "h-#{format}") do
[item]
else
Stream.concat(
do_extract_from_properties(item, format),
extract_all(item, format)
)
end
end
defp do_extract_from_properties(%{properties: properties}, format) do
Stream.flat_map(properties, fn
{_, items} ->
Stream.flat_map(items, fn
item when is_map(item) ->
do_parse_item(item, format)
_ ->
[]
end)
end)
end
defp do_extract_from_properties(_, _), do: []
end