X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e74f9ba459c3b24f8282b5d198cc2722579b493b..80f464bb09a0b47e82feef77df4cfa76195af460:/doc/todo/pagespec_aliases.mdwn diff --git a/doc/todo/pagespec_aliases.mdwn b/doc/todo/pagespec_aliases.mdwn index c5b8504b0..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. @@ -20,9 +21,8 @@ an existing wishlist item. > I think it would make sense to have "pagespec" in the name somehow. -> > Good idea, how about `pagespecalias`? — [[Jon]] +>> Good idea, how about `pagespecalias`? — [[Jon]] -> > No, the strict/warnings does not make me puke. Have you read my perl > code? :-P > @@ -81,11 +81,11 @@ however, to add ' or internal()' to `boring`, for some reason. >> 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 +>>> 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 and tests +>>> 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. >>> @@ -93,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". @@ -141,3 +153,91 @@ Unfortunately I haven't figured out how to do the dependencies - I'd really appr >>> 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]] + +>>>> Regarding my comments: I wasn't clear what you are/were intending to +>>>> achieve with your modifications. I've aimed for a self-contained plugin +>>>> which could be merged with ikiwiki proper. I think I initially took your +>>>> developments as being an evolution of that with the same goal, which is +>>>> why I commented on the (change of) name. However, I guess your work is +>>>> more of a fork than a continuation, in which case you can call it +>>>> whatever you like ☺ I like some of the enhancements you've made, but +>>>> having the aliases/subsets/"things" work in any pagespec (inside map, or +>>>> inline) is a deal-breaker for me. — [[Jon]] + +>>>>> 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*