site: implement search functionality

This commit is contained in:
Lucas Gabriel Vuotto 2025-04-27 15:20:49 +00:00
parent 3ae6b02672
commit 08be6b17f5
8 changed files with 257 additions and 2 deletions

View file

@ -45,7 +45,7 @@ sub tag_for_pager_shortcut ($self, $content, $page) {
sub link_for_tag ($self, $tag)
{
my $url = $self->url_for("list_media")
->query(tags => $tag->{display});
->query(tags => $tag->{display} . " ");
defined($tag->{kind_id}) and
my %class = (class => "tag-kind-$tag->{kind_id}");
@ -103,6 +103,7 @@ sub startup ($self)
$r->get("/media/<media_id:num>")->to("media#show")->name("show_media");
$r->get("/tags")->to("tags#list")->name("list_tags");
$r->get("/search")->to("tags#search")->name("search_tags");
$r->get("/random/media")->to("random#media")->name("random_media");
$r->get("/random/tag")->to("random#tag")->name("random_tag");

View file

@ -35,4 +35,36 @@ sub list ($self)
})->wait;
}
sub search ($self)
{
my $v = $self->validation;
my $q = $v->required("q")->param;
return $self->render(
status => 400
) if $v->has_error;
return $self->render(json => []) if $q eq "";
$self->render_later;
my $endpoint = $self->api_v0_url->path("search")->query(q => $q);
$self->ua->get_p($endpoint)->then(sub ($tx) {
return $self->render(
json => [],
status => 500,
) if $tx->error;
my $json = $tx->res->json;
my @tags = map +{
display => $_->{display},
count => $_->{count},
kind_class => $_->{kind_id} ?
"tag-kind-$_->{kind_id}" : "accent",
}, $json->{tags}->@*;
return $self->render(json => [@tags]);
})->wait;
}
1;