site: implement search functionality
This commit is contained in:
parent
3ae6b02672
commit
08be6b17f5
8 changed files with 257 additions and 2 deletions
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue