If sandbox/page.mdwn has been generated and sandbox/sidebar.mdwn is created, the sidebar is only added to sandbox and none of the subpages. --[[TaylorKillian]] > Yes, a known bug. As noted in the code: --[[Joey]] # 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. 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));