aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-07-29 07:25:17 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-07-29 07:25:17 +0000
commit267f98e2e116739872cafc6bb712280c31376705 (patch)
tree1bfd114b014f21d7bebd67d8e94f2042335c84d5
parenta0653933d324f30838fe04d5f9aaab8b130014b2 (diff)
downloadikiwiki-267f98e2e116739872cafc6bb712280c31376705.tar
ikiwiki-267f98e2e116739872cafc6bb712280c31376705.tar.gz
* Put categories in rss feeds for tagged items.
-rw-r--r--IkiWiki/Plugin/inline.pm12
-rw-r--r--IkiWiki/Plugin/tag.pm38
-rw-r--r--debian/changelog3
-rw-r--r--doc/features.mdwn4
-rw-r--r--doc/plugins/tag.mdwn10
-rw-r--r--doc/plugins/write.mdwn13
-rw-r--r--doc/todo/tags.mdwn11
-rw-r--r--templates/rsspage.tmpl9
8 files changed, 72 insertions, 28 deletions
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 06c4a3737..1ea347b08 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -152,7 +152,8 @@ sub genrss ($@) { #{{{
my $url="$config{url}/".htmlpage($page);
- my $template=template("rsspage.tmpl", blind_cache => 1);
+ my $template=template("rsspage.tmpl", blind_cache => 1,
+ die_on_bad_params => 0);
my @items;
foreach my $p (@pages) {
@@ -161,6 +162,7 @@ sub genrss ($@) { #{{{
itemurl => "$config{url}/$renderedfiles{$p}",
itempubdate => date_822($pagectime{$p}),
itemcontent => absolute_urls(get_inline_content($p, $page), $url),
+ page => $p, # used by category adding code in tag plugin
} if exists $renderedfiles{$p};
}
@@ -170,6 +172,14 @@ sub genrss ($@) { #{{{
items => \@items,
);
+ foreach my $id (keys %{$hooks{pagetemplate}}) {
+ $hooks{pagetemplate}{$id}{call}->(
+ page => $page,
+ destpage => $page,
+ template => $template,
+ );
+ }
+
return $template->output;
} #}}}
diff --git a/IkiWiki/Plugin/tag.pm b/IkiWiki/Plugin/tag.pm
index 289b48b87..2aa70d406 100644
--- a/IkiWiki/Plugin/tag.pm
+++ b/IkiWiki/Plugin/tag.pm
@@ -23,6 +23,17 @@ sub getopt () { #{{{
GetOptions("tagbase=s" => \$IkiWiki::config{tagbase});
} #}}}
+sub tagpage ($) { #{{{
+ my $tag=shift;
+
+ if (exists $IkiWiki::config{tagbase} &&
+ defined $IkiWiki::config{tagbase}) {
+ $tag=$IkiWiki::config{tagbase}."/".$tag;
+ }
+
+ return $tag;
+} #}}}
+
sub preprocess (@) { #{{{
if (! @_) {
return "";
@@ -34,13 +45,9 @@ sub preprocess (@) { #{{{
$tags{$page} = [];
foreach my $tag (keys %params) {
- if (exists $IkiWiki::config{tagbase} &&
- defined $IkiWiki::config{tagbase}) {
- $tag=$IkiWiki::config{tagbase}."/".$tag;
- }
push @{$tags{$page}}, $tag;
# hidden WikiLink
- push @{$IkiWiki::links{$page}}, $tag;
+ push @{$IkiWiki::links{$page}}, tagpage($tag);
}
return "";
@@ -53,9 +60,26 @@ sub pagetemplate (@) { #{{{
my $template=$params{template};
$template->param(tags => [
- map { link => IkiWiki::htmllink($page, $destpage, $_) },
- @{$tags{$page}}
+ map {
+ link => IkiWiki::htmllink($page, $destpage, tagpage($_))
+ }, @{$tags{$page}}
]) if exists $tags{$page} && @{$tags{$page}} && $template->query(name => "tags");
+
+ if ($template->query(name => "items")) {
+ # It's an rss template. Modify each item in the feed,
+ # adding any categories based on the page for that item.
+ foreach my $item (@{$template->param("items")}) {
+ my $p=$item->{page};
+ if (exists $tags{$p} && @{$tags{$p}}) {
+ $item->{categories}=[];
+ foreach my $tag (@{$tags{$p}}) {
+ push @{$item->{categories}}, {
+ category => $tag,
+ };
+ }
+ }
+ }
+ }
} # }}}
1
diff --git a/debian/changelog b/debian/changelog
index 2edb343e3..015c16ff1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,8 +3,9 @@ ikiwiki (1.12) UNRELEASED; urgency=low
* Add getopt hook type, this allows plugins to add new command-line options.
* Add --tagbase option to tag plugin.
* Add exclude option in setup files, works same as --exclude.
+ * Put categories in rss feeds for tagged items.
- -- Joey Hess <joeyh@debian.org> Fri, 28 Jul 2006 13:47:34 -0400
+ -- Joey Hess <joeyh@debian.org> Sat, 29 Jul 2006 02:58:23 -0400
ikiwiki (1.11) unstable; urgency=low
diff --git a/doc/features.mdwn b/doc/features.mdwn
index 1b09a3274..a43cd1c9a 100644
--- a/doc/features.mdwn
+++ b/doc/features.mdwn
@@ -54,7 +54,9 @@ Some of ikiwiki's features:
* [[tags]]
- You can tag pages and use these tags in various ways.
+ You can tag pages and use these tags in various ways. Tags will show
+ up in the ways you'd expect, like at the bottom of pages, in blogs, and
+ in rss feeds.
* Fast compiler
diff --git a/doc/plugins/tag.mdwn b/doc/plugins/tag.mdwn
index 517bbaa37..de89bf4e7 100644
--- a/doc/plugins/tag.mdwn
+++ b/doc/plugins/tag.mdwn
@@ -4,13 +4,13 @@ This plugin allows tagging pages. List tags as follows:
The tags work the same as if you had put a (hidden) [[WikiLink]] on the page
for each tag, so you can use a [[GlobList]] to link to all pages that are
-tagged with a given tag, for example.
+tagged with a given tag, for example. The tags will also show up on blog
+entries and at the bottom of the tagged pages, as well as in rss feeds.
This plugin has a configuration option. Set --tagbase=tag and all tags will
-be located inside a "tag" subdirectory, so in the above example, the tags
-are really set to tag/tech, tag/life, and tag/linux. This is a useful way
-to avoid having to write the full path to tags, if you want to keep them
-grouped together out of the way.
+be located inside a "tag" subdirectory, This is a useful way to avoid having
+to write the full path to tags, if you want to keep them grouped together out
+of the way.
This plugin is included in ikiwiki, but is not enabled by default. If it is
enabled, you'll see a note below that this page is tagged with the "tags"
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index 32a5ce51b..93c6d1d5c 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -107,12 +107,13 @@ languages to ikiwiki.
IkiWiki::hook(type => "pagetemplate", id => "foo", call => \&pagetemplate);
-Each time a page is rendered, a [[template|templates]] is filled out.
-This hook allows modifying that template. The function is passed named
-parameters. The "page" and "destpage" parameters are the same as for a
-preprocess hook. The "template" parameter is a `HTML::Template` object that
-is the template that will be used to generate the page. The function
-can manipulate that template object.
+Each time a page (or part of a blog page, or an rss feed) is rendered, a
+[[template|templates]] is filled out. This hook allows modifying that
+template. The function is passed named parameters. The "page" and
+"destpage" parameters are the same as for a preprocess hook. The "template"
+parameter is a `HTML::Template` object that is the template that will be
+used to generate the page. The function 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,
diff --git a/doc/todo/tags.mdwn b/doc/todo/tags.mdwn
index af8502738..7309ee614 100644
--- a/doc/todo/tags.mdwn
+++ b/doc/todo/tags.mdwn
@@ -1,5 +1,10 @@
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?
+* It's unfortunate that the rss category (tag) support doesn't include
+ a domain="" attribute in the category elements. That would let readers
+ know how to follow back to the tag page in the wiki. However, the domain
+ attribute is specified to be the base url, to which the category is just
+ appended. So there's no way to add ".html", so the url won't be right.
+
+ This is one good argument for changing ikiwiki so that pages are all
+ dir/index.html, then a link to just "dir" works.
diff --git a/templates/rsspage.tmpl b/templates/rsspage.tmpl
index 4fe15d491..55b1222ac 100644
--- a/templates/rsspage.tmpl
+++ b/templates/rsspage.tmpl
@@ -7,12 +7,13 @@
<TMPL_LOOP NAME="ITEMS">
<item>
<title><TMPL_VAR ITEMTITLE ESCAPE=HTML></title>
- <TMPL_IF NAME="ITEMGUID">
- <guid isPermaLink="false"><TMPL_VAR ITEMGUID></guid>
- <TMPL_ELSE>
<guid><TMPL_VAR ITEMURL></guid>
- </TMPL_IF>
<link><TMPL_VAR ITEMURL></link>
+ <TMPL_IF NAME="CATEGORIES">
+ <TMPL_LOOP NAME="CATEGORIES">
+ <category><TMPL_VAR NAME=CATEGORY></category>
+ </TMPL_LOOP>
+ </TMPL_IF>
<pubDate><TMPL_VAR ITEMPUBDATE></pubDate>
<description><![CDATA[<TMPL_VAR ITEMCONTENT>]]></description>
</item>