* Reorganised the doc wiki's todo/* pages, using a link/tag to flag
[ikiwiki.git] / IkiWiki / Plugin / meta.pm
1 #!/usr/bin/perl
2 # Ikiwiki metadata plugin.
3 package IkiWiki::Plugin::meta;
4
5 use warnings;
6 use strict;
7 use IkiWiki;
8
9 my %meta;
10 my %title;
11
12 sub import { #{{{
13         IkiWiki::hook(type => "preprocess", id => "meta", 
14                 call => \&preprocess);
15         IkiWiki::hook(type => "pagetemplate", id => "meta", 
16                 call => \&pagetemplate);
17 } # }}}
18
19 sub preprocess (@) { #{{{
20         if (! @_) {
21                 return "";
22         }
23         my %params=@_;
24         my $key=shift;
25         my $value=$params{$key};
26         delete $params{$key};
27         my $page=$params{page};
28         delete $params{page};
29
30         if ($key eq 'link') {
31                 if (%params) {
32                         $meta{$page}='' unless exists $meta{$page};
33                         $meta{$page}.="<link href=\"$value\" ".
34                                 join(" ", map { "$_=\"$params{$_}\"" } keys %params).
35                                 " />\n";
36                 }
37                 else {
38                         # hidden WikiLink
39                         push @{$IkiWiki::links{$page}}, $value;
40                 }
41         }
42         elsif ($key eq 'title') {
43                 $title{$page}=$value;
44         }
45         else {
46                 $meta{$page}='' unless exists $meta{$page};
47                 $meta{$page}.="<meta name=\"$key\" content=\"$value\" />\n";
48         }
49
50         return "";
51 } # }}}
52
53 sub pagetemplate ($$) { #{{{
54         my $page=shift;
55         my $template=shift;
56
57         $template->param(meta => $meta{$page}) if exists $meta{$page};
58         $template->param(title => $title{$page}) if exists $title{$page};
59 } # }}}
60
61 1