- Adds a tag plugin that allows more easily tagging pages.
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Thu, 27 Jul 2006 23:08:03 +0000 (23:08 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Thu, 27 Jul 2006 23:08:03 +0000 (23:08 +0000)
    The meta plugin can also still be used for that, but the tag plugin
    also lists a page's tags at the bottom of the page.
  - Allows preprocessor directives to have parameters with no specified
    value.
  - Fixes preprocessor directive parameter parsing so that
    foo=bar baz now means "foo=bar" and a "baz" with no value.
* Run pagetemplate hooks when inlining pages so that inlines pages also
  list their tags.
* Make all plugins with pagetemplate hooks check that variables exist
  on the template before setting them.

IkiWiki/Plugin/inline.pm
IkiWiki/Plugin/meta.pm
IkiWiki/Plugin/search.pm
IkiWiki/Plugin/tag.pm
debian/changelog
doc/plugins/write.mdwn
doc/todo/plugin.mdwn
doc/todo/tags.mdwn [new file with mode: 0644]
templates/inlinepage.tmpl
templates/inlinepagetitle.tmpl
templates/page.tmpl

index 08126c4e6f6f6a399de8b2346626ed908d3a5734..749e39fb63524b1065a8bcc04446e5b0497be702 100644 (file)
@@ -80,7 +80,15 @@ sub preprocess_inline (@) { #{{{
                $template->param(content => get_inline_content($params{page}, $page))
                        if $params{archive} eq "no";
                $template->param(ctime => displaytime($pagectime{$page}));
+
+               if (exists $hooks{pagetemplate}) {
+                       foreach my $id (keys %{$hooks{pagetemplate}}) {
+                               $hooks{pagetemplate}{$id}{call}->($page, $template);
+                       }
+               }
+
                $ret.=$template->output;
+               $template->clear_params;
        }
        
        # TODO: should really add this to renderedfiles and call
index 41d096e0ea9cdd440eac14325112d643981944d2..d4b4e5db5f09ceb919228ce41f5ac253331d2c2f 100644 (file)
@@ -56,8 +56,10 @@ sub pagetemplate ($$) { #{{{
         my $page=shift;
         my $template=shift;
 
-       $template->param(meta => $meta{$page}) if exists $meta{$page};
-       $template->param(title => $title{$page}) if exists $title{$page};
+       $template->param(meta => $meta{$page})
+               if exists $meta{$page} && $template->query(name => "meta");
+       $template->param(title => $title{$page})
+               if exists $title{$page} && $template->query(name => "title");
 } # }}}
 
 1
index 94b37ca06ef034ea93445da6f27a21ef033ef127..8931e3fd4119edf69d859f70b829807c78269ff5 100644 (file)
@@ -32,7 +32,8 @@ sub pagetemplate ($$) { #{{{
        my $template=shift;
 
        # Add search box to page header.
-       $template->param(searchform => qq{
+       if ($template->query(name => "searchform")) {
+               $template->param(searchform => qq{
 <form method="get" action="$IkiWiki::config{cgiurl}" id="searchform">
 <div>
 <input type="text" name="phrase" value="" size="16" />
@@ -41,6 +42,7 @@ sub pagetemplate ($$) { #{{{
 </div>
 </form>
 });
+       }
 } #}}}
 
 sub delete (@) { #{{{
index 841d508bfcc33d87b8a7940a3ecd76ddb8f24d65..a6eddb019a51606bd6d92fa2927b4a5861d1b3ae 100644 (file)
@@ -6,10 +6,13 @@ use warnings;
 use strict;
 use IkiWiki;
 
-my %tag;
+my %tags;
 
 sub import { #{{{
-       IkiWiki::hook(type => "preprocess", id => "tag", call => \&preprocess);
+       IkiWiki::hook(type => "preprocess", id => "tag",
+               call => \&preprocess);
+       IkiWiki::hook(type => "pagetemplate", id => "tag",
+               call => \&pagetemplate);
 } # }}}
 
 sub preprocess (@) { #{{{
@@ -20,7 +23,9 @@ sub preprocess (@) { #{{{
        my $page = $params{page};
        delete $params{page};
 
+       $tags{$page} = [];
        foreach my $tag (keys %params) {
+               push @{$tags{$page}}, $tag;
                # hidden WikiLink
                push @{$IkiWiki::links{$page}}, $tag;
        }
@@ -28,4 +33,14 @@ sub preprocess (@) { #{{{
        return "";
 } # }}}
 
+sub pagetemplate ($$) { #{{{
+       my $page=shift;
+       my $template=shift;
+
+       $template->param(tags => join(', ', 
+                       map { IkiWiki::htmllink($page, $page, $_) } 
+                               @{$tags{$page}}))
+               if exists $tags{$page} && $template->query(name => "tags");
+} # }}}
+
 1
index eaa4c8de421b50a99b14fb3e8228a0ab293a005f..f4fe4723842d36dd23070113acff2677c1ab8664 100644 (file)
@@ -1,12 +1,17 @@
 ikiwiki (1.11) UNRELEASED; urgency=low
 
   * Patch from Enrico that
-    - allows preprocessor directives to have parameters with no specified
-      value
-    - fixes preprocessor directive parameter parsing so that
-      foo=bar baz now means "foo=bar" and a "baz" with no value
-    - Add a tag plugin that allows more easily tagging pages.
-      The meta plugin can also still be used for this.
+    - Adds a tag plugin that allows more easily tagging pages.
+      The meta plugin can also still be used for that, but the tag plugin
+      also lists a page's tags at the bottom of the page.
+    - Allows preprocessor directives to have parameters with no specified
+      value.
+    - Fixes preprocessor directive parameter parsing so that
+      foo=bar baz now means "foo=bar" and a "baz" with no value.
+  * Run pagetemplate hooks when inlining pages so that inlines pages also
+    list their tags.
+  * Make all plugins with pagetemplate hooks check that variables exist
+    on the template before setting them.
 
  -- Joey Hess <joeyh@debian.org>  Thu, 27 Jul 2006 17:03:09 -0400
 
index 5be90efdfb73be9a286ce234e0aad5e3fba367a2..abad875685e31b21722bc6415b4c505471ac357a 100644 (file)
@@ -96,9 +96,16 @@ languages to ikiwiki.
 Each time a page is rendered, a [[template|templates]] is filled out.
 This hook allows modifying that template. The function is passed the name
 of the page, and a `HTML::Template` object that is the template that will
-be used to generate the page. It can manipulate that template, the most
-common thing to do is probably to call $template->param() to add a new
-custom parameter to the template.
+be used to generate the page. It can manipulate that template object.
+
+The most common thing to do is probably to call $template->param() to add
+a new custom parameter to the template. Note that in order to be robust,
+it's a good idea to check whether the template has a variable before trying
+to set it, as setting a variable that's not present is an error.
+
+       if ($template->query(name => 'foo')) {
+               $template->param("foo" => "bar");
+       }
 
 ## sanitize
 
index a344d83709251d8ca7ae134f33c187b0b4ca3f74..7f427ec96c38651d3df9805c7795dcf0c2db5189 100644 (file)
@@ -38,4 +38,3 @@ Suggestions of ideas for plugins:
 All the kinds of plugins that blogging software has is also a possibility:
 
 * Blog post calendar
-* Tag stuff?
diff --git a/doc/todo/tags.mdwn b/doc/todo/tags.mdwn
new file mode 100644 (file)
index 0000000..af85027
--- /dev/null
@@ -0,0 +1,5 @@
+Stuff still needing to be done with tags:
+
+* Move the pages they link to into an automatic tag/ namespace?
+* Include tag info in the RSS feed.
+* Technorati tag support?
index bcb61335dccdfc5784b2fc11ff022401f15a2595..b470c55859d96cfe92c7ff5ae7878f8404752baa 100644 (file)
@@ -4,6 +4,9 @@
 <TMPL_VAR CONTENT>
 
 <p>
-<i>(posted <TMPL_VAR CTIME>)</i>
+<i>
+Posted <TMPL_VAR CTIME>
+<TMPL_IF NAME="TAGS">Tags: <TMPL_VAR TAGS></TMPL_IF>
+</i>
 </p>
 </div>
index 91f34b1d3b903697440145ffb3263cd4ae05df02..8527b197d1b816c0923dad710c29c0742b2b396f 100644 (file)
@@ -1,4 +1,7 @@
 <p>
 <TMPL_VAR PAGELINK><br />
-<i>(posted <TMPL_VAR CTIME>)</i>
+<i>
+Posted <TMPL_VAR CTIME>
+<!-- <TMPL_IF NAME="TAGS"><TMPL_VAR TAGS></TMPL_IF> -->
+</i>
 </p>
index ce92ab38ac6d97434a4edadb9794636432695fcb..8439ef8e48f8814fef198d86244469760a7aefa5 100644 (file)
@@ -62,6 +62,7 @@ Links:
 <span id="pageinfo">
 <!-- from <TMPL_VAR NAME=WIKINAME> -->
 Last edited <TMPL_VAR NAME=MTIME>
+<TMPL_IF NAME="TAGS">Tags: <TMPL_VAR TAGS></TMPL_IF>
 </span>
 </div>