(function ($, H5AI) {
H5AI.sort = (function () {
var type = function (entry) {
var $entry = $(entry);
if ($entry.hasClass("folder-parent")) {
return 0;
} else if ($entry.hasClass("folder")) {
return 1;
}
return 2;
},
cmp = function (entry1, entry2, rev, getVal) {
var res, val1, val2;
res = type(entry1) - type(entry2);
if (res !== 0) {
return res;
}
val1 = getVal(entry1);
val2 = getVal(entry2);
if (val1 < val2) {
return rev ? 1 : -1;
} else if (val1 > val2) {
return rev ? -1 : 1;
}
return 0;
},
cmpName = function (entry1, entry2) {
return cmp(entry1, entry2, false, function (entry) {
return $(entry).find(".label").text().toLowerCase();
});
},
cmpTime = function (entry1, entry2) {
return cmp(entry1, entry2, false, function (entry) {
return $(entry).find(".date").data("time");
});
},
cmpSize = function (entry1, entry2) {
return cmp(entry1, entry2, false, function (entry) {
return $(entry).find(".size").data("bytes");
});
},
cmpNameRev = function (entry1, entry2) {
return cmp(entry1, entry2, true, function (entry) {
return $(entry).find(".label").text().toLowerCase();
});
},
cmpTimeRev = function (entry1, entry2) {
return cmp(entry1, entry2, true, function (entry) {
return $(entry).find(".date").data("time");
});
},
cmpSizeRev = function (entry1, entry2) {
return cmp(entry1, entry2, true, function (entry) {
return $(entry).find(".size").data("bytes");
});
},
sort = function (fn) {
$("#extended .entry").detach().sort(fn).appendTo($("#extended > ul"));
},
$all, orders,
sortBy = function (id) {
var order = orders[id];
$all.removeClass("ascending").removeClass("descending");
order.head.addClass(order.clas).attr("href", "#!/sort=" + id);
sort(order.fn);
},
init = function () {
var $ascending = $("
"),
$descending = $("
"),
initialOrder = /^.*#!.*\/sort=(.*?)(?:\/.*)?$/.exec(document.location),
$header = $("#extended li.header"),
$label = $header.find("a.label"),
$date = $header.find("a.date"),
$size = $header.find("a.size");
$all = $header.find("a.label,a.date,a.size");
orders = {
na: {
head: $label,
clas: "ascending",
fn: cmpName
},
nd: {
head: $label,
clas: "descending",
fn: cmpNameRev
},
da: {
head: $date,
clas: "ascending",
fn: cmpTime
},
dd: {
head: $date,
clas: "descending",
fn: cmpTimeRev
},
sa: {
head: $size,
clas: "ascending",
fn: cmpSize
},
sd: {
head: $size,
clas: "descending",
fn: cmpSizeRev
}
};
sortBy(initialOrder ? initialOrder[1] : H5AI.core.settings.sortorder);
$label
.attr("href", "#!/sort=na")
.append($ascending.clone()).append($descending.clone())
.click(function () {
sortBy("n" + ($label.hasClass("ascending") ? "d" : "a"));
});
$date
.attr("href", "#!/sort=da")
.prepend($ascending.clone()).prepend($descending.clone())
.click(function () {
sortBy("d" + ($date.hasClass("ascending") ? "d" : "a"));
});
$size
.attr("href", "#!/sort=sa")
.prepend($ascending.clone()).prepend($descending.clone())
.click(function () {
sortBy("s" + ($size.hasClass("ascending") ? "d" : "a"));
});
};
return {
init: init
};
}());
}(jQuery, H5AI));