summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-08-04 00:01:51 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-08-04 00:01:51 +0000
commitc5919df5f3697e0f8968e2b8f49cd15c1e0aa412 (patch)
treee4e6047286cd5144e6048e6c1921e9b9027f499c
parente8b39b094116e8b50cf12fe56b9c6a04f05683e5 (diff)
* Make aggregator save permalinks and author name to pages as metadata.
* Add permalink and author support to meta plugin, affecting RSS feeds and blog pages. * Change titlepage() to encode utf-8 alnum characters. This is necessary to avoid UTF-8 creeping into filenames in urls. (There are still some other ways that it can get in.)
-rw-r--r--IkiWiki.pm4
-rw-r--r--IkiWiki/Plugin/aggregate.pm3
-rw-r--r--IkiWiki/Plugin/inline.pm3
-rw-r--r--IkiWiki/Plugin/meta.pm13
-rw-r--r--debian/changelog10
-rw-r--r--doc/plugins/meta.mdwn4
-rw-r--r--doc/todo/aggregation.mdwn3
-rw-r--r--templates/aggregatepost.tmpl13
-rw-r--r--templates/inlinepage.tmpl6
-rw-r--r--templates/rssitem.tmpl9
-rw-r--r--templates/rsspage.tmpl3
11 files changed, 51 insertions, 20 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index a732be999..1a5cf52dd 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -272,7 +272,9 @@ sub pagetitle ($) { #{{{
sub titlepage ($) { #{{{
my $title=shift;
$title=~y/ /_/;
- $title=~s/([^-[:alnum:]_:+\/.])/"__".ord($1)."__"/eg;
+ # Note: [:alnum:] is not used here, on purpose; unicode
+ # not allowed in urls.
+ $title=~s/([^-A-Za-z0-9_:+\/.])/"__".ord($1)."__"/eg;
return $title;
} #}}}
diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index d6592fef3..c6ed6b209 100644
--- a/IkiWiki/Plugin/aggregate.pm
+++ b/IkiWiki/Plugin/aggregate.pm
@@ -289,9 +289,8 @@ sub add_page (@) { #{{{
$template->param(title => $params{title})
if defined $params{title} && length($params{title});
$template->param(content => htmlescape(htmlabs($params{content}, $feed->{feedurl})));
- $template->param(url => $feed->{url});
$template->param(name => $feed->{name});
- $template->param(link => urlabs($params{link}, $feed->{feedurl}))
+ $template->param(permalink => urlabs($params{link}, $feed->{feedurl}))
if defined $params{link};
if (ref $feed->{tags}) {
$template->param(tags => [map { tag => $_ }, @{$feed->{tags}}]);
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index d8f2ca0d8..71e71c02e 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -173,6 +173,7 @@ sub genrss ($@) { #{{{
$itemtemplate->param(
title => pagetitle(basename($p)),
url => "$config{url}/$renderedfiles{$p}",
+ permalink => "$config{url}/$renderedfiles{$p}",
pubdate => date_822($pagectime{$p}),
content => absolute_urls(get_inline_content($p, $page), $url),
);
@@ -180,6 +181,7 @@ sub genrss ($@) { #{{{
shift->(page => $p, destpage => $page,
template => $itemtemplate);
});
+
$content.=$itemtemplate->output;
$itemtemplate->clear_params;
}
@@ -191,7 +193,6 @@ sub genrss ($@) { #{{{
pageurl => $url,
content => $content,
);
-
run_hooks(pagetemplate => sub {
shift->(page => $page, destpage => $page,
template => $template);
diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm
index bac163469..b6226ed88 100644
--- a/IkiWiki/Plugin/meta.pm
+++ b/IkiWiki/Plugin/meta.pm
@@ -8,6 +8,8 @@ use IkiWiki;
my %meta;
my %title;
+my %permalink;
+my %author;
sub import { #{{{
IkiWiki::hook(type => "preprocess", id => "meta",
@@ -57,9 +59,15 @@ sub preprocess (@) { #{{{
elsif ($key eq 'title') {
$title{$page}=$value;
}
+ elsif ($key eq 'permalink') {
+ $permalink{$page}=$value;
+ }
else {
$meta{$page}.="<meta name=\"".encode_entities($key).
"\" content=\"".encode_entities($value)."\" />\n";
+ if ($key eq 'author') {
+ $author{$page}=$value;
+ }
}
return "";
@@ -74,6 +82,11 @@ sub pagetemplate (@) { #{{{
if exists $meta{$page} && $template->query(name => "meta");
$template->param(title => $title{$page})
if exists $title{$page} && $template->query(name => "title");
+ $template->param(permalink => $permalink{$page})
+ if exists $permalink{$page} && $template->query(name => "permalink");
+ $template->param(author => $author{$page})
+ if exists $author{$page} && $template->query(name => "author");
+
} # }}}
1
diff --git a/debian/changelog b/debian/changelog
index ab053e496..aca30fc81 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,8 +4,14 @@ ikiwiki (1.16) UNRELEASED; urgency=low
the current support is a crude hack due to limitations of XML::Feed:
xml:base is not supported, neither is Content-Location. And of course,
relative links in RSS feeds are ill-undefined..
-
- -- Joey Hess <joeyh@debian.org> Thu, 3 Aug 2006 17:29:51 -0400
+ * Make aggregator save permalinks and author name to pages as metadata.
+ * Add permalink and author support to meta plugin, affecting RSS feeds
+ and blog pages.
+ * Change titlepage() to encode utf-8 alnum characters. This is necessary
+ to avoid UTF-8 creeping into filenames in urls. (There are still
+ some other ways that it can get in.)
+
+ -- Joey Hess <joeyh@debian.org> Thu, 3 Aug 2006 18:45:36 -0400
ikiwiki (1.15) unstable; urgency=low
diff --git a/doc/plugins/meta.mdwn b/doc/plugins/meta.mdwn
index 32392ed54..cacb462c9 100644
--- a/doc/plugins/meta.mdwn
+++ b/doc/plugins/meta.mdwn
@@ -36,6 +36,10 @@ You can use any field names you like, but here are some predefined ones:
Specifies the author of a page.
+* permalink
+
+ Specifies the permalink to the page, for use in RSS feeds.
+
If the field is not treated specially (as the link and title fields are),
the metadata will be written to the generated html page as a &lt;meta&gt;
header.
diff --git a/doc/todo/aggregation.mdwn b/doc/todo/aggregation.mdwn
index dec242ea6..53b3133e2 100644
--- a/doc/todo/aggregation.mdwn
+++ b/doc/todo/aggregation.mdwn
@@ -1,4 +1 @@
* Still need to support feed expiry.
-* Need to store page author metadata and include it in the rss feed.
- Permalink to? Also, that stuff could be presented better in the html blog
- view, also using the metadata.
diff --git a/templates/aggregatepost.tmpl b/templates/aggregatepost.tmpl
index 689a23341..50c09fff8 100644
--- a/templates/aggregatepost.tmpl
+++ b/templates/aggregatepost.tmpl
@@ -1,15 +1,12 @@
<TMPL_VAR CONTENT>
-<p>
-<i>
-From <a href="<TMPL_VAR URL>"><TMPL_VAR NAME></a>
-<TMPL_IF NAME="LINK">
-; <a href="<TMPL_VAR LINK>">permalink</a>
-</TMPL_IF>
-</i>
-</p>
+<br/>
<TMPL_LOOP NAME="TAGS">
[[tag <TMPL_VAR TAG>]]
</TMPL_LOOP>
<TMPL_IF NAME="TITLE">
[[meta title="<TMPL_VAR NAME="TITLE" ESCAPE=HTML>"]]
</TMPL_IF>
+<TMPL_IF NAME="PERMALINK">
+[[meta permalink="<TMPL_VAR NAME="PERMALINK" ESCAPE=HTML>"]]
+</TMPL_IF>
+[[meta author="<TMPL_VAR NAME="NAME" ESCAPE=HTML>"]]
diff --git a/templates/inlinepage.tmpl b/templates/inlinepage.tmpl
index c2ddff867..6840f3681 100644
--- a/templates/inlinepage.tmpl
+++ b/templates/inlinepage.tmpl
@@ -5,6 +5,12 @@
<span class="pageinfo">
Posted <TMPL_VAR CTIME>
+<TMPL_IF NAME="AUTHOR">
+by <TMPL_VAR NAME=AUTHOR>
+</TMPL_IF>
+<TMPL_IF NAME="PERMALINK">
+(<a href="<TMPL_VAR NAME=PERMALINK>">permalink</a>)
+</TMPL_IF>
</span>
<span class="tags">
diff --git a/templates/rssitem.tmpl b/templates/rssitem.tmpl
index 421600591..c7e587e1c 100644
--- a/templates/rssitem.tmpl
+++ b/templates/rssitem.tmpl
@@ -1,10 +1,15 @@
<item>
+ <TMPL_IF NAME="AUTHOR">
+ <title><TMPL_VAR AUTHOR ESCAPE=HTML>: <TMPL_VAR TITLE ESCAPE=HTML></title>
+ <dc:creator><TMPL_VAR AUTHOR ESCAPE=HTML></dc:creator>
+ <TMPL_ELSE>
<title><TMPL_VAR TITLE ESCAPE=HTML></title>
+ </TMPL_IF>
<guid><TMPL_VAR URL></guid>
- <link><TMPL_VAR URL></link>
+ <link><TMPL_VAR PERMALINK></link>
<TMPL_IF NAME="CATEGORIES">
<TMPL_LOOP NAME="CATEGORIES">
- <category><TMPL_VAR NAME=CATEGORY></category>
+ <category><TMPL_VAR CATEGORY></category>
</TMPL_LOOP>
</TMPL_IF>
<pubDate><TMPL_VAR PUBDATE></pubDate>
diff --git a/templates/rsspage.tmpl b/templates/rsspage.tmpl
index e7676ebbd..d78f94edf 100644
--- a/templates/rsspage.tmpl
+++ b/templates/rsspage.tmpl
@@ -1,5 +1,6 @@
<?xml version="1.0"?>
-<rss version="2.0">
+<rss version="2.0"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title><TMPL_VAR TITLE ESCAPE=HTML></title>
<link><TMPL_VAR PAGEURL></link>