diff options
author | feld <feld@feld.me> | 2019-06-13 12:49:01 +0000 |
---|---|---|
committer | feld <feld@feld.me> | 2019-06-13 12:49:01 +0000 |
commit | 163fa180f5b06ca49464dd06a4fed64aed0c97bf (patch) | |
tree | 0f09c6d77094332a0094632745ebeb652f6732f1 /lib | |
parent | 7363a0ea8aa5c034e0335e826c081f1166e71f92 (diff) | |
parent | a12f8e13c8f3cd176989c28810ff578bf7c09c69 (diff) | |
download | pleroma-163fa180f5b06ca49464dd06a4fed64aed0c97bf.tar.gz pleroma-163fa180f5b06ca49464dd06a4fed64aed0c97bf.zip |
Merge branch 'feld/pleroma-fix/ogp-title' into 'fix/ogp-title'
Improve <title> fallback; Add a test
See merge request feld/pleroma!1
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex b/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex index 7da4e7561..82f1cce29 100644 --- a/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex +++ b/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex @@ -1,17 +1,19 @@ defmodule Pleroma.Web.RichMedia.Parsers.MetaTagsParser do def parse(html, data, prefix, error_message, key_name, value_name \\ "content") do - with elements = [_ | _] <- get_elements(html, key_name, prefix), - page_title = get_page_title(html), - meta_data = - Enum.reduce(elements, data, fn el, acc -> - attributes = normalize_attributes(el, prefix, key_name, value_name) - - Map.merge(acc, attributes) - end) - |> Map.put_new(:title, page_title) do - {:ok, meta_data} + meta_data = + html + |> get_elements(key_name, prefix) + |> Enum.reduce(data, fn el, acc -> + attributes = normalize_attributes(el, prefix, key_name, value_name) + + Map.merge(acc, attributes) + end) + |> maybe_put_title(html) + + if Enum.empty?(meta_data) do + {:error, error_message} else - _e -> {:error, error_message} + {:ok, meta_data} end end @@ -30,6 +32,15 @@ defmodule Pleroma.Web.RichMedia.Parsers.MetaTagsParser do %{String.to_atom(data[key_name]) => data[value_name]} end + defp maybe_put_title(%{title: _} = meta, _), do: meta + + defp maybe_put_title(meta, html) do + case get_page_title(html) do + "" -> meta + title -> Map.put_new(meta, :title, title) + end + end + defp get_page_title(html) do Floki.find(html, "title") |> Floki.text() end |