summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/skeleton.pm.example9
-rw-r--r--IkiWiki/Render.pm9
-rw-r--r--debian/changelog4
-rw-r--r--doc/plugins/write.mdwn9
-rw-r--r--templates/page.tmpl9
5 files changed, 37 insertions, 3 deletions
diff --git a/IkiWiki/Plugin/skeleton.pm.example b/IkiWiki/Plugin/skeleton.pm.example
index ddf2996d6..a404e24af 100644
--- a/IkiWiki/Plugin/skeleton.pm.example
+++ b/IkiWiki/Plugin/skeleton.pm.example
@@ -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=@_;
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index cf6943e7d..a824ba539 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -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);
}
diff --git a/debian/changelog b/debian/changelog
index 789fda1ce..e03375bd3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -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
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index 5e7042c3b..3b1d770eb 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -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);
diff --git a/templates/page.tmpl b/templates/page.tmpl
index 195ce7886..8a9911fae 100644
--- a/templates/page.tmpl
+++ b/templates/page.tmpl
@@ -66,11 +66,16 @@
<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>