-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmessage_history.js
101 lines (96 loc) · 3.51 KB
/
message_history.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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
document.addEventListener('DOMContentLoaded', function() {
const headerTitle = document.querySelector('.header-title');
headerTitle.innerHTML = 'Roundcube Message History';
headerTitle.classList.add('plugin-title');
const table = document.getElementById('message_history_v2');
const headers = table.getElementsByTagName('th');
for (let i = 0; i < headers.length; i++) {
headers[i].innerHTML += '<span class="arrow"></span>';
headers[i].setAttribute('onclick', 'sortTable(' + i + ')');
}
const searchBox = document.querySelector('#table_search');
const rows = document.querySelectorAll('.message_history_table tbody tr');
searchBox.addEventListener('input', function() {
const query = searchBox.value.toLowerCase();
rows.forEach(row => {
const cells = row.querySelectorAll('td');
let shouldHide = true;
cells.forEach(cell => {
if (cell.textContent.toLowerCase().indexOf(query) > -1) {
shouldHide = false;
}
});
if (shouldHide) {
row.style.display = 'none';
} else {
row.style.display = '';
}
});
});
// Check for search keyword in URL
const urlParams = new URLSearchParams(window.location.search);
const searchKeyword = urlParams.get('search');
if (searchKeyword) {
searchBox.value = searchKeyword;
searchBox.dispatchEvent(new Event('input'));
}
$('#message_history_v2').css('overflow-y', 'scroll');
});
function sortTable(n) {
var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0;
table = document.getElementById("message_history_v2");
switching = true;
// Set the sorting direction to ascending:
dir = "asc";
/* Make a loop that will continue until
no switching has been done: */
while (switching) {
// Start by saying: no switching is done:
switching = false;
rows = table.rows;
/* Loop through all table rows (except the
first, which contains table headers): */
for (i = 1; i < (rows.length - 1); i++) {
// Start by saying there should be no switching:
shouldSwitch = false;
/* Get the two elements you want to compare,
one from current row and one from the next: */
x = rows[i].getElementsByTagName("td")[n];
y = rows[i + 1].getElementsByTagName("td")[n];
/* Check if the two rows should switch place,
based on the direction, asc or desc: */
if (dir == "asc") {
if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {
// If so, mark as a switch and break the loop:
shouldSwitch= true;
break;
}
} else if (dir == "desc") {
if (x.innerHTML.toLowerCase() < y.innerHTML.toLowerCase()) {
// If so, mark as a switch and break the loop:
shouldSwitch= true;
break;
}
}
}
if (shouldSwitch) {
/* If a switch has been marked, make the switch
and mark that a switch has been done: */
rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
switching = true;
// Each time a switch is done, increase this count by 1:
switchcount ++;
} else {
/* If no switching has been done AND the direction is "asc",
set the direction to "desc" and run the while loop again. */
if (switchcount == 0 && dir == "asc") {
dir = "desc";
switching = true;
}
}
}
// Toggle the direction of the arrow:
var arrow = table.getElementsByTagName('th')[n].querySelector('.arrow');
arrow.classList.toggle('arrow-up');
arrow.classList.toggle('arrow-down');
}