• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2/* This code is based on Firefox directory listing, distributed under
3 * Mozilla Public License.
4 */
5
6'use strict';
7
8var gTable, gOrderBy, gTBody, gRows;
9
10document.addEventListener("DOMContentLoaded", function() {
11  gTable = document.getElementsByTagName("table")[0];
12  gTBody = gTable.tBodies[0];
13  if (gTBody.rows.length < 2)
14    return;
15  var headCells = gTable.tHead.rows[0].cells;
16
17  function rowAction(i) {
18    return function(event) {
19      event.preventDefault();
20      orderBy(i);
21    }
22  }
23
24  for (var i = headCells.length - 1; i >= 0; i--) {
25    var anchor = document.createElement("a");
26    anchor.href = "";
27    anchor.appendChild(headCells[i].firstChild);
28    headCells[i].appendChild(anchor);
29    headCells[i].addEventListener("click", rowAction(i), true);
30  }
31  gTable.setAttribute("order", "");
32  orderBy(0);
33}, "false");
34
35function compareRows(rowA, rowB) {
36  var a = rowA.cells[gOrderBy].getAttribute("sortable-data") || rowA.cells[gOrderBy].innerHTML;
37  var b = rowB.cells[gOrderBy].getAttribute("sortable-data") || rowB.cells[gOrderBy].innerHTML;
38  var intA = +a;
39  var intB = +b;
40  if (a == intA && b == intB) {
41    a = intA;
42    b = intB;
43  } else {
44    a = a.toLowerCase();
45    b = b.toLowerCase();
46  }
47  if (a < b)
48    return -1;
49  if (a > b)
50    return 1;
51  return 0;
52}
53
54function orderBy(column) {
55  if (!gRows)
56    gRows = Array.from(gTBody.rows);
57  var order;
58  if (gOrderBy == column) {
59    order = gTable.getAttribute("order") == "asc" ? "desc" : "asc";
60  } else {
61    order = "asc";
62    gOrderBy = column;
63    gTable.setAttribute("order-by", column);
64    gRows.sort(compareRows);
65  }
66  gTable.removeChild(gTBody);
67  gTable.setAttribute("order", order);
68  if (order == "asc")
69    for (var i = 0; i < gRows.length; i++)
70      gTBody.appendChild(gRows[i]);
71  else
72    for (var i = gRows.length - 1; i >= 0; i--)
73      gTBody.appendChild(gRows[i]);
74  gTable.appendChild(gTBody);
75}
76
77