more destpage improvements
[ikiwiki] / 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         delete $params{destpage};
30
31         eval q{use CGI 'escapeHTML'};
32
33         if ($key eq 'link') {
34                 if (%params) {
35                         $meta{$page}='' unless exists $meta{$page};
36                         $meta{$page}.="<link href=\"".escapeHTML($value)."\" ".
37                                 join(" ", map { escapeHTML("$_=\"$params{$_}\"") } keys %params).
38                                 " />\n";
39                 }
40                 else {
41                         # hidden WikiLink
42                         push @{$IkiWiki::links{$page}}, $value;
43                 }
44         }
45         elsif ($key eq 'title') {
46                 $title{$page}=escapeHTML($value);
47         }
48         else {
49                 $meta{$page}='' unless exists $meta{$page};
50                 $meta{$page}.="<meta name=\"".escapeHTML($key)."\" content=\"".escapeHTML($value)."\" />\n";
51         }
52
53         return "";
54 } # }}}
55
56 sub pagetemplate (@) { #{{{
57         my %params=@_;
58         my $page=$params{page};
59         my $template=$params{template};
60
61         $template->param(meta => $meta{$page})
62                 if exists $meta{$page} && $template->query(name => "meta");
63         $template->param(title => $title{$page})
64                 if exists $title{$page} && $template->query(name => "title");
65 } # }}}
66
67 1