]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/meta.pm
Avoid %links accumulating duplicates. (For TOVA)
[ikiwiki.git] / IkiWiki / Plugin / meta.pm
index 3991797c0fe6f7be305e9b3e799f5aaa7bdc7ae2..cc5455d64042ae3afef8bcd7e52a42e0ec1ad915 100644 (file)
@@ -4,26 +4,26 @@ package IkiWiki::Plugin::meta;
 
 use warnings;
 use strict;
-use IkiWiki 2.00;
+use IkiWiki 3.00;
 
 my %metaheaders;
 
-sub import { #{{{
+sub import {
        hook(type => "getsetup", id => "meta", call => \&getsetup);
        hook(type => "needsbuild", id => "meta", call => \&needsbuild);
        hook(type => "preprocess", id => "meta", call => \&preprocess, scan => 1);
        hook(type => "pagetemplate", id => "meta", call => \&pagetemplate);
-} # }}}
+}
 
-sub getsetup () { #{{{
+sub getsetup () {
        return
                plugin => {
                        safe => 1,
                        rebuild => undef,
                },
-} #}}}
+}
 
-sub needsbuild (@) { #{{{
+sub needsbuild (@) {
        my $needsbuild=shift;
        foreach my $page (keys %pagestate) {
                if (exists $pagestate{$page}{meta}) {
@@ -38,7 +38,7 @@ sub needsbuild (@) { #{{{
        }
 }
 
-sub scrub ($$) { #{{{
+sub scrub ($$) {
        if (IkiWiki::Plugin::htmlscrubber->can("sanitize")) {
                return IkiWiki::Plugin::htmlscrubber::sanitize(
                        content => shift, destpage => shift);
@@ -46,9 +46,9 @@ sub scrub ($$) { #{{{
        else {
                return shift;
        }
-} #}}}
+}
 
-sub safeurl ($) { #{{{
+sub safeurl ($) {
        my $url=shift;
        if (exists $IkiWiki::Plugin::htmlscrubber::{safe_url_regexp} &&
            defined $IkiWiki::Plugin::htmlscrubber::safe_url_regexp) {
@@ -57,9 +57,9 @@ sub safeurl ($) { #{{{
        else {
                return 1;
        }
-} #}}}
+}
 
-sub htmlize ($$$) { #{{{
+sub htmlize ($$$) {
        my $page = shift;
        my $destpage = shift;
 
@@ -68,7 +68,7 @@ sub htmlize ($$$) { #{{{
                IkiWiki::preprocess($page, $destpage, shift)));
 }
 
-sub preprocess (@) { #{{{
+sub preprocess (@) {
        return "" unless @_;
        my %params=@_;
        my $key=shift;
@@ -110,7 +110,7 @@ sub preprocess (@) { #{{{
        }
        elsif ($key eq 'link' && ! %params) {
                # hidden WikiLink
-               push @{$links{$page}}, $value;
+               add_link($page, $value);
                return "";
        }
        elsif ($key eq 'author') {
@@ -121,6 +121,20 @@ sub preprocess (@) { #{{{
                $pagestate{$page}{meta}{authorurl}=$value if safeurl($value);
                # fallthrough
        }
+       elsif ($key eq 'date') {
+               eval q{use Date::Parse};
+               if (! $@) {
+                       my $time = str2time($value);
+                       $IkiWiki::pagectime{$page}=$time if defined $time;
+               }
+       }
+       elsif ($key eq 'updated') {
+               eval q{use Date::Parse};
+               if (! $@) {
+                       my $time = str2time($value);
+                       $pagestate{$page}{meta}{updated}=$time if defined $time;
+               }
+       }
 
        if (! defined wantarray) {
                # avoid collecting duplicate data during scan pass
@@ -128,14 +142,7 @@ sub preprocess (@) { #{{{
        }
 
        # Metadata collection that happens only during preprocessing pass.
-       if ($key eq 'date') {
-               eval q{use Date::Parse};
-               if (! $@) {
-                       my $time = str2time($value);
-                       $IkiWiki::pagectime{$page}=$time if defined $time;
-               }
-       }
-       elsif ($key eq 'permalink') {
+       if ($key eq 'permalink') {
                if (safeurl($value)) {
                        $pagestate{$page}{meta}{permalink}=$value;
                        push @{$metaheaders{$page}}, scrub('<link rel="bookmark" href="'.encode_entities($value).'" />', $destpage);
@@ -230,9 +237,9 @@ sub preprocess (@) { #{{{
        }
 
        return "";
-} # }}}
+}
 
-sub pagetemplate (@) { #{{{
+sub pagetemplate (@) {
        my %params=@_;
         my $page=$params{page};
         my $destpage=$params{destpage};
@@ -260,9 +267,9 @@ sub pagetemplate (@) { #{{{
                        $template->param($field => htmlize($page, $destpage, $pagestate{$page}{meta}{$field}));
                }
        }
-} # }}}
+}
 
-sub match { #{{{
+sub match {
        my $field=shift;
        my $page=shift;
        
@@ -288,28 +295,28 @@ sub match { #{{{
        else {
                return IkiWiki::FailReason->new("$page does not have a $field");
        }
-} #}}}
+}
 
 package IkiWiki::PageSpec;
 
-sub match_title ($$;@) { #{{{
+sub match_title ($$;@) {
        IkiWiki::Plugin::meta::match("title", @_);      
-} #}}}
+}
 
-sub match_author ($$;@) { #{{{
+sub match_author ($$;@) {
        IkiWiki::Plugin::meta::match("author", @_);
-} #}}}
+}
 
-sub match_authorurl ($$;@) { #{{{
+sub match_authorurl ($$;@) {
        IkiWiki::Plugin::meta::match("authorurl", @_);
-} #}}}
+}
 
-sub match_license ($$;@) { #{{{
+sub match_license ($$;@) {
        IkiWiki::Plugin::meta::match("license", @_);
-} #}}}
+}
 
-sub match_copyright ($$;@) { #{{{
+sub match_copyright ($$;@) {
        IkiWiki::Plugin::meta::match("copyright", @_);
-} #}}}
+}
 
 1