George S. Baugh 5 years ago
parent
commit
3bdad13e87
2 changed files with 26 additions and 10 deletions
  1. 23 10
      lib/Trog/Routes/HTML.pm
  2. 3 0
      www/templates/posts.tx

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

@@ -160,6 +160,9 @@ $routes{'/post/series'}  = { method => 'GET', auth => 1, callback => \&Trog::Rou
 @routes{map { "/$_/(.*)" } @post_aliases} = map { my %copy = %{$routes{'/posts/(.*)'}}; \%copy } @post_aliases;
 @routes{map { "/post/$_/(.*)" } @post_aliases} = map { my %copy = %{$routes{'/post/(.*)'}}; \%copy } @post_aliases;
 
+# /series/$ID is a bit of a special case, it's actuallly gonna need special processing
+$routes{'/series/(.*)'} = { method => 'GET', auth => 1, callback => \&Trog::Routes::HTML::series, captures => ['id'] };
+
 # Grab theme routes
 my $themed = 0;
 if ($theme_dir) {
@@ -501,6 +504,15 @@ sub post_delete ($query, $render_cb) {
     return post($query, $render_cb);
 }
 
+sub series ($query, $render_cb) {
+    #Grab the relevant tag (aclname), then pass that to posts
+    my (undef, $posts) = _post_helper($query, [], $query->{acls});
+    delete $query->{id};
+
+    $query->{tag} = $posts->[0]->{aclname};
+    return posts($query,$render_cb);
+}
+
 =head2 posts
 
 Display multi or single posts, supports RSS and pagination.
@@ -538,16 +550,17 @@ sub posts ($query, $render_cb) {
     my $styles = _build_themed_styles('posts.css');
 
     my $content = $processor->render('posts.tx', {
-        title    => "Posts tagged @$tags",
-        posts    => $posts,
-        route    => $query->{route},
-        page     => int($query->{page} || 1),
-        limit    => int($query->{limit} || 25),
-        pages    => $pages,
-        sizes    => [25,50,100],
-        rss      => !$query->{id},
-        tiled    => scalar(grep { $_ eq $query->{route} } qw{/files /audio /video /image /series}),
-        category => $themed ? Theme::path_to_tile($query->{route}) : $query->{route},
+        title     => "Posts tagged @$tags",
+        posts     => $posts,
+        in_series => !!($query->{route} =~ m/\/series\/\d*$/),
+        route     => $query->{route},
+        page      => int($query->{page} || 1),
+        limit     => int($query->{limit} || 25),
+        pages     => $pages,
+        sizes     => [25,50,100],
+        rss       => !$query->{id},
+        tiled     => scalar(grep { $_ eq $query->{route} } qw{/files /audio /video /image /series}),
+        category  => $themed ? Theme::path_to_tile($query->{route}) : $query->{route},
         about_header => $header,
         about_footer => $footer,
     });

+ 3 - 0
www/templates/posts.tx

@@ -9,6 +9,9 @@
 : }
 <hr class="divider" />
 : for $posts -> $post {
+    : if ( $post.aclname && $in_series ) {
+    : next;
+    : }
     :if ( $tiled ) {
         <a href="<: $route :>/<: $post.id :>" class="tile">
             <div class="responsive preview" style="background-image:url(<: $post.preview :>)"></div>