aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-07-27 23:08:03 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-07-27 23:08:03 +0000
commit20eacc2c1f74d0ab617dca36378a35920e313a23 (patch)
treed0bcea3c5a65bc77d209a6341fc0f8b2ffa470c3
parent5017ffd8a512c09d3c34764709791812acfc5515 (diff)
downloadikiwiki-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.pm8
-rw-r--r--IkiWiki/Plugin/meta.pm6
-rw-r--r--IkiWiki/Plugin/search.pm4
-rw-r--r--IkiWiki/Plugin/tag.pm19
-rw-r--r--debian/changelog17
-rw-r--r--doc/plugins/write.mdwn13
-rw-r--r--doc/todo/plugin.mdwn1
-rw-r--r--doc/todo/tags.mdwn5
-rw-r--r--templates/inlinepage.tmpl5
-rw-r--r--templates/inlinepagetitle.tmpl5
-rw-r--r--templates/page.tmpl1
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>