diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-07-27 23:08:03 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-07-27 23:08:03 +0000 |
commit | 20eacc2c1f74d0ab617dca36378a35920e313a23 (patch) | |
tree | d0bcea3c5a65bc77d209a6341fc0f8b2ffa470c3 | |
parent | 5017ffd8a512c09d3c34764709791812acfc5515 (diff) | |
download | ikiwiki-20eacc2c1f74d0ab617dca36378a35920e313a23.tar ikiwiki-20eacc2c1f74d0ab617dca36378a35920e313a23.tar.gz |
- 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.
-rw-r--r-- | IkiWiki/Plugin/inline.pm | 8 | ||||
-rw-r--r-- | IkiWiki/Plugin/meta.pm | 6 | ||||
-rw-r--r-- | IkiWiki/Plugin/search.pm | 4 | ||||
-rw-r--r-- | IkiWiki/Plugin/tag.pm | 19 | ||||
-rw-r--r-- | debian/changelog | 17 | ||||
-rw-r--r-- | doc/plugins/write.mdwn | 13 | ||||
-rw-r--r-- | doc/todo/plugin.mdwn | 1 | ||||
-rw-r--r-- | doc/todo/tags.mdwn | 5 | ||||
-rw-r--r-- | templates/inlinepage.tmpl | 5 | ||||
-rw-r--r-- | templates/inlinepagetitle.tmpl | 5 | ||||
-rw-r--r-- | templates/page.tmpl | 1 |
11 files changed, 67 insertions, 17 deletions
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 08126c4e6..749e39fb6 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -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 diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm index 41d096e0e..d4b4e5db5 100644 --- a/IkiWiki/Plugin/meta.pm +++ b/IkiWiki/Plugin/meta.pm @@ -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 diff --git a/IkiWiki/Plugin/search.pm b/IkiWiki/Plugin/search.pm index 94b37ca06..8931e3fd4 100644 --- a/IkiWiki/Plugin/search.pm +++ b/IkiWiki/Plugin/search.pm @@ -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 (@) { #{{{ diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm index 841d508bf..a6eddb019 100644 --- a/IkiWiki/Plugin/tag.pm +++ b/IkiWiki/Plugin/tag.pm @@ -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 diff --git a/debian/changelog b/debian/changelog index eaa4c8de4..f4fe47238 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index 5be90efdf..abad87568 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -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 diff --git a/doc/todo/plugin.mdwn b/doc/todo/plugin.mdwn index a344d8370..7f427ec96 100644 --- a/doc/todo/plugin.mdwn +++ b/doc/todo/plugin.mdwn @@ -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 index 000000000..af8502738 --- /dev/null +++ b/doc/todo/tags.mdwn @@ -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? diff --git a/templates/inlinepage.tmpl b/templates/inlinepage.tmpl index bcb61335d..b470c5585 100644 --- a/templates/inlinepage.tmpl +++ b/templates/inlinepage.tmpl @@ -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> diff --git a/templates/inlinepagetitle.tmpl b/templates/inlinepagetitle.tmpl index 91f34b1d3..8527b197d 100644 --- a/templates/inlinepagetitle.tmpl +++ b/templates/inlinepagetitle.tmpl @@ -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> diff --git a/templates/page.tmpl b/templates/page.tmpl index ce92ab38a..8439ef8e4 100644 --- a/templates/page.tmpl +++ b/templates/page.tmpl @@ -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> |