* 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.)
master
joey 2006-08-04 00:01:51 +00:00
parent e8b39b0941
commit c5919df5f3
11 changed files with 50 additions and 19 deletions

View File

@ -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;
} #}}}

View File

@ -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}}]);

View File

@ -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);

View File

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

8
debian/changelog vendored
View File

@ -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..
* 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 17:29:51 -0400
-- Joey Hess <joeyh@debian.org> Thu, 3 Aug 2006 18:45:36 -0400
ikiwiki (1.15) unstable; urgency=low

View File

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

View File

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

View File

@ -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>"]]

View File

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

View File

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

View File

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