summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/meta.pm
blob: 8244cf718b58a30553093c407ec2cc23e3c06db5 (plain)
  1. #!/usr/bin/perl
  2. # Ikiwiki metadata plugin.
  3. package IkiWiki::Plugin::meta;
  4. use warnings;
  5. use strict;
  6. use IkiWiki;
  7. my %meta;
  8. my %title;
  9. sub import { #{{{
  10. IkiWiki::hook(type => "preprocess", id => "meta",
  11. call => \&preprocess);
  12. IkiWiki::hook(type => "pagetemplate", id => "meta",
  13. call => \&pagetemplate);
  14. } # }}}
  15. sub preprocess (@) { #{{{
  16. if (! @_) {
  17. return "";
  18. }
  19. my %params=@_;
  20. my $key=shift;
  21. my $value=$params{$key};
  22. delete $params{$key};
  23. my $page=$params{page};
  24. delete $params{page};
  25. if ($key eq 'link') {
  26. if (%params) {
  27. $meta{$page}='' unless exists $meta{$page};
  28. $meta{$page}.="<link href=\"$value\" ".
  29. join(" ", map { "$_=\"$params{$_}\"" } keys %params).
  30. " />\n";
  31. }
  32. else {
  33. # hidden WikiLink
  34. push @{$IkiWiki::links{$page}}, $value;
  35. }
  36. }
  37. elsif ($key eq 'title') {
  38. $title{$page}=$value;
  39. }
  40. else {
  41. $meta{$page}='' unless exists $meta{$page};
  42. $meta{$page}.="<meta name=\"$key\" content=\"$value\" />\n";
  43. }
  44. return "";
  45. } # }}}
  46. sub pagetemplate ($$) { #{{{
  47. my $page=shift;
  48. my $template=shift;
  49. $template->param(meta => $meta{$page}) if exists $meta{$page};
  50. $template->param(title => $title{$page}) if exists $title{$page};
  51. } # }}}
  52. 1