]> sipb.mit.edu Git - ikiwiki.git/blob - IkiWiki/Plugin/meta.pm
don't die fatally here
[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         eval q{use CGI 'escapeHTML'};
31
32         if ($key eq 'link') {
33                 if (%params) {
34                         $meta{$page}='' unless exists $meta{$page};
35                         $meta{$page}.="<link href=\"".escapeHTML($value)."\" ".
36                                 join(" ", map { escapeHTML("$_=\"$params{$_}\"") } keys %params).
37                                 " />\n";
38                 }
39                 else {
40                         # hidden WikiLink
41                         push @{$IkiWiki::links{$page}}, $value;
42                 }
43         }
44         elsif ($key eq 'title') {
45                 $title{$page}=escapeHTML($value);
46         }
47         else {
48                 $meta{$page}='' unless exists $meta{$page};
49                 $meta{$page}.="<meta name=\"".escapeHTML($key)."\" content=\"".escapeHTML($value)."\" />\n";
50         }
51
52         return "";
53 } # }}}
54
55 sub pagetemplate ($$) { #{{{
56         my $page=shift;
57         my $template=shift;
58
59         $template->param(meta => $meta{$page}) if exists $meta{$page};
60         $template->param(title => $title{$page}) if exists $title{$page};
61 } # }}}
62
63 1