Some more attempts to review patches
[ikiwiki.git] / doc / todo / allow_site-wide_meta_definitions.mdwn
index 5b7a5bea53d493cbce126af21f14d0c8a58ed30e..492a8d747e0594bacfcaa213cab3e80d94a4416c 100644 (file)
@@ -1,44 +1,40 @@
+[[!tag plugins/meta patch]]
+
 I'd like to define [[plugins/meta]] values to apply across all pages
 site-wide unless the pages define their own: default values for meta
 definitions essentially.
 
-Here's a patch[[!tag patch]] to achieve this (also in the "defaultmeta" branch of
+Here's a patch to achieve this (also in the "defaultmeta" branch of
 my github ikiwiki fork):
 
     diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm
-    index b229592..a307db4 100644
+    index b229592..3132257 100644
     --- a/IkiWiki/Plugin/meta.pm
     +++ b/IkiWiki/Plugin/meta.pm
     @@ -13,6 +13,7 @@ sub import {
-            hook(type => "needsbuild", id => "meta", call => \&needsbuild);
-            hook(type => "preprocess", id => "meta", call => \&preprocess, scan => 1);
-            hook(type => "pagetemplate", id => "meta", call => \&pagetemplate);
-    +       hook(type => "scan", id => "meta", call => \&scan);
+       hook(type => "needsbuild", id => "meta", call => \&needsbuild);
+       hook(type => "preprocess", id => "meta", call => \&preprocess, scan => 1);
+       hook(type => "pagetemplate", id => "meta", call => \&pagetemplate);
+    +  hook(type => "scan", id => "meta", call => \&scan);
      }
      
      sub getsetup () {
     @@ -302,6 +303,15 @@ sub match {
-            }
+       }
      }
      
     +sub scan() {
-    +       my %params = @_;
-    +       my $page = $params{page};
+    +  my %params = @_;
+    +  my $page = $params{page};
     +    foreach my $type (map { s/^meta_//; $_ } grep /^meta_/, keys %config) {
-    +               $pagestate{$page}{meta}{$type} = $config{"meta_$type"}
-    +                       unless defined $pagestate{$page}{meta}{$type};
-    +       }
+    +          $pagestate{$page}{meta}{$type} = $config{"meta_$type"}
+    +                  unless defined $pagestate{$page}{meta}{$type};
+    +  }
     +}
     +
      package IkiWiki::PageSpec;
      
      sub match_title ($$;@) {
-    @@ -324,4 +334,5 @@ sub match_copyright ($$;@) {
-            IkiWiki::Plugin::meta::match("copyright", @_);
-     }
-     
-    +
-     1
     diff --git a/doc/ikiwiki/directive/meta.mdwn b/doc/ikiwiki/directive/meta.mdwn
     index 000f461..200c4b2 100644
     --- a/doc/ikiwiki/directive/meta.mdwn
@@ -50,11 +46,28 @@ my github ikiwiki fork):
     +You can also define site-wide defaults for meta values by including them
     +in your setup file, e.g.
     +
-    +       meta_copyright => "Copyright 2007 by Joey Hess",
-    +       meta_license   => "GPL v2+",
+    +  meta_copyright => "Copyright 2007 by Joey Hess",
+    +  meta_license   => "GPL v2+",
     +
      Supported fields:
      
      * title
 
 -- [[Jon]]
+
+> This doesn't support multiple-argument meta directives like
+> `link=x rel=y`, or meta directives with special side-effects like
+> `updated`.
+>
+> The first could be solved (if you care) by a syntax like this:
+>
+>     meta_defaults => [
+>         { copyright => "© me" },
+>         { link => "about:blank", rel => "silly", },
+>     ]
+>
+> The second could perhaps be solved by invoking `meta::preprocess` from within
+> `scan` (which might be a simplification anyway), although this is complicated
+> by the fact that some (but not all!) meta headers are idempotent.
+> 
+> --[[smcv]]