diff options
author | feld <feld@feld.me> | 2020-06-02 16:30:03 +0000 |
---|---|---|
committer | feld <feld@feld.me> | 2020-06-02 16:30:03 +0000 |
commit | 6c1c2cddecb011f6e689e1ef19a563aa387714c9 (patch) | |
tree | 217fa1314954adedf3f661867baed1bcb377967b /lib/pleroma | |
parent | 879304dcd94c778b3cdaa2b82f69fccf2b37090c (diff) | |
parent | 24f40b8a26f95ee7f50b6023176d361660ceb35c (diff) | |
download | pleroma-6c1c2cddecb011f6e689e1ef19a563aa387714c9.tar.gz |
Merge branch 'fix/1794-hashtag-search-results' into 'develop'
[#1794] Improvements to hashtags extraction from search query
Closes #1794
See merge request pleroma/pleroma!2611
Diffstat (limited to 'lib/pleroma')
-rw-r--r-- | lib/pleroma/web/mastodon_api/controllers/search_controller.ex | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index 77e2224e4..8840fc19c 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -113,22 +113,44 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do query |> prepare_tags() |> Enum.map(fn tag -> - tag = String.trim_leading(tag, "#") %{name: tag, url: tags_path <> tag} end) end defp resource_search(:v1, "hashtags", query, _options) do - query - |> prepare_tags() - |> Enum.map(fn tag -> String.trim_leading(tag, "#") end) + prepare_tags(query) end - defp prepare_tags(query) do - query - |> String.split() - |> Enum.uniq() - |> Enum.filter(fn tag -> String.starts_with?(tag, "#") end) + defp prepare_tags(query, add_joined_tag \\ true) do + tags = + query + |> String.split(~r/[^#\w]+/u, trim: true) + |> Enum.uniq_by(&String.downcase/1) + + explicit_tags = Enum.filter(tags, fn tag -> String.starts_with?(tag, "#") end) + + tags = + if Enum.any?(explicit_tags) do + explicit_tags + else + tags + end + + tags = Enum.map(tags, fn tag -> String.trim_leading(tag, "#") end) + + if Enum.empty?(explicit_tags) && add_joined_tag do + tags + |> Kernel.++([joined_tag(tags)]) + |> Enum.uniq_by(&String.downcase/1) + else + tags + end + end + + defp joined_tag(tags) do + tags + |> Enum.map(fn tag -> String.capitalize(tag) end) + |> Enum.join() end defp with_fallback(f, fallback \\ []) do |