Add actor search with infinite scroll
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 49s

Replace single WebFinger lookup with paginated search across cached
remote actors and local profiles. New _search_results.html partial
with htmx infinite scroll sentinel. Form submits via hx-get for
seamless pagination.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
giles
2026-02-23 08:18:59 +00:00
parent 8dc354ae0b
commit 87ce2d4970
4 changed files with 114 additions and 11 deletions

View File

@@ -138,13 +138,50 @@ def register(url_prefix="/social"):
async def search():
actor = getattr(g, "_social_actor", None)
query = request.args.get("q", "").strip()
result = None
actors = []
total = 0
followed_urls: set[str] = set()
if query:
result = await services.federation.search_remote_actor(g.s, query)
actors, total = await services.federation.search_actors(g.s, query)
if actor:
following, _ = await services.federation.get_following(
g.s, actor.preferred_username, page=1, per_page=1000,
)
followed_urls = {a.actor_url for a in following}
return await render_template(
"federation/search.html",
query=query,
result=result,
actors=actors,
total=total,
page=1,
followed_urls=followed_urls,
actor=actor,
)
@bp.get("/search/page")
async def search_page():
actor = getattr(g, "_social_actor", None)
query = request.args.get("q", "").strip()
page = request.args.get("page", 1, type=int)
actors = []
total = 0
followed_urls: set[str] = set()
if query:
actors, total = await services.federation.search_actors(
g.s, query, page=page,
)
if actor:
following, _ = await services.federation.get_following(
g.s, actor.preferred_username, page=1, per_page=1000,
)
followed_urls = {a.actor_url for a in following}
return await render_template(
"federation/_search_results.html",
actors=actors,
total=total,
page=page,
query=query,
followed_urls=followed_urls,
actor=actor,
)