diff options
-rw-r--r-- | IkiWiki/Plugin/meta.pm | 50 | ||||
-rw-r--r-- | debian/changelog | 1 | ||||
-rw-r--r-- | doc/plugins/meta.mdwn | 16 | ||||
-rw-r--r-- | doc/todo/__42__forward__42__ing_functionality_for_the_meta_plugin.mdwn | 2 |
4 files changed, 49 insertions, 20 deletions
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("<link href=\"".encode_entities($value)."\" ". - join(" ", map { encode_entities($_)."=\"".encode_entities(decode_entities($params{$_}))."\"" } keys %params). + join(" ", map { + encode_entities($_)."=\"".encode_entities(decode_entities($params{$_}))."\"" + } keys %params). " />\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="<meta http-equiv=\"refresh\" content=\"$delay; URL=$value\">"; + 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}.="<link rel=\"copyright\" href=\"#page_copyright\" />\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="<a href=\"$dest_url\">$dest_url</a>"; - $dest_url=$value; - } -# TODO. $meta{$page}.=scrub("<meta http-equiv=\"refresh\" content=\"$delay; URL=$dest_url\">"); - $meta{$page}.="<meta http-equiv=\"refresh\" content=\"$delay; URL=$dest_url\">"; - return "You are being forwarded to $text."; - } else { $meta{$page}.=scrub("<meta name=\"".encode_entities($key). "\" content=\"".encode_entities($value)."\" />\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 <joeyh@debian.org> 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 <http://www.schwinge.homeip.net/~thomas/tmp/meta_forward.patch>. |