summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/recentchanges.pm
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-02-03 14:48:20 -0500
committerJoey Hess <joey@kodama.kitenet.net>2008-02-03 14:48:20 -0500
commit340fe9707c61064774658e6ec2aec3b07b33c120 (patch)
treef8e1635001fd1f7f0eb7c1c43616ef9aceea4418 /IkiWiki/Plugin/recentchanges.pm
parent42e5b8dfdc7f4268c3cc8a1eafd994790a79d821 (diff)
* recentchanges: Improve handling of links on the very static changes pages
by thunking to the CGI, which can redirect to the page, or allow it to be created if it doesn't exist.
Diffstat (limited to 'IkiWiki/Plugin/recentchanges.pm')
-rw-r--r--IkiWiki/Plugin/recentchanges.pm58
1 files changed, 49 insertions, 9 deletions
diff --git a/IkiWiki/Plugin/recentchanges.pm b/IkiWiki/Plugin/recentchanges.pm
index 337fb7ac5..e23ee491f 100644
--- a/IkiWiki/Plugin/recentchanges.pm
+++ b/IkiWiki/Plugin/recentchanges.pm
@@ -8,8 +8,9 @@ use IkiWiki 2.00;
sub import { #{{{
hook(type => "checkconfig", id => "recentchanges", call => \&checkconfig);
hook(type => "refresh", id => "recentchanges", call => \&refresh);
- hook(type => "htmlize", id => "_change", call => \&htmlize);
hook(type => "pagetemplate", id => "recentchanges", call => \&pagetemplate);
+ hook(type => "htmlize", id => "_change", call => \&htmlize);
+ hook(type => "cgi", id => "recentchanges", call => \&cgi);
} #}}}
sub checkconfig () { #{{{
@@ -51,6 +52,39 @@ sub htmlize (@) { #{{{
return $params{content};
} #}}}
+sub cgi ($) { #{{{
+ my $cgi=shift;
+ if (defined $cgi->param('do') && $cgi->param('do') eq "recentchanges_link") {
+ # This is a link from a change page to some
+ # other page. Since the change pages are only generated
+ # once, statically, links on them won't be updated if the
+ # page they link to is deleted, or newly created, or
+ # changes for whatever reason. So this CGI handles that
+ # dynamic linking stuff.
+ my $page=$cgi->param("page");
+ if (!defined $page) {
+ error("missing page parameter");
+ }
+
+ IkiWiki::loadindex();
+
+ my $link=bestlink("", $page);
+ if (! length $link) {
+ print "Content-type: text/html\n\n";
+ print IkiWiki::misctemplate(gettext(gettext("missing page")),
+ "<p>".
+ sprintf(gettext("The page %s does not exist."),
+ htmllink("", "", $page)).
+ "</p>");
+ }
+ else {
+ IkiWiki::redirect($cgi, $config{url}."/".htmlpage($link));
+ }
+
+ exit;
+ }
+}
+
sub store ($$$) { #{{{
my $change=shift;
@@ -65,10 +99,15 @@ sub store ($$$) { #{{{
delete @{$change->{pages}}[10 .. @{$change->{pages}}] if $is_excess;
$change->{pages} = [
map {
- if (length $config{url}) {
- $_->{link} = "<a href=\"$config{url}/".
- urlto($_->{page},"")."\">".
- IkiWiki::pagetitle($_->{page})."</a>";
+ if (length $config{cgiurl}) {
+ $_->{link} = "<a href=\"".
+ IkiWiki::cgiurl(
+ do => "recentchanges_link",
+ page => $_->{page}
+ ).
+ "\">".
+ IkiWiki::pagetitle($_->{page}).
+ "</a>"
}
else {
$_->{link} = IkiWiki::pagetitle($_->{page});
@@ -87,10 +126,11 @@ sub store ($$$) { #{{{
$change->{authorurl}=$change->{user};
$change->{user}=$oiduser;
}
- elsif (length $config{url}) {
- $change->{authorurl}="$config{url}/".
- (length $config{userdir} ? "$config{userdir}/" : "").
- $change->{user};
+ elsif (length $config{cgiurl}) {
+ $change->{authorurl} = IkiWiki::cgiurl(
+ do => "recentchanges_link",
+ page => (length $config{userdir} ? "$config{userdir}/" : "").$change->{author},
+ );
}
# escape wikilinks and preprocessor stuff in commit messages