[Jifty-commit] r6080 - wifty/trunk/lib/Wifty

Jifty commits jifty-commit at lists.jifty.org
Sun Dec 7 01:34:10 EST 2008


Author: ruz
Date: Sun Dec  7 01:34:10 2008
New Revision: 6080

Modified:
   wifty/trunk/lib/Wifty/Dispatcher.pm

Log:
* add history navigation into page nav

Modified: wifty/trunk/lib/Wifty/Dispatcher.pm
==============================================================================
--- wifty/trunk/lib/Wifty/Dispatcher.pm	(original)
+++ wifty/trunk/lib/Wifty/Dispatcher.pm	Sun Dec  7 01:34:10 2008
@@ -33,25 +33,23 @@
 
 # View or edit a page
 on qr{^/(view|edit)/(.*)}, run {
-    my ( $name, $rev );
     my $page_name = $1;
-    if ( $2 =~ qr{^(.*?)(?:/(\d+))?$} ) {
-        $name = $1;
-        $rev  = $2;
-    }
+    my ( $name, $rev ) = ($2 =~ qr{^(.*?)(?:/(\d+))?$});
+
     my $page = Wifty::Model::Page->new();
     $page->load_by_cols( name => $name );
-    Jifty->web->redirect( '/create/' . $name ) unless ( $page->id );
+    Jifty->web->redirect( '/create/' . $name )
+        unless $page->id;
+
+    $rev = $page->revision($rev);
 
-    setup_page_nav($name, $rev);
+    setup_page_nav($page_name, $page, $rev);
 
-    my $revision = Wifty::Model::Revision->new();
-    $revision->load_by_cols( page => $page->id, id => $rev ) if ($rev);
     set page => $page;
-    set revision => $revision;
+    set revision => $rev || new Wifty::Model::Revision;
     my $viewer = Jifty->web->new_action( class => 'UpdatePage', record => $page );
-    if($rev) {
-        $viewer->argument_value(content => $revision->content);
+    if ( $rev ) {
+        $viewer->argument_value(content => $rev->content);
     }
     set viewer => $viewer;
     show("/$page_name");
@@ -64,7 +62,7 @@
     $page->load_by_cols( name => $name );
     redirect( '/create/' . $name ) unless ( $page->id );
 
-    setup_page_nav($name);
+    setup_page_nav('view', $page);
 
     my $revisions = $page->revisions;
     $revisions->order_by( column => 'id', order => 'desc');
@@ -108,14 +106,23 @@
 };
 
 sub setup_page_nav {
-    my ($page, $rev) = @_;
+    my ($prefix, $page, $rev) = @_;
 
-    my $subpath =  $page . ($rev ? "/$rev" : '');
+    my $name = $page->name;
+
+    my $subpath = $name;
+    $subpath .= '/'. $rev->id if $rev;
     my $top = Jifty->web->page_navigation;
-    $top->child( View => url => '/view/'.$subpath);
-    $top->child( Edit => url => '/edit/'.$subpath);
-    $top->child( History => url => '/history/'.$page);
-    $top->child( Latest => url => '/view/'.$page) if $rev;
+    $top->child( View => url => '/view/'. $subpath);
+    $top->child( Edit => url => '/edit/'. $subpath);
+    if ( my $prev = ($rev? $rev : $page->revisions->last)->previous ) {
+        $top->child( Older => url => join '/', '', $prefix, $name, $prev->id );
+    }
+    $top->child( History => url => '/history/'. $name);
+    if ( $rev and my $next = $rev->next ) {
+        $top->child( Newer => url => join '/',  '', $prefix, $name, $next->id );
+        $top->child( Latest => url => join '/', '', $prefix, $name );
+    }
 }
 
 1;


More information about the Jifty-commit mailing list