]> sipb.mit.edu Git - ikiwiki.git/blobdiff - doc/todo/pagespec_aliases.mdwn
pagespec_aliases: future websetup enhancements
[ikiwiki.git] / doc / todo / pagespec_aliases.mdwn
index 09155754cd5f8681065d6aec9c47deacb1bdad04..c5b8504b0642728bf5bcac48abc64cea7703b44f 100644 (file)
@@ -1,3 +1,4 @@
+[[!template id=gitbranch branch=jon/pagespec_alias author="[[Jon]]"]]
 [[!tag patch wishlist]]I quite often find myself repeating a boiler-plate
 [[ikiwiki/pagespec]] chunk, e.g.
 
 [[!tag patch wishlist]]I quite often find myself repeating a boiler-plate
 [[ikiwiki/pagespec]] chunk, e.g.
 
@@ -10,64 +11,7 @@ pagespec "alias", and instead write
 
 I wrote the following plugin to achieve this:
 
 
 I wrote the following plugin to achieve this:
 
-    commit f3a9dd113338fe5d2b717de1dc69679ff74e2f8d
-    Author: Jon Dowland <jmtd@debian.org>
-    Date:   Tue May 3 17:40:16 2011 +0100
-    
-        new plugin: alias.pm - pagespec aliases
-    
-    diff --git a/IkiWiki/Plugin/alias.pm b/IkiWiki/Plugin/alias.pm
-    new file mode 100644
-    index 0000000..b8d4574
-    --- /dev/null
-    +++ b/IkiWiki/Plugin/alias.pm
-    @@ -0,0 +1,47 @@
-    +package IkiWiki::Plugin::alias;
-    +
-    +use warnings;
-    +use strict;
-    +use IkiWiki '3.00';
-    +
-    +sub import {
-    +  hook(type => "getsetup", id=> "alias", call => \&getsetup);
-    +  hook(type => "checkconfig", id=> "alias", call => \&checkconfig);
-    +}
-    +
-    +sub getsetup () {
-    +    return
-    +        plugin => {
-    +            description => "allows the definition of pagespec aliases",
-    +            safe => 1,
-    +            rebuild => 1,
-    +            section => "misc",
-    +        },
-    +        pagespec_aliases => {
-    +            type => "string",
-    +            example => {"image" => "*jpg or *jpeg or *png or *gif or *ico" },
-    +            description => "a set of mappings from alias name to pagespec",
-    +            safe => 1,
-    +            rebuild => 0,
-    +        },
-    +}
-    +
-    +sub checkconfig () {
-    +    no strict 'refs';
-    +    no warnings 'redefine';
-    +
-    +    if ($config{pagespec_aliases}) {
-    +        foreach my $key (keys %{$config{pagespec_aliases}}) {
-    +            my $value = ${$config{pagespec_aliases}}{$key};
-    +            # XXX: validate key?
-    +            my $subname = "IkiWiki::PageSpec::match_$key";
-    +            *{ $subname } = sub {
-    +              my $path = shift;
-    +              return IkiWiki::pagespec_match($path, $value);
-    +            }
-    +        }
-    +    }
-    +}
-    +
-    +1;
+    <snip old patch; see git branch outlined above>
 
 I need to reflect on this a bit more before I send a pull request.  In
 particular I imagine the strict/warnings stuff will make you puke.  Also, I'm
 
 I need to reflect on this a bit more before I send a pull request.  In
 particular I imagine the strict/warnings stuff will make you puke.  Also, I'm
@@ -136,6 +80,19 @@ however, to add ' or internal()' to `boring`, for some reason.
 
 >> Useful indeed! --[[Joey]] 
 
 
 >> Useful indeed! --[[Joey]] 
 
+
+>>> I've tweaked my patch in light of your above feedback:  The plugin has
+>>> been renamed, and I now validate keys.  I've also added documentation to
+>>> the branch.  I haven't read rubykat's code properly yet, and don't have
+>>> access at the time of writing (I'm on a beach in Greece ☺), but I expect
+>>> it would be possible to extend what I've got here to support defining the
+>>> aliases in a PageSpec, once the dependency stuff has been reasoned out
+>>> properly.
+>>>
+>>> I'd like to solve the issue of this not being web-configurable by
+>>> implementing support for more nested datatypes in [[plugins/websetup]]. —
+>>> [[Jon]]
+
 ---------------------------
 
 Based on the above, I have written an experimental plugin called "subset".
 ---------------------------
 
 Based on the above, I have written an experimental plugin called "subset".
@@ -166,3 +123,21 @@ Unfortunately I haven't figured out how to do the dependencies - I'd really appr
 > > Cool!  I like the caching idea.  I'm not sure about the name.  I don't like defining
 > > stuff in pages, but I appreciate this is a matter of taste, and would be happy with
 > > supporting both. — [[Jon]]
 > > Cool!  I like the caching idea.  I'm not sure about the name.  I don't like defining
 > > stuff in pages, but I appreciate this is a matter of taste, and would be happy with
 > > supporting both. — [[Jon]]
+
+>>> I've now gone and completely re-done "subset" so that it is less like an alias, but it a bit clearer and simpler:
+>>> instead of having a separate "match_" function for every alias, I simply have one function, "match_subset"
+>>> which takes the name of the subset.  Thus a \[[!subset name="foo"...]] would be called `subset(foo)` rather than `foo()`.
+
+>>> There are a few reasons for this:<br/>
+>>> (a) it's more secure not to be evaluating code on the fly<br/>
+>>> (b) it's simpler<br/>
+>>> (c) (and this was my main reason) it makes it possible to do caching without having to have a separate "subset" argument.
+>>> I've done a bit of a hack for this: basically, the PageSpec is checked to see if the very start of the PageSpec is `subset(foo) and` or if the whole pagespec is just `subset(foo)` and if either of those is true, then it does the subset caching stuff.
+>>> The reason I check for "and" is that if it is "subset(foo) or something" then it would be an error to use the subset cache in that case.
+>>> The reason I just check the start of the PageSpec is because I don't want to have to do complex parsing of the PageSpec.
+
+>>> As for defining subsets in the config rather than on pages, I perfectly understand that desire, and I could probably add that in.
+
+>>> As for the name "subset"... well, it's even less like an alias now, and "alias" is already a reserved name.  What other names would you suggest?
+
+>>>--[[KathrynAndersen]]