summaryrefslogtreecommitdiff
path: root/doc/todo
diff options
context:
space:
mode:
authorhttp://taozhyn.myopenid.com/ <http://taozhyn.myopenid.com/@web>2009-02-20 04:58:52 -0500
committerJoey Hess <joey@kitenet.net>2009-02-20 04:58:52 -0500
commit65c6bc687ee76cdb1cf5810fbaa51a1d5b91beb9 (patch)
tree1567e93022654990fec8508b5cc44a4ef824be42 /doc/todo
parent1b7845927c1e50d1a2e7a5b20ffdbc42fd40d68f (diff)
Adding patch, moved from plugins/tag/discussion
Diffstat (limited to 'doc/todo')
-rw-r--r--doc/todo/auto-create_tag_pages_according_to_a_template.mdwn99
1 files changed, 99 insertions, 0 deletions
diff --git a/doc/todo/auto-create_tag_pages_according_to_a_template.mdwn b/doc/todo/auto-create_tag_pages_according_to_a_template.mdwn
index bfb4a863b..ab9263556 100644
--- a/doc/todo/auto-create_tag_pages_according_to_a_template.mdwn
+++ b/doc/todo/auto-create_tag_pages_according_to_a_template.mdwn
@@ -7,3 +7,102 @@ Also see: <http://madduck.net/blog/2008.01.06:new-blog/> and <http://users.itk.p
[[!tag wishlist]]
I would love to see this as well. -- dato
+
+---
+
+I have create a patch to tag.pm for add the option for auto create tag pages.
+A new setting is used to enable or disable auto-create tag pages, `tag_autocreate`.
+The new tag file is created during the preprocess phase.
+The new tag file is then complied during the change phase.
+
+_tag.pm from version 3.01_
+
+
+ --- tag.pm 2009-02-06 10:26:03.000000000 -0700
+ +++ tag_new.pm 2009-02-06 12:17:19.000000000 -0700
+ @@ -14,6 +14,7 @@
+ 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);
+ + hook(type => "change", id => "tag", call => \&change);
+ }
+
+ sub getopt () {
+ @@ -36,6 +37,36 @@
+ safe => 1,
+ rebuild => 1,
+ },
+ + tag_autocreate => {
+ + type => "boolean",
+ + example => 0,
+ + description => "Auto-create the new tag pages, uses autotagpage.tmpl ",
+ + safe => 1,
+ + rebulid => 1,
+ + },
+ +}
+ +
+ +my $autocreated_page = 0;
+ +
+ +sub gen_tag_page($) {
+ + my $tag=shift;
+ +
+ + my $tag_file=$tag.'.'.$config{default_pageext};
+ + return if (-f $config{srcdir}.$tag_file);
+ +
+ + my $template=template("autotagpage.tmpl");
+ + $template->param(tag => $tag);
+ + writefile($tag_file, $config{srcdir}, $template->output);
+ + $autocreated_page = 1;
+ +
+ + if ($config{rcs}) {
+ + IkiWiki::disable_commit_hook();
+ + IkiWiki::rcs_add($tag_file);
+ + IkiWiki::rcs_commit_staged(
+ + gettext("Automatic tag page generation"),
+ + undef, undef);
+ + IkiWiki::enable_commit_hook();
+ + }
+ }
+
+ sub tagpage ($) {
+ @@ -47,6 +78,10 @@
+ $tag=~y#/#/#s; # squash dups
+ }
+
+ + if (defined $config{tag_autocreate} && $config{tag_autocreate} ) {
+ + gen_tag_page($tag);
+ + }
+ +
+ return $tag;
+ }
+
+ @@ -125,4 +160,18 @@
+ }
+ }
+
+ +sub change(@) {
+ + return unless($autocreated_page);
+ + $autocreated_page = 0;
+ +
+ + # This refresh/saveindex is to complie the autocreated tag pages
+ + IkiWiki::refresh();
+ + IkiWiki::saveindex();
+ +
+ + # This refresh/saveindex is to fix the Tags link
+ + # With out this additional refresh/saveindex the tag link displays ?tag
+ + IkiWiki::refresh();
+ + IkiWiki::saveindex();
+ +}
+ +
+
+
+This uses a template called `autotagpage.tmpl`, here is my template file:
+
+ \[[!inline pages="link(<TMPL_VAR TAG>)" archive="yes"]]
+
+
+A quirk I have not figured out is during the `sub change`, see my comments in the code.
+I am not sure if that is the best way to handle it.
+
+[[!tag patch]]
+-- Jeremy Schultz <jeremy.schultz@uleth.ca>