X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/3e298365934ba928700d01730be8649bd72ae9b6..86e1dc492ffa26f6546c9c6d3234b762a86ccb61:/doc/todo/Post-compilation_inclusion_of_the_sidebar.mdwn diff --git a/doc/todo/Post-compilation_inclusion_of_the_sidebar.mdwn b/doc/todo/Post-compilation_inclusion_of_the_sidebar.mdwn index 7586c060b..36161e8b4 100644 --- a/doc/todo/Post-compilation_inclusion_of_the_sidebar.mdwn +++ b/doc/todo/Post-compilation_inclusion_of_the_sidebar.mdwn @@ -28,3 +28,40 @@ NicolasLimare > sidebar could be done as you describe using .shtml. --[[Joey]] [[wishlist]] + +> I have a plan for a way to avoid unecessary rebuilds caused by the +> sidebar. The idea is to use wikistate to store what a sidebar renders to. +> Then in the needsbuild hook, render sidebar(s) and compare with their +> previous stored rendering. If a sidebar's rendered content has changed, +> then all pages that display that sidebar need to be forced to be rebuilt. +> +> Also, if there is no previous stored rendering for a sidebar, or +> if there is a stored rendering for a sidebar page that no longer exists, then +> the pages need to be rebuilt. (This should deal with the [[bugs/Building_a_sidebar_does_not_regenerate_the_subpages]] bug. +> +> This would also save significant time, since the stored sidebar rendering +> could just be dumped into the page by the pagetemplate hook. Current code +> re-loads and renders the same sidebar file for every page built! +> +> The sticky part is (relative) links on the sidebar. These would need to +> be modified somehow depending on the page that the sidebar is placed on, +> to not break the link. +> +> Another wrinkle is changing subpage links on a sidebar. Suppose a sidebar +> links to page `foo`. If page `bar/foo` exists, the sidebar on page bar will, +> currently, link to that page, in preference to a toplevel `foo`. +> If `bar/foo` is removed, it will update to link to `foo`. With the new +> scheme, the stored sidebar rendering is not for page `foo`, and so +> the change of the `bar/foo` link will not be noticed or acted on. +> Granted, it's unlikely that anyone relies on the current behavior. You +> generally want links on a sidebar to link to the same place on every page +> that displays it. So finding some way to force all links on a sidebar to +> be handled absolutely and documenting that would avoid this problem. +> +> So, one way to handle both the above problems would be to use the +> pre-rendered sidebar for each page, but use a html parser to look for +> links in it, and munge them to work as relative links on the page the +> sidebar is being added to. Or, if the wiki's url is known, just do this +> once when rendering the sidebar, adding the full url to the links. +> (Maybe require `url` be set when using sidebar?) +> --[[Joey]]