diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-10-15 19:33:52 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-10-15 19:33:52 +0000 |
commit | b973ed82699903c23b3feeb5e73e1ebd6f587f43 (patch) | |
tree | af25dcd50842673244ced0b7d97ad01dcf10f13f /IkiWiki | |
parent | 8544d52fe9e5d344bb0b5e70985aabc0e35b4920 (diff) | |
download | ikiwiki-b973ed82699903c23b3feeb5e73e1ebd6f587f43.tar ikiwiki-b973ed82699903c23b3feeb5e73e1ebd6f587f43.tar.gz |
* Add no_override parameter to hook().
* Add a shortcut plugin, inspired by Victor Moral's contributed shortcuts
plugin, but featuring a more ikiwiki-ish syntax and with shortcuts that
can be configured using a page in wiki.
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/shortcut.pm | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm new file mode 100644 index 000000000..d09d5879d --- /dev/null +++ b/IkiWiki/Plugin/shortcut.pm @@ -0,0 +1,58 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::shortcut; + +use warnings; +use strict; +use IkiWiki; + +sub import { #{{{ + hook(type => "checkconfig", id => "shortcut", call => \&checkconfig); + hook(type => "preprocess", id => "shortcut", call => \&preprocess_shortcut); +} #}}} + +sub checkconfig () { #{{{ + # Preprocess the shortcuts page to get all the available shortcuts + # defined before other pages are rendered. + IkiWiki::preprocess("shortcuts", "shortcuts", + readfile(srcfile("shortcuts.mdwn"))); +} # }}} + +sub preprocess_shortcut (@) { #{{{ + my %params=@_; + + if (! defined $params{name} || ! defined $params{url}) { + return "[[shortcut missing name or url parameter]]"; + } + + hook(type => "preprocess", no_override => 1, id => $params{name}, + call => sub { shortcut_expand($params{name}, $params{url}, @_) }); + + return "shortcut $params{name} points to $params{url}"; +} # }}} + +sub shortcut_expand ($$@) { #{{{ + my $name=shift; + my $url=shift; + my %params=@_; + + # Get params in original order. + my @params; + while (@_) { + my $key=shift; + my $value=shift; + push @params, $key if ! length $value; + } + + # If the shortcuts page changes, all pages that use shortcuts will + # need to be updated. + add_depends($params{destpage}, "shortcuts"); + + my $text=join(" ", @params); + my $encoded_text=$text; + $encoded_text=~s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; + + $url=~s/\%s/$encoded_text/g; + return "<a href=\"$url\">$text</a>"; +} #}}} + +1 |