diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-08-04 00:01:51 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-08-04 00:01:51 +0000 |
commit | c5919df5f3697e0f8968e2b8f49cd15c1e0aa412 (patch) | |
tree | e4e6047286cd5144e6048e6c1921e9b9027f499c | |
parent | e8b39b094116e8b50cf12fe56b9c6a04f05683e5 (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.pm | 4 | ||||
-rw-r--r-- | IkiWiki/Plugin/aggregate.pm | 3 | ||||
-rw-r--r-- | IkiWiki/Plugin/inline.pm | 3 | ||||
-rw-r--r-- | IkiWiki/Plugin/meta.pm | 13 | ||||
-rw-r--r-- | debian/changelog | 10 | ||||
-rw-r--r-- | doc/plugins/meta.mdwn | 4 | ||||
-rw-r--r-- | doc/todo/aggregation.mdwn | 3 | ||||
-rw-r--r-- | templates/aggregatepost.tmpl | 13 | ||||
-rw-r--r-- | templates/inlinepage.tmpl | 6 | ||||
-rw-r--r-- | templates/rssitem.tmpl | 9 | ||||
-rw-r--r-- | templates/rsspage.tmpl | 3 |
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 <meta> 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> |