فهرست منبع

pagination for dummy data model

George S. Baugh 5 سال پیش
والد
کامیت
a899cc6081
3فایلهای تغییر یافته به همراه29 افزوده شده و 4 حذف شده
  1. 7 0
      lib/Trog/Data/DUMMY.pm
  2. 10 3
      lib/Trog/Routes/HTML.pm
  3. 12 1
      www/templates/posts.tx

+ 7 - 0
lib/Trog/Data/DUMMY.pm

@@ -132,6 +132,13 @@ sub new ($class, $config) {
 # These have to be sorted as requested by the client
 sub get ($self, %request) {
     my @filtered = @$example_posts;
+
+    # First, paginate
+    my $offset = int($request{limit});
+    $offset = @filtered < $offset ? @filtered : $offset;
+    @filtered = splice(@filtered, ( int($request{page}) -1) * $offset, $offset) if $request{page} && $request{limit}; 
+
+    # Next, handle the query
     @filtered = grep { my $tags = $_->{tags}; grep { my $t = $_; grep {$t eq $_ } @{$request{tags}} } @$tags } @filtered if @{$request{tags}};
     @filtered = grep { $_->{data} =~ m/\Q$request{like}\E/i } @filtered if $request{like};
 

+ 10 - 3
lib/Trog/Routes/HTML.pm

@@ -304,6 +304,9 @@ sub post ($query, $input, $render_cb) {
         types       => [qw{microblog blog file}],
         route       => '/posts',
         category    => '/posts',
+        page        => int($query->{page} || 1),
+        limit       => int($query->{limit} || 1),
+        sizes       => [25,50,100],
         edittype    => $query->{type} || 'microblog',
     });
 }
@@ -327,9 +330,11 @@ sub posts ($query, $input, $render_cb) {
 
     my $content = $processor->render('posts.tx', {
         title    => "Posts tagged @$tags",
-        date     => 'TODO',
         posts    => $posts,
         route    => $query->{route},
+        page     => int($query->{page} || 1),
+        limit    => int($query->{limit} || 1),
+        sizes    => [25,50,100],
         category => $themed ? Theme::path_to_tile($query->{route}) : $query->{route},
     });
     return Trog::Routes::HTML::index($query, $input, $render_cb, $content, $styles);
@@ -338,8 +343,10 @@ sub posts ($query, $input, $render_cb) {
 sub _post_helper ($query, $tags) {
     my $data = Trog::Data->new($conf);
     return $data->get(
-        tags => $tags,
-        like => $query->{like},
+        page  => int($query->{page} || 1),
+        limit => int($query->{limit} || 25),
+        tags  => $tags,
+        like  => $query->{like},
     );
 }
 

+ 12 - 1
www/templates/posts.tx

@@ -1,11 +1,12 @@
 <p class="title">
 <a title="RSS" class="rss" href="<: $route :>?format=rss"></a>
-<: $category :> (<: $date :>):
+<: $category :>:
 </p>
 : for $posts -> $post {
     <hr>
     <h3 class='blogtitles'>
         <a href='<: $post.href :>'><: $post.title :></a>
+        <span id="<: $post.id :>-time" style="float:right;"><: $post.created :></span>
         <a class='usericon <: $post.user :>' title='Posted by <: $post.user :>'></a>
     </h3>
     : if ( $post.is_video ) {
@@ -35,4 +36,14 @@
         </form>
     </div>
     : }
+    <script type="text/javascript">
+        // Fix post dates to be localized
+        document.addEventListener("DOMContentLoaded", function(event) {
+            var e = document.getElementById("<: $post.id :>-time");
+            var d = new Date(Date(e.innerText));
+            e.innerHTML = "&nbsp;" + d.toDateString();
+        });
+    </script>
 : }
+<hr />
+: include "paginator.tx";