non-tabular recentchanges display

Doesn't look as good as the old table, but works as a rss feed.
master
Joey Hess 2008-01-29 01:48:55 -05:00
parent d72753e100
commit 21f44880cd
7 changed files with 58 additions and 110 deletions

View 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);
}
} #}}}

View 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();

View 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);

View 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]]

View 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.

View 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>

View File

@ -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>