Add ACTIONS variable to page.tmpl, which allows plugins to add arbitrary links to...
authorJoey Hess <joey@kitenet.net>
Mon, 3 May 2010 16:15:40 +0000 (12:15 -0400)
committerJoey Hess <joey@kitenet.net>
Mon, 3 May 2010 16:46:52 +0000 (12:46 -0400)
(COMMENTSLINK and DISCUSSIONLINK could be folded into this, but are kept
separate for now to avoid breaking modified templates.)

IkiWiki/Plugin/skeleton.pm.example
IkiWiki/Render.pm
debian/changelog
doc/plugins/write.mdwn
templates/page.tmpl

index ddf2996..a404e24 100644 (file)
@@ -24,6 +24,7 @@ sub import {
        hook(type => "format", id => "skeleton", call => \&format);
        hook(type => "pagetemplate", id => "skeleton", call => \&pagetemplate);
        hook(type => "templatefile", id => "skeleton", call => \&templatefile);
+       hook(type => "pageactions", id => "skeleton", call => \&pageactions);
        hook(type => "delete", id => "skeleton", call => \&delete);
        hook(type => "change", id => "skeleton", call => \&change);
        hook(type => "cgi", id => "skeleton", call => \&cgi);
@@ -146,6 +147,14 @@ sub templatefile (@) {
        debug("skeleton plugin running as a templatefile hook");
 }
 
+sub pageactions (@) {
+       my %params=@_;
+       my $page=$params{page};
+
+       debug("skeleton plugin running as a pageactions hook");
+       return ();
+}
+
 sub delete (@) {
        my @files=@_;
 
index cf6943e..a824ba5 100644 (file)
@@ -112,7 +112,14 @@ sub genpage ($$) {
                }
        }
 
-       if ($actions) {
+       my @actions;
+       run_hooks(pageactions => sub {
+               push @actions, map { { action => $_ } } 
+                       grep { defined } shift->(page => $page);
+       });
+       $template->param(actions => \@actions);
+
+       if ($actions || @actions) {
                $template->param(have_actions => 1);
        }
 
index 789fda1..e03375b 100644 (file)
@@ -6,6 +6,10 @@ ikiwiki (3.20100502) UNRELEASED; urgency=low
   * In html5 mode, use all the nice new semantic tags. Care was taken
     to not change the id/class named used in the CSS, so only CSS
     that refers to tag types needed to be changed.
+  * Add ACTIONS variable to page.tmpl, which allows plugins to add arbitrary
+    links to the action bar without modifying the template further.
+    (COMMENTSLINK and DISCUSSIONLINK could be folded into this, but
+    are kept separate for now to avoid breaking modified templates.)
 
  -- Joey Hess <joeyh@debian.org>  Sun, 02 May 2010 13:22:50 -0400
 
index 5e7042c..3b1d770 100644 (file)
@@ -319,6 +319,15 @@ should return the name of the template file to use (relative to the
 template directory), or undef if it doesn't want to change the default
 ("page.tmpl").
 
+### pageactions
+
+       hook(type => "pageactions", id => "foo", call => \&pageactions);
+
+This hook allows plugins to add arbitrary actions to the action bar on a
+page (next to Edit, RecentChanges, etc). The hook is passed a "page"
+parameter, and can return a list of html fragments to add to the action
+bar.
+
 ### sanitize
 
        hook(type => "sanitize", id => "foo", call => \&sanitize);
index 195ce78..8a9911f 100644 (file)
 <TMPL_IF NAME="PREFSURL">
 <li><a href="<TMPL_VAR PREFSURL>">Preferences</a></li>
 </TMPL_IF>
+<TMPL_IF NAME="ACTIONS">
+<TMPL_LOOP NAME="ACTIONS">
+<li><TMPL_VAR ACTION></li>
+</TMPL_LOOP>
+</TMPL_IF>
 <TMPL_IF NAME="COMMENTSLINK">
-<li><TMPL_VAR COMMENTSLINK><br /></li>
+<li><TMPL_VAR COMMENTSLINK></li>
 <TMPL_ELSE>
 <TMPL_IF NAME="DISCUSSIONLINK">
-<li><TMPL_VAR DISCUSSIONLINK><br /></li>
+<li><TMPL_VAR DISCUSSIONLINK></li>
 </TMPL_IF>
 </TMPL_IF>
 </ul>