25 lines
781 B
Elixir
25 lines
781 B
Elixir
defmodule PinchflatWeb.Searches.SearchHTML do
|
|
use PinchflatWeb, :html
|
|
|
|
embed_templates "search_html/*"
|
|
|
|
@doc """
|
|
Highlight search terms in a string of text based on `[PF_HIGHLIGHT]` and `[/PF_HIGHLIGHT]` tags
|
|
"""
|
|
attr :text, :string, required: true
|
|
|
|
def highlight_search_terms(assigns) do
|
|
split_string = String.split(assigns.text, ~r{\[PF_HIGHLIGHT\]|\[/PF_HIGHLIGHT\]}, include_captures: true)
|
|
assigns = assign(assigns, split_string: split_string)
|
|
|
|
~H"""
|
|
<%= for fragment <- @split_string do %>
|
|
{render_fragment(fragment)}
|
|
<% end %>
|
|
"""
|
|
end
|
|
|
|
defp render_fragment("[PF_HIGHLIGHT]"), do: raw(~s(<span class="font-bold italic">))
|
|
defp render_fragment("[/PF_HIGHLIGHT]"), do: raw("</span>")
|
|
defp render_fragment(text), do: text
|
|
end
|