]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/commitdiff
inline: add pagenames parameter
authorSimon McVittie <smcv@ http://smcv.pseudorandom.co.uk/>
Tue, 16 Jun 2009 16:13:19 +0000 (17:13 +0100)
committerSimon McVittie <smcv@ http://smcv.pseudorandom.co.uk/>
Tue, 16 Jun 2009 16:13:19 +0000 (17:13 +0100)
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
doc/ikiwiki/directive/inline.mdwn

index 9d5ebc34daaeb6aa942f41b1424ece4ba00c9036..e7d6f250e5cfee1d563bfb40bdf8d541cb7aad1e 100644 (file)
@@ -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})) {
index 8afd65a05e84541fbb13e69a9b870c79579e8d73..9c55e07c2ec95805c51f4fed1b1265ad27b51b6d 100644 (file)
@@ -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"]]