From 9f1cd89bc2f33b1783bc300bc5eaebe4abcf393c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 25 Oct 2007 05:43:43 -0400 Subject: [PATCH] * Add handling of feeds for nested inlines, as well as support for a single page containing two different feeds. * Also fixed some places in inline that failed to use destpage correctly. --- IkiWiki/Plugin/inline.pm | 49 ++++++++++++++++------- debian/changelog | 5 ++- doc/bugs/multiple_rss_feeds_per_page.mdwn | 12 ++++++ 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 0b3d5e406..3d1458081 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -8,6 +8,9 @@ use Encode; use IkiWiki 2.00; use URI; +my %knownfeeds; +my %page_numfeeds; + sub import { #{{{ hook(type => "getopt", id => "inline", call => \&getopt); hook(type => "checkconfig", id => "inline", call => \&checkconfig); @@ -149,9 +152,25 @@ sub preprocess_inline (@) { #{{{ # that if they are removed or otherwise changed, the inline will be # sure to be updated. add_depends($params{page}, join(" or ", @list)); + + my $feednum=""; + + my $feedid=join(",", map { "$_=$params{$_}" } sort keys %params); + if (exists $knownfeeds{$feedid}) { + $feednum=$knownfeeds{$feedid}; + } + else { + if (exists $page_numfeeds{$params{destpage}}) { + $feednum=$knownfeeds{$feedid}=++$page_numfeeds{$params{destpage}}; + } + else { + $feednum=$knownfeeds{$feedid}=""; + $page_numfeeds{$params{destpage}}=1; + } + } - my $rssurl=basename(rsspage($params{page})); - my $atomurl=basename(atompage($params{page})); + my $rssurl=basename(rsspage($params{destpage}).$feednum); + my $atomurl=basename(atompage($params{destpage}).$feednum); my $ret=""; if ($config{cgiurl} && (exists $params{rootpage} || @@ -215,7 +234,7 @@ sub preprocess_inline (@) { #{{{ $template->param(have_actions => 1); $template->param(discussionlink => htmllink($page, - $params{page}, + $params{destpage}, gettext("Discussion"), noimageinline => 1, forcesubpage => 1)); @@ -228,7 +247,7 @@ sub preprocess_inline (@) { #{{{ } run_hooks(pagetemplate => sub { - shift->(page => $page, destpage => $params{page}, + shift->(page => $page, destpage => $params{destpage}, template => $template,); }); @@ -238,9 +257,9 @@ sub preprocess_inline (@) { #{{{ else { if (defined $type) { $ret.="\n". - linkify($page, $params{page}, - preprocess($page, $params{page}, - filter($page, $params{page}, + linkify($page, $params{destpage}, + preprocess($page, $params{destpage}, + filter($page, $params{destpage}, readfile(srcfile($file))))); } } @@ -256,19 +275,19 @@ sub preprocess_inline (@) { #{{{ } if ($rss) { - my $rssp=rsspage($params{page}); - will_render($params{page}, $rssp); + my $rssp=rsspage($params{destpage}).$feednum; + will_render($params{destpage}, $rssp); writefile($rssp, $config{destdir}, - genfeed("rss", $rssurl, $desc, $params{page}, @list)); - $toping{$params{page}}=1 unless $config{rebuild}; + genfeed("rss", $rssurl, $desc, $params{destpage}, @list)); + $toping{$params{destpage}}=1 unless $config{rebuild}; $feedlinks{$params{destpage}}=qq{}; } if ($atom) { - my $atomp=atompage($params{page}); - will_render($params{page}, $atomp); + my $atomp=atompage($params{destpage}).$feednum; + will_render($params{destpage}, $atomp); writefile($atomp, $config{destdir}, - genfeed("atom", $atomurl, $desc, $params{page}, @list)); - $toping{$params{page}}=1 unless $config{rebuild}; + genfeed("atom", $atomurl, $desc, $params{destpage}, @list)); + $toping{$params{destpage}}=1 unless $config{rebuild}; $feedlinks{$params{destpage}}=qq{}; } } diff --git a/debian/changelog b/debian/changelog index bc2ca4920..d5940163e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,8 +13,11 @@ ikiwiki (2.11) UNRELEASED; urgency=low * Ikiwiki has moved into a git repository. * postsparkline: Avoid a confusing error message if no pages match and instead show an empty graph. + * Add handling of feeds for nested inlines, as well as support for a + single page containing two different feeds. + * Also fixed some places in inline that failed to use destpage correctly. - -- Joey Hess Wed, 24 Oct 2007 22:58:51 -0400 + -- Joey Hess Thu, 25 Oct 2007 05:14:58 -0400 ikiwiki (2.10) unstable; urgency=low diff --git a/doc/bugs/multiple_rss_feeds_per_page.mdwn b/doc/bugs/multiple_rss_feeds_per_page.mdwn index 8d483b84f..f65d1884e 100644 --- a/doc/bugs/multiple_rss_feeds_per_page.mdwn +++ b/doc/bugs/multiple_rss_feeds_per_page.mdwn @@ -17,3 +17,15 @@ Josh Triplett suggests that the inline macro should take a parameter for the fee > > The result was that my whatsnew feed actually contains my Words2Nums > feed, or something. --[[joey]] + +> I've implemented autoincrementing unique feeds, the first one on a page +> is a .rss, next is .rss2, etc. +> +> There may be room for manual specification of feed basenames, but it is tricky to do that +> well. One problem is that if page foo adds a feed with basename bar, +> the resulting "foo_bar.rss" would have the same name as a feed for page +> foo_bar. (Assuming usedirs is not set.) This is also why I stuck the +> number on the end of the filename extension -- it's slightly ugly, but +> it avoids all such naming ambiguities. +> +> Anyway, I think this is [[done]] --[[Joey]] -- 2.44.0