From: Joey Hess Date: Sat, 8 Dec 2007 19:58:29 +0000 (-0500) Subject: * meta: Add redir support, based on a patch by Thomas Schwinge. X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/commitdiff_plain/2c784773879b228b7dfec2c6d092c9e1e98ab97b?ds=inline * meta: Add redir support, based on a patch by Thomas Schwinge. --- diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm index cfa4b84b1..134c0ce5d 100644 --- a/IkiWiki/Plugin/meta.pm +++ b/IkiWiki/Plugin/meta.pm @@ -13,6 +13,7 @@ my %author; my %authorurl; my %license; my %copyright; +my %redirected; sub import { #{{{ hook(type => "preprocess", id => "meta", call => \&preprocess, scan => 1); @@ -59,7 +60,9 @@ sub preprocess (@) { #{{{ if ($key eq 'link') { if (%params) { $meta{$page}.=scrub("\n"); } else { @@ -67,6 +70,32 @@ sub preprocess (@) { #{{{ push @{$links{$page}}, $value; } } + elsif ($key eq 'redir') { + $redirected{$page}=1; + my $safe=0; + if ($value =~ /^$config{wiki_link_regexp}$/) { + my $link=bestlink($page, $value); + if (! length $link) { + return "[[meta ".gettext("redir page not found")."]]"; + } + if ($redirected{$link}) { + # TODO this is a cheap way of avoiding + # redir cycles, but it is really too strict. + return "[[meta ".gettext("redir to page that itself redirs is not allowed")."]]"; + } + $value=urlto($link, $destpage); + $safe=1; + } + else { + $value=encode_entities($value); + } + my $delay=int(exists $params{delay} ? $params{delay} : 0); + my $redir=""; + if (! $safe) { + $redir=scrub($redir); + } + $meta{$page}.=$redir; + } elsif ($key eq 'title') { $title{$page}=HTML::Entities::encode_numeric($value); } @@ -111,25 +140,6 @@ sub preprocess (@) { #{{{ $meta{$page}.="\n"; $copyright{$page}=$value; } - elsif ($key eq 'forward') { - my $delay=0; - my $dest_url; - my $text; - if (exists $params{delay}) { - $delay=$params{delay}; - } - # Is this a wikilink? - if ($value =~ /^\[\[(.*)\]\]$/) { - $text=htmllink($page, $destpage, $1); - $dest_url=urlto(bestlink($page, $1), $destpage); - } else { - $text="$dest_url"; - $dest_url=$value; - } -# TODO. $meta{$page}.=scrub(""); - $meta{$page}.=""; - return "You are being forwarded to $text."; - } else { $meta{$page}.=scrub("\n"); diff --git a/debian/changelog b/debian/changelog index 5e2944152..f23b77813 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,7 @@ ikiwiki (2.16) UNRELEASED; urgency=low * Remove .otl file from sandbox to avoid build ugliness. Closes: #454181 + * meta: Add redir support, based on a patch by Thomas Schwinge. -- Joey Hess Mon, 03 Dec 2007 14:47:36 -0500 diff --git a/doc/plugins/meta.mdwn b/doc/plugins/meta.mdwn index 093766708..073482a4c 100644 --- a/doc/plugins/meta.mdwn +++ b/doc/plugins/meta.mdwn @@ -30,6 +30,22 @@ You can use any field names you like, but here are some predefined ones: However, this latter syntax won't be allowed if the [[htmlscrubber]] is enabled, since it can be used to insert unsafe content. +* redir + + Causes the page to redirect to another page in the wiki. + + \[[meta redir=otherpage]] + + Optionally, a delay (in seconds) can be specified. The default is to + redirect without delay. + + It can also be used to redirect to an external url. For example: + + \[[meta redir="http://example.com/"]] + + However, this latter syntax won't be allowed if the [[htmlscrubber]] is + enabled, since it can be used to insert unsafe content. + * title Overrides the title of the page, which is generally the same as the diff --git a/doc/todo/__42__forward__42__ing_functionality_for_the_meta_plugin.mdwn b/doc/todo/__42__forward__42__ing_functionality_for_the_meta_plugin.mdwn index c3c2b82f3..b584341c6 100644 --- a/doc/todo/__42__forward__42__ing_functionality_for_the_meta_plugin.mdwn +++ b/doc/todo/__42__forward__42__ing_functionality_for_the_meta_plugin.mdwn @@ -1,6 +1,8 @@ Here is a patch [[tag patch]] to add a *forward*ing functionality to the [[`meta`_plugin|plugins/meta]]. +> [[done]], with some changes --[[Joey]] + Find the most recent version at .