-
-
Notifications
You must be signed in to change notification settings - Fork 16
/
sort.js
67 lines (60 loc) · 2.3 KB
/
sort.js
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
58
59
60
61
62
63
64
65
66
67
//=============================================================================
// Copyright (c) 2016-present Allan CORNET (Nelson)
//=============================================================================
// This file is part of the Nelson.
//=============================================================================
// LICENCE_BLOCK_BEGIN
// SPDX-License-Identifier: LGPL-3.0-or-later
// LICENCE_BLOCK_END
//=============================================================================
"use strict";
//=============================================================================
const TableIDvalue = "indextable";
var TableLastSortedColumn = -1;
//=============================================================================
function SortTable() {
const sortColumn = parseInt(arguments[0]);
const type = arguments[1].toUpperCase();
const table = document.getElementById(TableIDvalue);
const tbody = table.getElementsByTagName("tbody")[0];
const rows = tbody.getElementsByTagName("tr");
var arrayOfRows = new Array();
for (var i = 0, len = rows.length; i < len; i++) {
arrayOfRows[i] = new Object();
arrayOfRows[i].oldIndex = i;
var celltext = rows[i]
.getElementsByTagName("td")
[sortColumn].innerHTML.replace(/<[^>]*>/g, "");
var re = type == "N" ? /[^\.\-\+\d]/g : /[^a-zA-Z0-9]/g;
arrayOfRows[i].value = celltext
.replace(re, "")
.substr(0, 25)
.toLowerCase();
}
if (sortColumn == TableLastSortedColumn) {
arrayOfRows.reverse();
} else {
TableLastSortedColumn = sortColumn;
if (type === 'N') {
arrayOfRows.sort(CompareRowOfNumbers);
} else {
arrayOfRows.sort(CompareRowOfText);
}
}
var newTableBody = document.createElement("tbody");
for (var i = 0, len = arrayOfRows.length; i < len; i++) {
newTableBody.appendChild(rows[arrayOfRows[i].oldIndex].cloneNode(true));
}
table.replaceChild(newTableBody, tbody);
function CompareRowOfText(a, b) {
var aval = a.value;
var bval = b.value;
return aval == bval ? 0 : aval > bval ? 1 : -1;
}
function CompareRowOfNumbers(a, b) {
var aval = /\d/.test(a.value) ? parseFloat(a.value) : 0;
var bval = /\d/.test(b.value) ? parseFloat(b.value) : 0;
return aval == bval ? 0 : aval > bval ? 1 : -1;
}
}
//=============================================================================