X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/1fc3f034191d3eec78b4d5da343e282092a221be..24599e3cc9acf801caa0be6c2428dd86f21b53c3:/doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn diff --git a/doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn b/doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn index 26945ee07..b462948eb 100644 --- a/doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn +++ b/doc/bugs/listdirectives_doesn__39__t_register_a_link.mdwn @@ -32,3 +32,65 @@ The [[ikiwiki/directive/listdirectives]]` directive doesn't register a link betw > as well. > > --[[smcv]] + +> No follow-up or objection for a while, so considering this to +> be working as designed. --[[smcv]] + +> > Seems I'm a bit late to butt in, but would it be possible to have two +> > further phases after the scan phase, the first running map and inline +> > and the second orphan? Then map and inline could log or register their +> > links (obviously somewhere were it won't change the result of the link function) +> > and orphan could take them into account. This logging could be +> > turned on by parameter to not waste time for users not needing this and +> > make it tunable (i.e. so that the user can decide which map directives count and which don't) +> > +> > For someone using map and especially autoindex the output of the orphans directive +> > is simply wrong/useless (at least it is for me). And there is no easy workaround like for listdirectives +> > -- [[holger]] + +>>> Hmm. I think this can be done without introducing any "phases", +>>> even, but it would require each plugin that generates links according +>>> to a pagespec to have either a conditional call into the orphans plugin, +>>> or a call to a new core function in ikiwiki that exists solely to +>>> support the orphans plugin. Something like this, maybe: +>>> +>>> # in map.pm, inline.pm, pagestats.pm etc., at scan time +>>> if (IkiWiki::Plugin::orphans->can("add_reachable")) { +>>> IkiWiki::Plugin::orphans::add_reachable($page, $pagespec); +>>> } +>>> +>>> # in orphans.pm (pseudocode; note that this does not *evaluate* +>>> # $pagespec, only stores it, so it's OK to do this at scan time) +>>> sub needsbuild ($pages) +>>> for each page in $pages +>>> clear $pagestate{location}{orphans}{reachable} +>>> sub reachable ($location, $pagespec) +>>> add $pagespec to @{$pagestate{location}{orphans}{reachable}} +>>> +>>> # in preprocess function in orphans.pm (pseudocode) +>>> # executed at build time, not at scan time, so pagespecs work +>>> +>>> for each maybe_orphan with no links to it +>>> for each location with a list of reachable pagespecs +>>> make the page with the orphans directive depend on \ +>>> the page that is the location +>>> for each of those pagespecs +>>> if pagespec matches orphan +>>> take orphan off the list +>>> go to next orphan +>>> output list of orphans +>>> +>>> (Maybe parentlinks should also annotate the parent/ancestors of +>>> each page as reachable from that page.) +>>> +>>> Do other people (mainly Joey) think that'd be acceptable, or +>>> too intrusive? +>>> +>>> Taking this off the list of resolved bugs again while we think about it. +>>> +>>> I suspect that in the presence of autoindex, what you really want might +>>> be less "there's a link to it" and more "there's a path to it from +>>> the root of the wiki", which is why I called the proposed function +>>> "add_reachable". On the other hand, maybe that's too computationally +>>> intensive to actually do; I haven't tried it. +>>> --[[smcv]]