summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki.pm15
-rw-r--r--IkiWiki/Plugin/skeleton.pm.example5
-rw-r--r--doc/plugins/write.mdwn9
3 files changed, 27 insertions, 2 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index edee8aacb..28ee882cf 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -647,8 +647,19 @@ sub newpagefile ($$) { #{{{
sub targetpage ($$) { #{{{
my $page=shift;
my $ext=shift;
-
- if (! $config{usedirs} || $page eq 'index') {
+
+ my $targetpage='';
+ run_hooks(targetpage => sub {
+ $targetpage=shift->(
+ page => $page,
+ ext => $ext,
+ );
+ });
+
+ if (defined $targetpage && (length($targetpage) > 0)) {
+ return $targetpage;
+ }
+ elsif (! $config{usedirs} || $page eq 'index') {
return $page.".".$ext;
}
else {
diff --git a/IkiWiki/Plugin/skeleton.pm.example b/IkiWiki/Plugin/skeleton.pm.example
index f844ddb91..af22b3406 100644
--- a/IkiWiki/Plugin/skeleton.pm.example
+++ b/IkiWiki/Plugin/skeleton.pm.example
@@ -34,6 +34,7 @@ sub import { #{{{
hook(type => "formbuilder_setup", id => "skeleton", call => \&formbuilder_setup);
hook(type => "formbuilder", id => "skeleton", call => \&formbuilder);
hook(type => "savestate", id => "skeleton", call => \&savestate);
+ hook(type => "targetpage", id => "skeleton", call => \&targetpage);
} # }}}
sub getopt () { #{{{
@@ -204,4 +205,8 @@ sub savestate () { #{{{
debug("skeleton plugin running in savestate");
} #}}}
+sub targetpage () { #{{{
+ debug("skeleton plugin running in targetpage");
+} #}}}
+
1
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index daf70c8e2..6d2622272 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -428,6 +428,15 @@ describes the plugin as a whole. For example:
and undef if a rebuild could be needed in some circumstances, but is not
strictly required.
+### targetpage
+
+ hook(type => "targetpage", id => "foo", call => \&targetpage);
+
+This hook can be used to override the name of the file a page should
+be compiled into.
+
+It should return the target filename.
+
## Plugin interface
To import the ikiwiki plugin interface: