Some more attempts to review patches
[ikiwiki.git] / doc / todo / allow_site-wide_meta_definitions.mdwn
index 4a047befafc3d2e51bd6c25d986923b7a23aad54..492a8d747e0594bacfcaa213cab3e80d94a4416c 100644 (file)
@@ -1,12 +1,14 @@
+[[!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..2894e08 100644
+    index b229592..3132257 100644
     --- a/IkiWiki/Plugin/meta.pm
     +++ b/IkiWiki/Plugin/meta.pm
     @@ -13,6 +13,7 @@ sub import {
@@ -17,19 +19,14 @@ my github ikiwiki fork):
      }
      
      sub getsetup () {
-    @@ -302,6 +303,20 @@ sub match {
+    @@ -302,6 +303,15 @@ sub match {
        }
      }
      
-    +my @metatypes = qw/title description license copyright link
-    +                             author authorurl date permalink stylesheet
-    +                             openid redir robots guid updated/;
-    +
     +sub scan() {
     +  my %params = @_;
     +  my $page = $params{page};
-    +
-    +  foreach my $type (grep { exists $config{"meta_$_"} } @metatypes) {
+    +    foreach my $type (map { s/^meta_//; $_ } grep /^meta_/, keys %config) {
     +          $pagestate{$page}{meta}{$type} = $config{"meta_$type"}
     +                  unless defined $pagestate{$page}{meta}{$type};
     +  }
@@ -57,3 +54,20 @@ my github ikiwiki fork):
      * 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]]