X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/2c2c537dd521bbc659f0499af72ca70078d97d50..4a67f6130fe9e85140cc26cc2a6ba928277db51e:/doc/todo/pagespec_aliases.mdwn diff --git a/doc/todo/pagespec_aliases.mdwn b/doc/todo/pagespec_aliases.mdwn index afb655bc2..54e252956 100644 --- a/doc/todo/pagespec_aliases.mdwn +++ b/doc/todo/pagespec_aliases.mdwn @@ -1,3 +1,4 @@ +[[!tag reviewed]] [[!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. @@ -92,6 +93,18 @@ however, to add ' or internal()' to `boring`, for some reason. >>> implementing support for more nested datatypes in [[plugins/websetup]]. — >>> [[Jon]] +>>>> Well, it's a difficult problem. websetup builds a form using +>>>> CGI::FormBuilder, which makes it easy to build the simple UI we have +>>>> now, but sorta precludes anything more complicated. And anything with +>>>> a nested datatype probably needs a customized UI for users to be able +>>>> to deal with it. I don't think websetupability need be a deal-breaker +>>>> for this patch. I personally like special pages like Kathryn is doing +>>>> more than complex setup files. --[[Joey]] + +>>>>> I've ran out of time to keep working on this, so I'm just going to +>>>>> submit it as a 'contrib' plugin and leave things at that for now. +>>>>> — [[Jon]] + --------------------------- Based on the above, I have written an experimental plugin called "subset". @@ -154,3 +167,77 @@ Unfortunately I haven't figured out how to do the dependencies - I'd really appr >>>>> I'm a bit confused by your statement "having the aliases/subsets/"things" work in any pagespec (inside map, or inline) is a deal-breaker for me". >>>>> Do you mean that you want them to work in any pagespec, or that you *don't* want them to work in any pagespec? -- [[KathrynAndersen]] +>>>>>> I mean I would want them to work in any pagespec. — [[Jon]] + +---- + +Hi, it's been 7 years since I last looked at this, and I'm surprised to find +that I'd got it up to a merge-request state; I've dusted it off and done some +clean up and testing, but it's working (albeit not via websetup). I've revamped +the docs and rebased the branch. Can someone please consider merging ([[joey]] +or [[smcv]]?) or otherwise feed back on this? Thanks! — [[Jon]] (2018-09-25) + +> To hide it from `websetup`, the `example` needs to be a hash reference +> like `example => { images => "*.png or *.jpg or *.gif" }`, I think? +> (Please try it on a websetup-enabled wiki, possibly by copying +> `t/manual/git_revert` to `t/manual/websetup` and adapting it as required.) +> +> For a less magical variant, you could consider using `alias(images)` +> instead of `images()` for the pagespec syntax that is enabled by the +> example above. I'm not sure which way is better. +> +> If `safe_key` fails, you probably want to log a warning, or even fail +> `checkconfig` with a fatal `error`? +> +> If `checkconfig` detects that the given pagespec function already +> exists, for example `title` after loading the meta plugin, you probably +> want to log a warning or fail? It seems you can detect this with +> `defined ref *$subname{CODE}`. +> +> If you define a loop of mutually recursive aliases (or even an alias +> that refers to itself), I think you'll get infinite recursion. +> You can probably bypass that with a construct like: +> +> my $entered; +> *{ $subname } = sub { +> return IkiWiki::ErrorReason->new("Alias $key is defined recursively") if $entered; +> $entered = 1; +> my $result = IkiWiki::pagespec_match($path, $value); +> $entered = 0; +> return $result; +> } +> +> (but don't take my word for it, a regression test would tell you whether +> this works.) +> +> --[[smcv]] + +---- + +Thank you for the review (nearly a year ago, I've just noticed!). I've +added checks for the issues you outline above, and test coverage for all +those issues. +I've also decided to rename the plugin (back) to just "alias": +I mooted that right back when I started this but I was worried about +potential ambiguity. That was ten years ago and I think the concern has +prove unfounded. I've left the config key as `pagespec_aliases` though, +as that's one area I think its clearer. + +With regards `aliasname()` versus `alias(aliasname)`: +I've given this some thought. Pros and cons of that approach: it would be +a little uglier; you would not inadvertently clash with a PageSpec defined +elsewhere. However, I wonder if someone might actually *want* to define a +PageSpec this way that was the same as that defined by something else: Perhaps, +you have disabled a plugin that defined a PageSpec name and you want to substitute +what it would have expanded to with something else, for example. + +I will (after writing this) rebase my branch. Please take another look! +(just in case the rebase and/or the "-" in the branchnames causes problems +with IkiWiki's auto-mirror-pull, the branch is here: +) + +*— [[Jon]], 2021-01-10* + +> Scratch that, more work needed ☹ *— [[Jon]], 2021-01-11* + +>> This is really ready now. *— [[Jon]], 2021-01-13*