X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/ee9a4e06fcce53062b38814707a0b7d6946d4a36..c5495420bd78882b90869551a7f79e548eb500f0:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index a79b66039..699ad13da 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1004,7 +1004,7 @@ sub displaytime ($;$$) { my $time=formattime($_[0], $_[1]); if ($config{html5}) { return ''; } else { @@ -1745,6 +1745,7 @@ sub misctemplate ($$;@) { run_hooks(pagetemplate => sub { shift->(page => "", destpage => "", template => $template); }); + templateactions($template, ""); $template->param( dynamic => 1, @@ -1753,17 +1754,34 @@ sub misctemplate ($$;@) { content => $content, baseurl => baseurl(), html5 => $config{html5}, - have_actions => 0, # force off - parentlinks => [{ # override - url => $config{url}, - page => $config{wikiname}, - }], @_, ); - + return $template->output; } +sub templateactions ($$) { + my $template=shift; + my $page=shift; + + my $have_actions=0; + my @actions; + run_hooks(pageactions => sub { + push @actions, map { { action => $_ } } + grep { defined } shift->(page => $page); + }); + $template->param(actions => \@actions); + + if ($config{cgiurl} && exists $hooks{auth}) { + $template->param(prefsurl => cgiurl(do => "prefs")); + $have_actions=1; + } + + if ($have_actions || @actions) { + $template->param(have_actions => 1); + } +} + sub hook (@) { my %param=@_; @@ -2333,11 +2351,7 @@ sub match_glob ($$;@) { my $regexp=IkiWiki::glob2re($glob); if ($page=~/^$regexp$/i) { - if ($params{onlypage} && - ! defined IkiWiki::pagetype($IkiWiki::pagesources{$page})) { - return IkiWiki::FailReason->new("$page is not a page"); - } - elsif (! IkiWiki::isinternal($page) || $params{internal}) { + if (! IkiWiki::isinternal($page) || $params{internal}) { return IkiWiki::SuccessReason->new("$glob matches $page"); } else { @@ -2350,11 +2364,19 @@ sub match_glob ($$;@) { } sub match_internal ($$;@) { - return match_glob($_[0], $_[1], @_, internal => 1) + return match_glob(shift, shift, @_, internal => 1) } sub match_page ($$;@) { - return match_glob($_[0], $_[1], @_, onlypage => 1) + my $page=shift; + my $match=match_glob($page, shift, @_); + if ($match && ! (exists $IkiWiki::pagesources{$page} + && defined IkiWiki::pagetype($IkiWiki::pagesources{$page}))) { + return IkiWiki::FailReason->new("$page is not a page"); + } + else { + return $match; + } } sub match_link ($$;@) {