summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2010-05-03 12:15:40 -0400
committerJoey Hess <joey@kitenet.net>2010-05-03 12:46:52 -0400
commit2f22ee85e547dfe408fc0ec520aed6a6e137e136 (patch)
treebf9ee906ca723453e9a8c05b32ab3cb502e941b5
parentadf182669dbb82b821216faf643ac5084f252a19 (diff)
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.)
-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>