summaryrefslogtreecommitdiff
path: root/doc/todo/inline:_numerical_ordering_by_title.mdwn
blob: 3dc207b6be389acf2d80370080a61438ebb8437f (plain)

Could you please add numerical ordering by title to [[inline|plugins/inline]] plugin? Now I can do only alphabetical order by title, but sometime it's not enough.

BTW, it seems that ordering by title is rather ordering by filename of page. For me "title" means title of page I can set using title parameter of [[meta|plugins/meta]] plugin :)

Why do I need that feature? I've just been migrating an info site of our university mail system to Ikiwiki from very static, console handling Makefile+WML+XML+XSL=HTML solution. I have many news files (1.mdwn, 2.mdwn, etc.) and unfortunately I did very stupid thing. I've commited all of them in the same revision of our Subversion repo...

Now I have a problem with sorting these files using inline plugin. I can't do sorting by age, because both old and young news files have the same age. I can't sort by title too. For example, when I sort them by title, then 9.mdwn page is between 90.mdwn and 89.mdwn pages... It sucks, of course. Sorting by mtime also is not a solution for me, because it means that I can't touch/fix old news anymore.

Do you have any idea how to workaround that issue? --[[Paweł|ptecza]]

Maybe you can rename 9.mdwn to 09.mdwn? See rename(1), it renames multiple files in one go. --[[buo]]

Thanks for your suggestion! But what about if number of my news files grows to 100+?

$ ls
09.mdwn  100.mdwn  101.mdwn  102.mdwn  89.mdwn  90.mdwn

I don't want to rename all previous files to add 0 prefix. --[[Paweł|ptecza]]

Rather than adding 0's or or a 'sorttype' parameter, I'd just fix the sort order. Both MacOS and Windows use a smarter sort order than just lexical in their file browsers (e.g. http://support.microsoft.com/default.aspx?kbid=319827, http://docs.info.apple.com/article.html?artnum=300989).

The Unicode Collation algorithm would seem to be a reasonable sort order. (See also http://www.unicode.org/unicode/reports/tr10/.) Unfortunately the standard perl implementation, Unicode::Collate doesn't handle the optional numbers extension which is what you want. --[[Will]]


Below is my simple patch. Feel free to use it or comment!

I have also 2 considerations for inline sorting:

  1. Maybe changing name of sort parameter to sortby or sortkey will be good idea?
  2. Maybe you should use title sort key for title from meta plugin and name, filename, page or pagename for page names? In the future you can also sort by meta author, license or another key.

--[[Paweł|ptecza]]

--- inline.pm-orig  2008-09-02 09:53:20.000000000 +0200
+++ inline.pm       2008-09-02 10:09:02.000000000 +0200
@@ -186,7 +186,15 @@
    }

    if (exists $params{sort} && $params{sort} eq 'title') {
-           @list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list;
+           if (! $params{sorttype} || $params{sorttype} eq 'lexical') {
+                   @list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list;
+           }
+           elsif ($params{sorttype} eq 'numeric') {
+                   @list=sort { pagetitle(basename($a)) <=> pagetitle(basename($b)) } @list;
+           }
+           else {
+                   return sprintf(gettext("unknown sort type %s"), $params{sorttype});
+           }
    }
    elsif (exists $params{sort} && $params{sort} eq 'mtime') {
            @list=sort { $pagemtime{$b} <=> $pagemtime{$a} } @list;
@@ -195,7 +203,7 @@
            @list=sort { $pagectime{$b} <=> $pagectime{$a} } @list;
    }
    else {
-           return sprintf(gettext("unknown sort type %s"), $params{sort});
+           return sprintf(gettext("unknown sort key %s"), $params{sort});
    }

    if (yesno($params{reverse})) {

Joey, have you forgotten about that request? ;) --[[Paweł|ptecza]]