backend: implement paging
This commit is contained in:
parent
79a9173574
commit
fa07cf5645
@ -6,6 +6,26 @@ use warnings;
|
|||||||
use Mojo::Base "Mojolicious";
|
use Mojo::Base "Mojolicious";
|
||||||
use SeaweedFS::Client;
|
use SeaweedFS::Client;
|
||||||
|
|
||||||
|
sub _pager_links ($c, $dbp)
|
||||||
|
{
|
||||||
|
my %pager;
|
||||||
|
my $page_url = sub ($p) { $c->url_with->query({page => $p}) };
|
||||||
|
|
||||||
|
$pager{first_page} = $page_url->($dbp->{first_page})
|
||||||
|
if $dbp->{first_page} != $dbp->{current_page};
|
||||||
|
$pager{previous_page} = $page_url->($dbp->{previous_page})
|
||||||
|
if defined($dbp->{previous_page}) &&
|
||||||
|
$dbp->{previous_page} != $dbp->{first_page};
|
||||||
|
$pager{current_page} = $dbp->{current_page};
|
||||||
|
$pager{next_page} = $page_url->($dbp->{next_page})
|
||||||
|
if defined($dbp->{next_page}) &&
|
||||||
|
$dbp->{next_page} != $dbp->{last_page};
|
||||||
|
$pager{last_page} = $page_url->($dbp->{last_page})
|
||||||
|
if $dbp->{last_page} != $dbp->{current_page};
|
||||||
|
|
||||||
|
return %pager;
|
||||||
|
}
|
||||||
|
|
||||||
sub startup ($self)
|
sub startup ($self)
|
||||||
{
|
{
|
||||||
$self->moniker("poorbooru-backend");
|
$self->moniker("poorbooru-backend");
|
||||||
@ -17,6 +37,7 @@ sub startup ($self)
|
|||||||
state $client =
|
state $client =
|
||||||
SeaweedFS::Client->new($config->{seaweedfs_master})
|
SeaweedFS::Client->new($config->{seaweedfs_master})
|
||||||
});
|
});
|
||||||
|
$self->helper(pager_links => \&_pager_links);
|
||||||
|
|
||||||
my $r = $self->routes;
|
my $r = $self->routes;
|
||||||
|
|
||||||
|
@ -19,8 +19,7 @@ sub index ($self)
|
|||||||
) if $v->has_error;
|
) if $v->has_error;
|
||||||
|
|
||||||
my $poorbooru_api = $self->config("poorbooru_api");
|
my $poorbooru_api = $self->config("poorbooru_api");
|
||||||
my $ua = Mojo::UserAgent->new;
|
my $res = $self->ua->get("$poorbooru_api/media?page=$page")->result;
|
||||||
my $res = $ua->get("$poorbooru_api/media?page=$page")->result;
|
|
||||||
|
|
||||||
return $self->render(status => $res->code) if $res->is_error;
|
return $self->render(status => $res->code) if $res->is_error;
|
||||||
|
|
||||||
@ -30,7 +29,11 @@ sub index ($self)
|
|||||||
),
|
),
|
||||||
}, @{$res->json->{media}};
|
}, @{$res->json->{media}};
|
||||||
|
|
||||||
return $self->render(template => "gallery", media => \@media);
|
return $self->render(
|
||||||
|
template => "gallery",
|
||||||
|
media => \@media,
|
||||||
|
pager => { $self->pager_links($res->json->{pager}) },
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -17,8 +17,7 @@ sub list ($self)
|
|||||||
return $self->render(status => 404) if $v->has_error;
|
return $self->render(status => 404) if $v->has_error;
|
||||||
|
|
||||||
my $poorbooru_api = $self->config("poorbooru_api");
|
my $poorbooru_api = $self->config("poorbooru_api");
|
||||||
my $ua = Mojo::UserAgent->new;
|
my $res = $self->ua->get("$poorbooru_api/tags?page=$page")->result;
|
||||||
my $res = $ua->get("$poorbooru_api/tags?page=$page")->result;
|
|
||||||
|
|
||||||
return $self->render(status => $res->code) if $res->is_error;
|
return $self->render(status => $res->code) if $res->is_error;
|
||||||
|
|
||||||
@ -28,7 +27,11 @@ sub list ($self)
|
|||||||
uri => $self->url_for("/tag/$_->{name}"),
|
uri => $self->url_for("/tag/$_->{name}"),
|
||||||
}, @{$res->json->{tags}};
|
}, @{$res->json->{tags}};
|
||||||
|
|
||||||
return $self->render(template => "tags", tags => \@tags);
|
return $self->render(
|
||||||
|
template => "tags",
|
||||||
|
tags => \@tags,
|
||||||
|
pager => { $self->pager_links($res->json->{pager}) },
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
sub show ($self)
|
sub show ($self)
|
||||||
@ -42,8 +45,7 @@ sub show ($self)
|
|||||||
|
|
||||||
my $tag_id_or_name = $self->stash("tag_id_or_name");
|
my $tag_id_or_name = $self->stash("tag_id_or_name");
|
||||||
my $poorbooru_api = $self->config("poorbooru_api");
|
my $poorbooru_api = $self->config("poorbooru_api");
|
||||||
my $ua = Mojo::UserAgent->new;
|
my $res = $self->ua->get("$poorbooru_api/tag/$tag_id_or_name?page=$page")
|
||||||
my $res = $ua->get("$poorbooru_api/tag/$tag_id_or_name?page=$page")
|
|
||||||
->result;
|
->result;
|
||||||
|
|
||||||
return $self->render(status => $res->code) if $res->is_error;
|
return $self->render(status => $res->code) if $res->is_error;
|
||||||
@ -54,7 +56,11 @@ sub show ($self)
|
|||||||
),
|
),
|
||||||
}, @{$res->json->{media}};
|
}, @{$res->json->{media}};
|
||||||
|
|
||||||
return $self->render(template => "gallery", media => \@media);
|
return $self->render(
|
||||||
|
template => "gallery",
|
||||||
|
media => \@media,
|
||||||
|
pager => { $self->pager_links($res->json->{pager}) },
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -20,6 +20,18 @@
|
|||||||
<div class="viewport flex-i-fullsize flex-c-vertical">
|
<div class="viewport flex-i-fullsize flex-c-vertical">
|
||||||
<h1><%= title %></h1>
|
<h1><%= title %></h1>
|
||||||
<div class="viewport flex-i-fullsize"><%= content %></div>
|
<div class="viewport flex-i-fullsize"><%= content %></div>
|
||||||
|
<% if (defined $pager) { %>
|
||||||
|
<footer>
|
||||||
|
<!--<pre><code><%= dumper $pager %></code></pre>-->
|
||||||
|
<nav class="text-center">
|
||||||
|
<%= link_to "<<" => $pager->{first_page} if exists $pager->{first_page} %>
|
||||||
|
<%= link_to "<" => $pager->{previous_page} if exists $pager->{previous_page} %>
|
||||||
|
<span><%= $pager->{current_page} %></span>
|
||||||
|
<%= link_to ">" => $pager->{next_page} if exists $pager->{next_page} %>
|
||||||
|
<%= link_to ">>" => $pager->{last_page} if exists $pager->{last_page} %>
|
||||||
|
</nav>
|
||||||
|
</footer>
|
||||||
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
<footer class="text-center">
|
<footer class="text-center">
|
||||||
|
Loading…
Reference in New Issue
Block a user