The inline plugin has a sort="title"
option that causes the pages in the list to be sorted by title rather than creation time. The plugins list on this wiki was recently changed to use this option. If you look at the plugin page, you'll notice that it doesn't look correctly sorted. e.g. attach (third party plugin)
falls between conditional
and default content for *copyright* and *license*
.
I think the problem here is that the pages are being sorted by their path, whereas only the basename is displayed. This makes the example above:
- plugins/conditional
- plugins/contrib/attach
- plugins/contrib/default content for copyright and license
and now you can see why it is ordered that way, and why later on we get:
- plugins/contrib/unixauth (third party plugin)
- plugins/creole
which appears to list unixauth
before creole
.
I'm not sure what the best fix is. One fix would be to add another sort option, sort="path"
, that would use the current (broken) sort by title. Then add a true sort="title"
that actually sorts on the title. It might also be interesting to modify the sort=path to actually list the full path in the links - that way it would be obvious how it is sorted. Or you could ignore the idea for sort="path"
, and tell people to use map for that.
--Will
And here is a patch for this. It makes sort=title
actually sort on the title, and adds sort=path
if you really want to sort on the path. sort=path
still only displays titles. Just use map if you want more.
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 9c336e7..99f6de3 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -185,9 +185,12 @@ sub preprocess_inline (@) {
}
}
- if (exists $params{sort} && $params{sort} eq 'title') {
+ if (exists $params{sort} && $params{sort} eq 'path') {
@list=sort @list;
}
+ elsif (exists $params{sort} && $params{sort} eq 'title') {
+ @list=sort { lc(pagetitle(basename($a))) cmp lc(pagetitle(basename($b))) } @list;
+ }
elsif (exists $params{sort} && $params{sort} eq 'mtime') {
@list=sort { $pagemtime{$b} <=> $pagemtime{$a} } @list;
}
diff --git a/doc/ikiwiki/blog.mdwn b/doc/ikiwiki/blog.mdwn
index 19ec7ac..7608628 100644
--- a/doc/ikiwiki/blog.mdwn
+++ b/doc/ikiwiki/blog.mdwn
@@ -89,7 +89,8 @@ Here are some less often needed parameters:
inlining page.
* `sort` - Controls how inlined pages are sorted. The default, "age" is to
sort newest created pages first. Setting it to "title" will sort pages by
- title, and "mtime" sorts most recently modified pages first.
+ title, "path" sorts by the path to the page, and "mtime" sorts most
+ recently modified pages first.
* `reverse` - If set to "yes", causes the sort order to be reversed.
* `feedshow` - Specify the maximum number of matching pages to include in
the rss/atom feeds. The default is the same as the `show` value above.
Thanks for the patch. done, but I left off the sort=path. Also left off the lc (if you ask your locale to sort case-sensatively, it should, I think). --Joey