Packages
indieweb
0.0.35
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/indieweb/app/h_x_app.ex
defmodule IndieWeb.App.HxApp do
@moduledoc """
Parses h-x-app information from a Website.
Using the specificiation of h-x-app information outlined at
https://indieweb.org/h-x-app. This allows platforms that are
richly formatted with said markup to be presented to Koype
in a useful manner.
"""
@behaviour IndieWeb.App.Parser
alias Microformats2.Utility, as: MF2
defp do_format(data) do
result =
Enum.reduce_while(
~w(x-app app),
{:error, :no_app_info},
fn type, acc ->
case MF2.get_format(data, type) do
nil ->
{:cont, acc}
h_app_data ->
{:halt, {:ok, h_app_data}}
end
end
)
case result do
{:ok, h_app_data} ->
app_data =
~w(name logo url)a
|> Enum.map(fn key ->
value = h_app_data |> MF2.get_value(key) |> List.first()
{Atom.to_string(key), value}
end)
|> Map.new()
{:ok, app_data}
{:error, _} ->
result
end
end
@impl true
def resolve(uri) do
case MF2.fetch(uri) do
{:ok, mf2_data} -> do_format(mf2_data)
false -> {:error, :failed_to_fetch_h_x_app_data}
end
end
@impl true
def clear(_), do: :ok
end