Liveview Text Search and Highlight Example App
From ElixirBlocks
# lib/my_app_web/live/json_search_live.ex defmodule AppWeb.SandboxLive do use AppWeb, :live_view def mount(_params, _session, socket) do {:ok, assign(socket, text: "Hello world! This is a test. Hello again!", search: "")} end def handle_event("search_change", %{"value" => search}, socket) do {:noreply, assign(socket, search: search)} end def handle_event("text_change", %{"value" => text}, socket) do {:noreply, assign(socket, text: text)} end def render(assigns) do ~H""" <div class="p-4"> <h1 class="text-xl mb-4">Search Test</h1> <div class="mb-4"> <input type="text" value={@search} phx-keyup="search_change" placeholder="Search..." class="w-full p-2 border" /> </div> <div class="mb-4"> <textarea rows="4" phx-keyup="text_change" class="w-full p-2 border" ><%= @text %></textarea> </div> <div class="border p-4 bg-gray-100"> <%= if @search != "" do %> <%= raw(String.replace(@text, ~r/#{Regex.escape(@search)}/i, "<span style='background: yellow'>\\0</span>")) %> <% else %> <%= @text %> <% end %> </div> </div> """ end end