aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kitenet.net>2010-04-17 16:01:41 -0400
committerJoey Hess <joey@kitenet.net>2010-04-17 16:01:41 -0400
commit2fc342b048d23d8355631000b7285fb5d26b258a (patch)
tree342a24508d523cd98ff1e5a8e3414c09122cf893
parentb00d8771cc212349ca886401bc68facdf08e0d3c (diff)
downloadikiwiki-2fc342b048d23d8355631000b7285fb5d26b258a.tar
ikiwiki-2fc342b048d23d8355631000b7285fb5d26b258a.tar.gz
fix autotag behavior for relative tags
A tag like ./foo is searched for relative to the tagging page. However, if multiple pages use such a tag, the only one sure to be in common is in the root, so autocreate it there to avoid scattering redunadant autocreated tags around the tree. (This is probably not ideal.) Also renamed the tagpage and taglink functions for clarity.
-rw-r--r--IkiWiki/Plugin/tag.pm32
1 files changed, 20 insertions, 12 deletions
diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm
index 9f6df5fc4..d2a3d4dfd 100644
--- a/IkiWiki/Plugin/tag.pm
+++ b/IkiWiki/Plugin/tag.pm
@@ -43,7 +43,7 @@ sub getsetup () {
},
}
-sub tagpage ($) {
+sub taglink ($) {
my $tag=shift;
if ($tag !~ m{^\.?/} &&
@@ -55,20 +55,28 @@ sub tagpage ($) {
return $tag;
}
-sub taglink ($$$;@) {
+sub htmllink_tag ($$$;@) {
my $page=shift;
my $destpage=shift;
my $tag=shift;
my %opts=@_;
- return htmllink($page, $destpage, tagpage($tag), %opts);
+ return htmllink($page, $destpage, taglink($tag), %opts);
}
sub gentag ($) {
my $tag=shift;
+
if ($config{tag_autocreate}) {
- my $tagfile = newpagefile(tagpage($tag), $config{default_pageext});
- $tagfile=~s/^\///;
+ my $tagpage=taglink($tag);
+ if ($tagpage=~/^\.\/(.*)/) {
+ $tagpage=$1;
+ }
+ else {
+ $tagpage=~s/^\///;
+ }
+
+ my $tagfile = newpagefile($tagpage, $config{default_pageext});
add_autofile($tagfile, "tag", sub {
debug(sprintf(gettext("creating tag page %s"), $tag));
@@ -94,7 +102,7 @@ sub preprocess_tag (@) {
$tag=linkpage($tag);
# hidden WikiLink
- add_link($page, tagpage($tag), 'tag');
+ add_link($page, taglink($tag), 'tag');
gentag($tag);
}
@@ -110,16 +118,16 @@ sub preprocess_taglink (@) {
return join(" ", map {
if (/(.*)\|(.*)/) {
my $tag=linkpage($2);
- add_link($params{page}, tagpage($tag), 'tag');
+ add_link($params{page}, taglink($tag), 'tag');
gentag($tag);
- return taglink($params{page}, $params{destpage}, $tag,
+ return htmllink_tag($params{page}, $params{destpage}, $tag,
linktext => pagetitle($1));
}
else {
my $tag=linkpage($_);
- add_link($params{page}, tagpage($tag), 'tag');
+ add_link($params{page}, taglink($tag), 'tag');
gentag($tag);
- return taglink($params{page}, $params{destpage}, $tag);
+ return htmllink_tag($params{page}, $params{destpage}, $tag);
}
}
grep {
@@ -137,7 +145,7 @@ sub pagetemplate (@) {
$template->param(tags => [
map {
- link => taglink($page, $destpage, $_, rel => "tag")
+ link => htmllink_tag($page, $destpage, $_, rel => "tag")
}, sort keys %$tags
]) if defined $tags && %$tags && $template->query(name => "tags");
@@ -153,7 +161,7 @@ sub pagetemplate (@) {
package IkiWiki::PageSpec;
sub match_tagged ($$;@) {
- return match_link($_[0], IkiWiki::Plugin::tag::tagpage($_[1]), linktype => 'tag');
+ return match_link($_[0], IkiWiki::Plugin::tag::taglink($_[1]), linktype => 'tag');
}
1