|
|
|
|
|
|
17
|
var alternate_row_colors = true;
|
17
|
var alternate_row_colors = true;
|
|
18
|
|
18
|
|
|
19
|
/* Don't change anything below this unless you know what you're doing */
|
19
|
/* Don't change anything below this unless you know what you're doing */
|
|
|
|
20
|
+
|
|
|
|
21
|
+// Escape HTML special characters in a string for safe insertion into innerHTML
|
|
|
|
22
|
+function escapeHtml(str) {
|
|
|
|
23
|
+ return String(str)
|
|
|
|
24
|
+ .replace(/&/g, '&')
|
|
|
|
25
|
+ .replace(/</g, '<')
|
|
|
|
26
|
+ .replace(/>/g, '>')
|
|
|
|
27
|
+ .replace(/"/g, '"')
|
|
|
|
28
|
+ .replace(/'/g, ''');
|
|
|
|
29
|
+}
|
|
|
|
30
|
+
|
|
20
|
addEvent(window, "load", sortables_init);
|
31
|
addEvent(window, "load", sortables_init);
|
|
21
|
|
32
|
|
|
22
|
var SORT_COLUMN_INDEX;
|
33
|
var SORT_COLUMN_INDEX;
|
|
|
|
|
|
|
50
|
var cell = firstRow.cells[i];
|
61
|
var cell = firstRow.cells[i];
|
|
51
|
var txt = ts_getInnerText(cell);
|
62
|
var txt = ts_getInnerText(cell);
|
|
52
|
if (cell.className != "unsortable" && cell.className.indexOf("unsortable") == -1) {
|
63
|
if (cell.className != "unsortable" && cell.className.indexOf("unsortable") == -1) {
|
|
53
|
- cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this, '+i+');return false;">'+txt+'<span class="sortarrow"> <img src="'+ image_path + image_none + '" alt="↓"/></span></a>';
|
|
|
|
|
|
64
|
+ cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this, '+i+');return false;">'+escapeHtml(txt)+'<span class="sortarrow"> <img src="'+ image_path + image_none + '" alt="↓"/></span></a>';
|
|
54
|
}
|
65
|
}
|
|
55
|
}
|
66
|
}
|
|
56
|
if (alternate_row_colors) {
|
67
|
if (alternate_row_colors) {
|