aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/template.pm
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-08-23 05:41:07 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-08-23 05:41:07 +0000
commit9d7375c3b263e77da29a5db22af480db8b99d990 (patch)
tree8cb9407a3893060b7868d8960db3ce0759092c2e /IkiWiki/Plugin/template.pm
parent78b279c3d8c803391a5a4fc59ffd7855ce8bc5f5 (diff)
downloadikiwiki-9d7375c3b263e77da29a5db22af480db8b99d990.tar
ikiwiki-9d7375c3b263e77da29a5db22af480db8b99d990.tar.gz
* Allow preprocessor directives to contain python-like triple-quoted
text blocks, for easy nesting of quotes inside. * Add a template plugin. * Use the template plugin to add infoboxes to each plugin page listing basic info about the plugin.
Diffstat (limited to 'IkiWiki/Plugin/template.pm')
-rw-r--r--IkiWiki/Plugin/template.pm52
1 files changed, 52 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/template.pm b/IkiWiki/Plugin/template.pm
new file mode 100644
index 000000000..5b4eeb3a8
--- /dev/null
+++ b/IkiWiki/Plugin/template.pm
@@ -0,0 +1,52 @@
+#!/usr/bin/perl
+# Structured template plugin.
+package IkiWiki::Plugin::template;
+
+use warnings;
+use strict;
+use IkiWiki;
+use HTML::Template;
+use Encode;
+
+sub import { #{{{
+ IkiWiki::hook(type => "preprocess", id => "template",
+ call => \&preprocess);
+} # }}}
+
+sub preprocess (@) { #{{{
+ my %params=@_;
+
+ if (! exists $params{id}) {
+ return "[[template missing id parameter]]"
+ }
+
+ my $template_page="templates/$params{id}";
+ IkiWiki::add_depends($params{page}, $template_page);
+
+ my $template_file=$IkiWiki::pagesources{$template_page};
+ return "[[template ".
+ IkiWiki::htmllink($params{page}, $params{destpage}, $template_page).
+ " not found]]"
+ unless defined $template_file;
+
+ my $template=HTML::Template->new(
+ filter => sub {
+ my $text_ref = shift;
+ $$text_ref=&Encode::decode_utf8($$text_ref);
+ },
+ filename => IkiWiki::srcfile($template_file),
+ die_on_bad_params => 0,
+ no_includes => 1,
+ blind_cache => 1,
+ );
+
+ foreach my $param (keys %params) {
+ $template->param($param => $params{$param});
+ }
+
+
+ return IkiWiki::preprocess($params{page}, $params{destpage},
+ $template->output);
+} # }}}
+
+1