use IkiWiki 3.00;
sub import {
+ hook(type => "checkconfig", id => "tag", call => \&checkconfig);
hook(type => "getopt", id => "tag", call => \&getopt);
hook(type => "getsetup", id => "tag", call => \&getsetup);
hook(type => "preprocess", id => "tag", call => \&preprocess_tag, scan => 1);
hook(type => "preprocess", id => "taglink", call => \&preprocess_taglink, scan => 1);
hook(type => "pagetemplate", id => "tag", call => \&pagetemplate);
+
+ IkiWiki::loadplugin("transient");
}
sub getopt () {
safe => 1,
rebuild => undef,
},
+ tag_autocreate_commit => {
+ type => "boolean",
+ example => 1,
+ default => 1,
+ description => "commit autocreated tag pages",
+ safe => 1,
+ rebuild => 0,
+ },
+}
+
+sub checkconfig () {
+ if (! defined $config{tag_autocreate_commit}) {
+ $config{tag_autocreate_commit} = 1;
+ }
}
sub taglink ($) {
sub tagname ($) {
my $tag=shift;
if (defined $config{tagbase}) {
- $tag =~ s!^/$config{tagbase}/!!;
+ $tag =~ s!^/\Q$config{tagbase}\E/!!;
} else {
- $tag =~ s!^\.?/?!!;
+ $tag =~ s!^\.?/!!;
}
- return $tag;
+ return pagetitle($tag, 1);
}
sub htmllink_tag ($$$;@) {
else {
$tagpage=~s/^\///;
}
+ if (exists $IkiWiki::pagecase{lc $tagpage}) {
+ $tagpage=$IkiWiki::pagecase{lc $tagpage}
+ }
my $tagfile = newpagefile($tagpage, $config{default_pageext});
my $template=template("autotag.tmpl");
$template->param(tagname => tagname($tag));
$template->param(tag => $tag);
- writefile($tagfile, $config{srcdir}, $template->output);
- if ($config{rcs}) {
+
+ my $dir = $config{srcdir};
+ if (! $config{tag_autocreate_commit}) {
+ no warnings 'once';
+ $dir = $IkiWiki::Plugin::transient::transientdir;
+ }
+
+ writefile($tagfile, $dir, $template->output);
+ if ($config{rcs} && $config{tag_autocreate_commit}) {
IkiWiki::disable_commit_hook();
IkiWiki::rcs_add($tagfile);
IkiWiki::rcs_commit_staged(message => $message);
if ($template->query(name => "categories")) {
# It's an rss/atom template. Add any categories.
if (defined $tags && %$tags) {
- $template->param(categories => [map { category => tagname($_) },
- sort keys %$tags]);
+ eval q{use HTML::Entities};
+ $template->param(categories =>
+ [map { category => HTML::Entities::encode_entities_numeric(tagname($_)) },
+ sort keys %$tags]);
}
}
}