summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/tag.pm26
-rw-r--r--templates/autotag.tmpl3
2 files changed, 29 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm
index cdcfaf536..6c43a053d 100644
--- a/IkiWiki/Plugin/tag.pm
+++ b/IkiWiki/Plugin/tag.pm
@@ -36,6 +36,13 @@ sub getsetup () {
safe => 1,
rebuild => 1,
},
+ tag_autocreate => {
+ type => "boolean",
+ example => 0,
+ description => "Autocreate new tag pages",
+ safe => 1,
+ rebuild => 1,
+ },
}
sub tagpage ($) {
@@ -59,6 +66,21 @@ sub taglink ($$$;@) {
return htmllink($page, $destpage, tagpage($tag), %opts);
}
+sub gentag ($) {
+ my $tag=shift;
+ if (defined $config{tag_autocreate} && $config{tag_autocreate}) {
+ my $tagfile = newpagefile(tagpage($tag), $config{default_pageext});
+ $tagfile=~s/^\///;
+ return if (srcfile($tagfile,1));
+
+ debug(sprintf(gettext("creating tag page %s"), $tag));
+
+ my $template=template("autotag.tmpl");
+ $template->param(tag => $tag);
+ writefile($tagfile, $config{srcdir}, $template->output);
+ }
+}
+
sub preprocess_tag (@) {
if (! @_) {
return "";
@@ -72,6 +94,10 @@ sub preprocess_tag (@) {
foreach my $tag (keys %params) {
$tag=linkpage($tag);
$tags{$page}{$tag}=1;
+
+ # add tagpage if necessary
+ gentag($tag);
+
# hidden WikiLink
add_link($page, tagpage($tag));
}
diff --git a/templates/autotag.tmpl b/templates/autotag.tmpl
new file mode 100644
index 000000000..754e0b35b
--- /dev/null
+++ b/templates/autotag.tmpl
@@ -0,0 +1,3 @@
+## Pagest tagged <TMPL_VAR TAG> ##
+
+[[!inline pages="tagged(<TMPL_VAR TAG>)" actions="no" archive="yes"]]