~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/media/browser/listing.js

  • Committer: mattgiuca
  • Date: 2008-01-17 03:32:25 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:240
browser/listing.js: Wrote real comparison function and set up sort_order array
    (seems buggy).

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
file_listing = null;
39
39
thisdir = null;
40
40
 
 
41
/** The current sort order (a list of fields to sort by, in order of
 
42
 * priority), and whether it is ascending or descending. */
 
43
sort_order = [];
 
44
sort_ascending = true;
 
45
 
41
46
/** The width/height of filetype, svnstatus and publishstatus icons */
42
47
icon_size = 16;
43
48
 
376
381
 * sort_order, bringing the specified sort_field to the top.
377
382
 * Also note that sorting by "isdir" is more prominent than whatever field is
378
383
 * provided here.
379
 
 * \param sort_ascending If true, sorts ascending. If false, descending.
 
384
 * \param ascending If true, sorts ascending. If false, descending.
380
385
 */
381
 
function sort_listing(sort_field, sort_ascending)
 
386
function sort_listing(sort_field, ascending)
382
387
{
383
388
    var i;
384
389
    var files = document.getElementById("files");
385
390
    var files_children = files.childNodes;
386
391
    var files_array = new Array(files_children.length);
387
392
    /* Update sort_order, bringing sort_field to the top. */
388
 
    /* TODO */
 
393
    sort_order.removeall(sort_field);
 
394
    sort_order.push(sort_field);
 
395
    sort_ascending = ascending != false ? true : false;
389
396
 
390
397
    /* Build an array of DOM tr elements (with the additional 'filename' and
391
398
     * 'fileinfo' attributes as written when the listing is created). */
421
428
    /* First sort by whether or not it is a directory */
422
429
    var aisdir = a.fileinfo.isdir == true;
423
430
    var bisdir = b.fileinfo.isdir == true;
424
 
    if (aisdir > bisdir) return -1;
425
 
    else if (aisdir < bisdir) return 1;
 
431
    var LESS = sort_ascending == true ? -1 : 1;
 
432
    var GREATER = -LESS;
 
433
    if (aisdir > bisdir) return LESS;
 
434
    else if (aisdir < bisdir) return GREATER;
426
435
 
427
 
    /* TEMP: Just sort by filename */
428
 
    if (a.filename < b.filename) return -1;
429
 
    else if (a.filename > b.filename) return 1;
 
436
    /* Reverse order of sort_order. (top is highest priority) */
 
437
    for (var i=sort_order.length-1; i>=0; i--)
 
438
    {
 
439
        var field = sort_order[i];
 
440
        if (field == "filename")
 
441
        {
 
442
            if (a.filename < b.filename) return LESS;
 
443
            else if (a.filename > b.filename) return GREATER;
 
444
        }
 
445
        else
 
446
        {
 
447
            /* null > anything else (so it appears at the bottom) */
 
448
            if (!(field in a))
 
449
                if (field in b) return GREATER; else break;
 
450
            if (!(field in b)) return LESS;
 
451
            if (a.fileinfo[field] < b.fileinfo[field]) return LESS;
 
452
            else if (a.fileinfo[field] > b.fileinfo[field]) return GREATER;
 
453
        }
 
454
    }
430
455
 
431
456
    return 0;
432
457
}