X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/aeaaeecd515748dfc044a5a5853426a35de70c94..cdae4fe6ecd5f1d18f6deb62166ea7cbec6ba3a9:/doc/bugs/Building_a_sidebar_does_not_regenerate_the_subpages.mdwn diff --git a/doc/bugs/Building_a_sidebar_does_not_regenerate_the_subpages.mdwn b/doc/bugs/Building_a_sidebar_does_not_regenerate_the_subpages.mdwn index 93aafc2c0..419292930 100644 --- a/doc/bugs/Building_a_sidebar_does_not_regenerate_the_subpages.mdwn +++ b/doc/bugs/Building_a_sidebar_does_not_regenerate_the_subpages.mdwn @@ -6,55 +6,3 @@ If sandbox/page.mdwn has been generated and sandbox/sidebar.mdwn is created, the # adding a new sidebar page. So adding such a page # currently requires a wiki rebuild. add_depends($page, $sidebar_page); - ----- -Below is a patch for the bug. It's inspired by trying to solve [[todo/Post-compilation inclusion of the sidebar]]. -What do you think about it? I have a concern though. If a sidebar is removed, it takes two refreshes to update -the affected pages. Is this a feature or a bug? --[[harishcm]] - - --- sidebar.pm.orig 2009-11-21 17:40:02.000000000 +0800 - +++ sidebar_bugfix.pm 2009-11-21 18:16:11.000000000 +0800 - @@ -10,6 +10,7 @@ - - sub import { - hook(type => "getsetup", id => "sidebar", call => \&getsetup); - + hook(type => "needsbuild", id => "sidebar", call => \&needsbuild); - hook(type => "pagetemplate", id => "sidebar", call => \&pagetemplate); - } - - @@ -21,6 +22,22 @@ - }, - } - - +sub needsbuild (@) { - + my $needsbuild=shift; - + - + # Determine every pages' sidebar page - + foreach my $page (keys %pagesources) { - + my $sidebar_page=''; - + $sidebar_page=bestlink($page, "sidebar"); - + - + # If a page's sidebar has changed, force rebuild - + if (!exists $pagestate{$page}{sidebar}{sidebar_page} || $pagestate{$page}{sidebar}{sidebar_page} ne $sidebar_page) { - + $pagestate{$page}{sidebar}{sidebar_page} = $sidebar_page; - + push @$needsbuild, $pagesources{$page}; - + } - + } - +} - + - sub sidebar_content ($) { - my $page=shift; - - @@ -29,9 +46,9 @@ - my $sidebar_type=pagetype($sidebar_file); - - if (defined $sidebar_type) { - - # FIXME: This isn't quite right; it won't take into account - - # adding a new sidebar page. So adding such a page - - # currently requires a wiki rebuild. - + # Record current sidebar page for rechecking bestlink - + # during wiki refresh. Also add depends on the sidebar page. - + $pagestate{$page}{sidebar}{sidebar_page}=$sidebar_page; - add_depends($page, $sidebar_page); - - my $content=readfile(srcfile($sidebar_file));