aboutsummaryrefslogtreecommitdiff
path: root/doc/bugs/inline_sort-by-title_issues.mdwn
blob: 884846b32709680a6048ffaecfda49a1c5680392 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
The [[plugins/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 [[plugins/map]] for that.

--[[users/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]]