- 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.
master
joey 2006-07-27 23:08:03 +00:00
parent 5017ffd8a5
commit 20eacc2c1f
11 changed files with 67 additions and 17 deletions

View File

@ -80,7 +80,15 @@ sub preprocess_inline (@) { #{{{
$template->param(content => get_inline_content($params{page}, $page)) $template->param(content => get_inline_content($params{page}, $page))
if $params{archive} eq "no"; if $params{archive} eq "no";
$template->param(ctime => displaytime($pagectime{$page})); $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; $ret.=$template->output;
$template->clear_params;
} }
# TODO: should really add this to renderedfiles and call # TODO: should really add this to renderedfiles and call

View File

@ -56,8 +56,10 @@ sub pagetemplate ($$) { #{{{
my $page=shift; my $page=shift;
my $template=shift; my $template=shift;
$template->param(meta => $meta{$page}) if exists $meta{$page}; $template->param(meta => $meta{$page})
$template->param(title => $title{$page}) if exists $title{$page}; if exists $meta{$page} && $template->query(name => "meta");
$template->param(title => $title{$page})
if exists $title{$page} && $template->query(name => "title");
} # }}} } # }}}
1 1

View File

@ -32,7 +32,8 @@ sub pagetemplate ($$) { #{{{
my $template=shift; my $template=shift;
# Add search box to page header. # 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"> <form method="get" action="$IkiWiki::config{cgiurl}" id="searchform">
<div> <div>
<input type="text" name="phrase" value="" size="16" /> <input type="text" name="phrase" value="" size="16" />
@ -41,6 +42,7 @@ sub pagetemplate ($$) { #{{{
</div> </div>
</form> </form>
}); });
}
} #}}} } #}}}
sub delete (@) { #{{{ sub delete (@) { #{{{

View File

@ -6,10 +6,13 @@ use warnings;
use strict; use strict;
use IkiWiki; use IkiWiki;
my %tag; my %tags;
sub import { #{{{ 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 (@) { #{{{ sub preprocess (@) { #{{{
@ -20,7 +23,9 @@ sub preprocess (@) { #{{{
my $page = $params{page}; my $page = $params{page};
delete $params{page}; delete $params{page};
$tags{$page} = [];
foreach my $tag (keys %params) { foreach my $tag (keys %params) {
push @{$tags{$page}}, $tag;
# hidden WikiLink # hidden WikiLink
push @{$IkiWiki::links{$page}}, $tag; push @{$IkiWiki::links{$page}}, $tag;
} }
@ -28,4 +33,14 @@ sub preprocess (@) { #{{{
return ""; 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 1

17
debian/changelog vendored
View File

@ -1,12 +1,17 @@
ikiwiki (1.11) UNRELEASED; urgency=low ikiwiki (1.11) UNRELEASED; urgency=low
* Patch from Enrico that * Patch from Enrico that
- allows preprocessor directives to have parameters with no specified - Adds a tag plugin that allows more easily tagging pages.
value The meta plugin can also still be used for that, but the tag plugin
- fixes preprocessor directive parameter parsing so that also lists a page's tags at the bottom of the page.
foo=bar baz now means "foo=bar" and a "baz" with no value - Allows preprocessor directives to have parameters with no specified
- Add a tag plugin that allows more easily tagging pages. value.
The meta plugin can also still be used for this. - 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 -- Joey Hess <joeyh@debian.org> Thu, 27 Jul 2006 17:03:09 -0400

View File

@ -96,9 +96,16 @@ languages to ikiwiki.
Each time a page is rendered, a [[template|templates]] is filled out. Each time a page is rendered, a [[template|templates]] is filled out.
This hook allows modifying that template. The function is passed the name 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 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 be used to generate the page. It can manipulate that template object.
common thing to do is probably to call $template->param() to add a new
custom parameter to the template. 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 ## sanitize

View File

@ -38,4 +38,3 @@ Suggestions of ideas for plugins:
All the kinds of plugins that blogging software has is also a possibility: All the kinds of plugins that blogging software has is also a possibility:
* Blog post calendar * Blog post calendar
* Tag stuff?

View File

@ -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?

View File

@ -4,6 +4,9 @@
<TMPL_VAR CONTENT> <TMPL_VAR CONTENT>
<p> <p>
<i>(posted <TMPL_VAR CTIME>)</i> <i>
Posted <TMPL_VAR CTIME>
<TMPL_IF NAME="TAGS">Tags: <TMPL_VAR TAGS></TMPL_IF>
</i>
</p> </p>
</div> </div>

View File

@ -1,4 +1,7 @@
<p> <p>
<TMPL_VAR PAGELINK><br /> <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> </p>

View File

@ -62,6 +62,7 @@ Links:
<span id="pageinfo"> <span id="pageinfo">
<!-- from <TMPL_VAR NAME=WIKINAME> --> <!-- from <TMPL_VAR NAME=WIKINAME> -->
Last edited <TMPL_VAR NAME=MTIME> Last edited <TMPL_VAR NAME=MTIME>
<TMPL_IF NAME="TAGS">Tags: <TMPL_VAR TAGS></TMPL_IF>
</span> </span>
</div> </div>