non-tabular recentchanges display
authorJoey Hess <joey@kodama.kitenet.net>
Tue, 29 Jan 2008 06:48:55 +0000 (01:48 -0500)
committerJoey Hess <joey@kodama.kitenet.net>
Tue, 29 Jan 2008 06:48:55 +0000 (01:48 -0500)
Doesn't look as good as the old table, but works as a rss feed.

IkiWiki.pm
IkiWiki/CGI.pm
IkiWiki/Plugin/recentchanges.pm
doc/recentchanges.mdwn
doc/wikitemplates.mdwn
templates/change.tmpl
templates/recentchanges.tmpl [deleted file]

index 2c3ddac238a3e724d5b504b0f5d3c093eec45557..c70307b5f299ae0955e086fd8ebeff937ac895e9 100644 (file)
@@ -607,14 +607,11 @@ sub htmllink ($$$;@) { #{{{
        return "<a href=\"$bestlink\"@attrs>$linktext</a>";
 } #}}}
 
-sub userlink ($) { #{{{
+sub openiduser ($) { #{{{
        my $user=shift;
 
-       eval q{use CGI 'escapeHTML'};
-       error($@) if $@;
        if ($user =~ m!^https?://! &&
            eval q{use Net::OpenID::VerifiedIdentity; 1} && !$@) {
-               # Munge user-urls, as used by eg, OpenID.
                my $oid=Net::OpenID::VerifiedIdentity->new(identity => $user);
                my $display=$oid->display;
                # Convert "user.somehost.com" to "user [somehost.com]".
@@ -626,10 +623,24 @@ sub userlink ($) { #{{{
                        $display=~s/^https?:\/\/(.+)\/([^\/]+)$/$2 [$1]/;
                }
                $display=~s!^https?://!!; # make sure this is removed
-               return "<a href=\"$user\">".escapeHTML($display)."</a>";
+               eval q{use CGI 'escapeHTML'};
+               error($@) if $@;
+               return escapeHTML($display);
+       }
+       return;
+}
+
+sub userlink ($) { #{{{
+       my $user=shift;
+
+       my $oiduser=openiduser($user);
+       if (defined $oiduser) {
+               return "<a href=\"$user\">$oiduser</a>";
        }
        else {
-               return $user;
+               return htmllink("", "", escapeHTML(
+                       length $config{userdir} ? $config{userdir}."/".$user : $user
+               ), noimageinline => 1);
        }
 } #}}}
 
index 55ee5d86ae1a61ea7c28750b18d2c8f6dd3924e7..c8c1b63dd5c63d37b4e1854ed58a673920f296f5 100644 (file)
@@ -84,53 +84,6 @@ sub decode_cgi_utf8 ($) { #{{{
        }
 } #}}}
 
-sub cgi_recentchanges ($) { #{{{
-       my $q=shift;
-       
-       # Optimisation: building recentchanges means calculating lots of
-       # links. Memoizing htmllink speeds it up a lot (can't be memoized
-       # during page builds as the return values may change, but they
-       # won't here.)
-       eval q{use Memoize};
-       error($@) if $@;
-       memoize("htmllink");
-
-       eval q{use Time::Duration};
-       error($@) if $@;
-
-       my $changelog=[rcs_recentchanges(100)];
-       foreach my $change (@$changelog) {
-               $change->{when} = concise(ago(time - $change->{when}));
-
-               $change->{user} = userlink($change->{user});
-
-               my $is_excess = exists $change->{pages}[10]; # limit pages to first 10
-               delete @{$change->{pages}}[10 .. @{$change->{pages}}] if $is_excess;
-               $change->{pages} = [
-                       map {
-                               $_->{link} = htmllink("", "", $_->{page},
-                                       noimageinline => 1,
-                                       linktext => pagetitle($_->{page}));
-                               $_;
-                       } @{$change->{pages}}
-               ];
-               push @{$change->{pages}}, { link => '...' } if $is_excess;
-       }
-
-       my $template=template("recentchanges.tmpl"); 
-       $template->param(
-               title => "RecentChanges",
-               indexlink => indexlink(),
-               wikiname => $config{wikiname},
-               changelog => $changelog,
-               baseurl => baseurl(),
-       );
-       run_hooks(pagetemplate => sub {
-               shift->(page => "", destpage => "", template => $template);
-       });
-       print $q->header(-charset => 'utf-8'), $template->output;
-} #}}}
-
 # Check if the user is signed in. If not, redirect to the signin form and
 # save their place to return to later.
 sub needsignin ($$) { #{{{
@@ -661,12 +614,6 @@ sub cgi (;$$) { #{{{
                }
        }
        
-       # Things that do not need a session.
-       if ($do eq 'recentchanges') {
-               cgi_recentchanges($q);
-               return;
-       }
-
        # Need to lock the wiki before getting a session.
        lockwiki();
        
index 6b36ea4c853e5e95ff87df151d1a56483d9f710f..fb9841ffdfe00e7c639090713c1c5aa0f15575a3 100644 (file)
@@ -67,14 +67,25 @@ sub store ($$) { #{{{
        ];
        push @{$change->{pages}}, { link => '...' } if $is_excess;
 
+       # Take the first line of the commit message as a summary.
+       my $m=shift @{$change->{message}};
+       $change->{summary}=$m->{line};
+
+       # See if the committer is an openid.
+       my $oiduser=IkiWiki::openiduser($change->{user});
+       if (defined $oiduser) {
+               $change->{authorurl}=$change->{user};
+               $change->{user}=$oiduser;
+       }
+       elsif (length $config{url}) {
+               $change->{authorurl}="$config{url}/".
+                       (length $config{userdir} ? "$config{userdir}/" : "").
+                       $change->{user};
+       }
+
        # Fill out a template with the change info.
        my $template=template("change.tmpl", blind_cache => 1);
-       $template->param(
-               user => IkiWiki::userlink($change->{user}),
-               when => IkiWiki::displaytime($change->{when}, "%X %x"),
-               pages => $change->{pages},
-               message => $change->{message},
-       );
+       $template->param(%$change);
        $template->param(baseurl => "$config{url}/") if length $config{url};
        IkiWiki::run_hooks(pagetemplate => sub {
                shift->(page => $page, destpage => $page, template => $template);
index a027bf4624b341eb5b4c0b5466c966ed67018bb3..b2c7f5d07b8672a60aff8f66d97d322073f308b2 100644 (file)
@@ -1,3 +1,2 @@
 [[recentchanges pages="*" num=100 template=change]]
-[[inline pages="recentchanges/change_* and !*/Discussion"
-template=recentchanges show=0]]
+[[inline pages="recentchanges/change_* and !*/Discussion" show=0]]
index b8341b637685af41c087cc9c302912ceed1f4416..1f6325b4bd4de620f71a075d8aa85e6570f21f2b 100644 (file)
@@ -11,7 +11,6 @@ located in /usr/share/ikiwiki/templates by default.
 * `misc.tmpl` - Generic template used for any page that doesn't
   have a custom template.
 * `editpage.tmpl` - Create/edit page.
-* `recentchanges.tmpl` - Used to generate a RecentChanges table with inline.
 * `change.tmpl` - Used to create a page describing a change made to the wiki.
 * `passwordmail.tmpl` - Not a html template, this is used to
   generate the mail with the user's password in it.
index 9dbc97ec2dcb0cdafffec852752d116308075978..f02b5eb194b7f4c586933e3f787c9fac162cb3c5 100644 (file)
@@ -1,27 +1,24 @@
+[[meta author="""<TMPL_VAR USER>"""]]
+<TMPL_IF AUTHORURL>
+[[meta authorurl="""<TMPL_VAR AUTHORURL>"""]]
+</TMPL_IF>
+[[meta title="""<TMPL_VAR SUMMARY>"""]]
+<p class=changelog>
+<TMPL_LOOP NAME="MESSAGE">
+       <TMPL_IF NAME="LINE">
+               <TMPL_VAR NAME="LINE" ESCAPE="HTML"><br />
+       </TMPL_IF>
+</TMPL_LOOP>
+</p>
+<p>
+<span class="changeinfo">
+<TMPL_LOOP NAME="PAGES">
+       <TMPL_IF NAME="DIFFURL">
+               <a href="<TMPL_VAR NAME="DIFFURL">">
+               <img alt="diff" src="wikiicons/diff.png" />
+               </a>
+       </TMPL_IF>
+       <TMPL_VAR LINK>
+</TMPL_LOOP>
+changed via <TMPL_VAR NAME="COMMITTYPE">
 <!-- <TMPL_VAR NAME="REV"> -->
-<tr class="changeinfo">
-       <td class="changeinfo"><TMPL_VAR NAME="USER"></td>
-       <td class="changetime"><TMPL_VAR NAME="WHEN"></td>
-       <td class="changeinfo">
-       <TMPL_LOOP NAME="PAGES">
-               <TMPL_IF NAME="DIFFURL">
-                       <a href="<TMPL_VAR NAME="DIFFURL">">
-                       <img alt="diff" src="wikiicons/diff.png" />
-                       </a>
-                       <TMPL_VAR NAME="LINK">
-               <TMPL_ELSE>
-                       <TMPL_VAR NAME="LINK">
-               </TMPL_IF>
-       </TMPL_LOOP>
-       </td>
-       <td class="changeinfo"><TMPL_VAR NAME="COMMITTYPE"></td>
-</tr>
-<tr>
-       <td class="changelog" colspan="4">
-               <TMPL_LOOP NAME="MESSAGE">
-                       <TMPL_IF NAME="LINE">
-                               <TMPL_VAR NAME="LINE" ESCAPE="HTML"><br />
-                       </TMPL_IF>
-               </TMPL_LOOP>
-       </td>
-</tr>
diff --git a/templates/recentchanges.tmpl b/templates/recentchanges.tmpl
deleted file mode 100644 (file)
index 2e33b79..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<TMPL_IF FIRST>
-<table border="1" frame="border" rules="groups">
-<thead>
-       <tr class="changeheader">
-               <th class="changeheader" align="left">user</th>
-               <th class="changeheader" align="left">time</th>
-               <th class="changeheader" align="left" colspan="2">changes</th>
-       </tr>
-</thead>
-<tbody>
-</TMPL_IF>
-<TMPL_VAR CONTENT>
-<TMPL_IF LAST>
-</tbody>
-</table>
-</TMPL_IF>