summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-10-19 20:12:37 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-10-19 20:12:37 -0400
commitfd9393ef8575ad4a8966ae7f5310aab688dedf48 (patch)
tree6854fa55eb8ce4c703c48da585ba372d0f17ab2e
parent3bdc66d30045a7259a7a71173fc6ce85b17cfaf6 (diff)
add displaytime hook
Need to use a hook because an exported function cannot be reliably overridden. The replacement verstion was actually only affecting plugins loaded after it. formattime doesn't need a hook, since there's no reason to export it.
-rw-r--r--IkiWiki.pm17
-rw-r--r--IkiWiki/Plugin/relativedate.pm3
-rw-r--r--doc/plugins/write.mdwn8
-rw-r--r--po/ikiwiki.pot8
4 files changed, 27 insertions, 9 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 1f4d40d41..207ca87fb 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -898,12 +898,23 @@ sub abs2rel ($$) { #{{{
} #}}}
sub displaytime ($;$) { #{{{
- # Plugins can override this function to mark up the time for
- # display.
- return formattime(@_);
+ my $time=shift;
+ my $format=shift;
+ if (exists $hooks{displaytime}) {
+ my $ret;
+ run_hooks(displaytime => sub {
+ $ret=shift->($time, $format)
+ });
+ return $ret;
+ }
+ else {
+ return formattime($time, $format);
+ }
} #}}}
sub formattime ($;$) { #{{{
+ # Plugins can override this function to mark up the time for
+ # display.
my $time=shift;
my $format=shift;
if (! defined $format) {
diff --git a/IkiWiki/Plugin/relativedate.pm b/IkiWiki/Plugin/relativedate.pm
index 0c9426dda..d9d8f7776 100644
--- a/IkiWiki/Plugin/relativedate.pm
+++ b/IkiWiki/Plugin/relativedate.pm
@@ -12,6 +12,7 @@ sub import { #{{{
add_underlay("javascript");
hook(type => "getsetup", id => "relativedate", call => \&getsetup);
hook(type => "format", id => "relativedate", call => \&format);
+ hook(type => "displaytime", id => "relativedate", call => \&display);
} # }}}
sub getsetup () { #{{{
@@ -42,7 +43,7 @@ sub include_javascript ($;$) { #{{{
'" type="text/javascript" charset="utf-8"></script>';
} #}}}
-sub IkiWiki::displaytime ($;$) { #{{{
+sub display ($;$) { #{{{
my $time=shift;
my $format=shift;
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index daf70c8e2..856b34ba1 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -196,7 +196,6 @@ generating the page.
hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
-
[[Templates|wikitemplates]] are filled out for many different things in
ikiwiki, like generating a page, or part of a blog page, or an rss feed, or
a cgi. This hook allows modifying the variables available on those
@@ -361,6 +360,13 @@ This hook is called whenever ikiwiki normally saves its state, just before
the state is saved. The function can save other state, modify values before
they're saved, etc.
+### displaytime
+
+ hook(type => "displaytime", id => "foo", call => \&display);
+
+This hook can be registered to override the regular `displaytime` function.
+Only the last displaytime hook will be used.
+
### renamepage
hook(type => "renamepage", id => "foo", call => \&renamepage);
diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot
index 89cca9ff4..335575f02 100644
--- a/po/ikiwiki.pot
+++ b/po/ikiwiki.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-10-19 19:13-0400\n"
+"POT-Creation-Date: 2008-10-19 20:06-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -48,7 +48,7 @@ msgstr ""
msgid "You are banned."
msgstr ""
-#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1173
+#: ../IkiWiki/CGI.pm:385 ../IkiWiki/CGI.pm:386 ../IkiWiki.pm:1182
msgid "Error"
msgstr ""
@@ -926,12 +926,12 @@ msgstr ""
msgid "failed to load external plugin needed for %s plugin: %s"
msgstr ""
-#: ../IkiWiki.pm:1156
+#: ../IkiWiki.pm:1165
#, perl-format
msgid "preprocessing loop detected on %s at depth %i"
msgstr ""
-#: ../IkiWiki.pm:1665
+#: ../IkiWiki.pm:1674
msgid "yes"
msgstr ""