From e8770131740c83b21197d8a260db20c1c3f48020 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Tue, 16 Jun 2009 17:13:19 +0100 Subject: [PATCH] inline: add pagenames parameter If given instead of pages, this is interpreted as a space-separated list of links to pages (with the same LinkingRules as in a WikiLink), and they are inlined in exactly the order given. The sort and pages parameters cannot be used in conjunction with this one. --- IkiWiki/Plugin/inline.pm | 57 ++++++++++++++++++++----------- doc/ikiwiki/directive/inline.mdwn | 5 +++ 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 9d5ebc34d..e7d6f250e 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -151,7 +151,7 @@ my %feedlinks; sub preprocess_inline (@) { my %params=@_; - if (! exists $params{pages}) { + if (! exists $params{pages} && ! exists $params{pagenames}) { error gettext("missing pages parameter"); } my $raw=yesno($params{raw}); @@ -183,28 +183,47 @@ sub preprocess_inline (@) { $params{template} = $archive ? "archivepage" : "inlinepage"; } - my @list=pagespec_match_list( - [ grep { $_ ne $params{page} } keys %pagesources ], - $params{pages}, location => $params{page}); + my @list; - if (exists $params{sort} && $params{sort} eq 'title') { - @list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list; - } - elsif (exists $params{sort} && $params{sort} eq 'title_natural') { - eval q{use Sort::Naturally}; - if ($@) { - error(gettext("Sort::Naturally needed for title_natural sort")); + if (exists $params{pagenames}) { + + foreach my $p (qw(sort pages)) { + if (exists $params{$p}) { + error sprintf(gettext("the %s and %s parameters cannot be used together"), + "pagenames", $p); + } } - @list=sort { Sort::Naturally::ncmp(pagetitle(basename($a)), pagetitle(basename($b))) } @list; - } - elsif (exists $params{sort} && $params{sort} eq 'mtime') { - @list=sort { $pagemtime{$b} <=> $pagemtime{$a} } @list; - } - elsif (! exists $params{sort} || $params{sort} eq 'age') { - @list=sort { $pagectime{$b} <=> $pagectime{$a} } @list; + + @list = split ' ', $params{pagenames}; + my $_; + @list = map { bestlink($params{page}, $_) } @list; + + $params{pages} = join(" or ", @list); } else { - error sprintf(gettext("unknown sort type %s"), $params{sort}); + @list = pagespec_match_list( + [ grep { $_ ne $params{page} } keys %pagesources ], + $params{pages}, location => $params{page}); + + if (exists $params{sort} && $params{sort} eq 'title') { + @list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list; + } + elsif (exists $params{sort} && $params{sort} eq 'title_natural') { + eval q{use Sort::Naturally}; + if ($@) { + error(gettext("Sort::Naturally needed for title_natural sort")); + } + @list=sort { Sort::Naturally::ncmp(pagetitle(basename($a)), pagetitle(basename($b))) } @list; + } + elsif (exists $params{sort} && $params{sort} eq 'mtime') { + @list=sort { $pagemtime{$b} <=> $pagemtime{$a} } @list; + } + elsif (! exists $params{sort} || $params{sort} eq 'age') { + @list=sort { $pagectime{$b} <=> $pagectime{$a} } @list; + } + else { + error sprintf(gettext("unknown sort type %s"), $params{sort}); + } } if (yesno($params{reverse})) { diff --git a/doc/ikiwiki/directive/inline.mdwn b/doc/ikiwiki/directive/inline.mdwn index 8afd65a05..9c55e07c2 100644 --- a/doc/ikiwiki/directive/inline.mdwn +++ b/doc/ikiwiki/directive/inline.mdwn @@ -113,6 +113,11 @@ Here are some less often needed parameters: For example, set "feedfile=feed" to cause it to generate `page/feed.atom` and/or `page/feed.rss`. This option is not supported if the wiki is configured not to use `usedirs`. +* `pagenames` - If given instead of `pages`, this is interpreted as a + space-separated list of links to pages (with the same + [[SubPage/LinkingRules]] as in a [[ikiwiki/WikiLink]]), and they are inlined + in exactly the order given: the `sort` and `pages` parameters cannot be used + in conjunction with this one. [[!meta robots="noindex, follow"]] -- 2.39.5