summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/mozlog/mozlog/formatters/html/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mozbase/mozlog/mozlog/formatters/html/main.js')
-rw-r--r--testing/mozbase/mozlog/mozlog/formatters/html/main.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/testing/mozbase/mozlog/mozlog/formatters/html/main.js b/testing/mozbase/mozlog/mozlog/formatters/html/main.js
new file mode 100644
index 000000000..8b4a40ed4
--- /dev/null
+++ b/testing/mozbase/mozlog/mozlog/formatters/html/main.js
@@ -0,0 +1,172 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+function toArray(iter) {
+ if (iter === null) {
+ return null;
+ }
+ return Array.prototype.slice.call(iter);
+}
+
+function find(selector, elem) {
+ if (!elem) {
+ elem = document;
+ }
+ return elem.querySelector(selector);
+}
+
+function find_all(selector, elem) {
+ if (!elem) {
+ elem = document;
+ }
+ return toArray(elem.querySelectorAll(selector));
+}
+
+addEventListener("DOMContentLoaded", function() {
+ reset_sort_headers();
+
+ split_debug_onto_two_rows();
+
+ find_all('.col-links a.screenshot').forEach(function(elem) {
+ elem.addEventListener("click",
+ function(event) {
+ var node = elem;
+ while (node && !node.classList.contains('results-table-row')) {
+ node = node.parentNode;
+ }
+ if (node != null) {
+ if (node.nextSibling &&
+ node.nextSibling.classList.contains("debug")) {
+ var href = find('.screenshot img', node.nextSibling).src;
+ window.open(href);
+ }
+ }
+ event.preventDefault();
+ }, false)
+ });
+
+ find_all('.screenshot a').forEach(function(elem) {
+ elem.addEventListener("click",
+ function(event) {
+ window.open(find('img', elem).getAttribute('src'));
+ event.preventDefault();
+ }, false)
+ });
+
+ find_all('.sortable').forEach(function(elem) {
+ elem.addEventListener("click",
+ function(event) {
+ toggle_sort_states(elem);
+ var colIndex = toArray(elem.parentNode.childNodes).indexOf(elem);
+ var key = elem.classList.contains('numeric') ? key_num : key_alpha;
+ sort_table(elem, key(colIndex));
+ }, false)
+ });
+
+});
+
+function sort_table(clicked, key_func) {
+ one_row_for_data();
+ var rows = find_all('.results-table-row');
+ var reversed = !clicked.classList.contains('asc');
+
+ var sorted_rows = sort(rows, key_func, reversed);
+
+ var parent = document.getElementById('results-table-body');
+ sorted_rows.forEach(function(elem) {
+ parent.appendChild(elem);
+ });
+
+ split_debug_onto_two_rows();
+}
+
+function sort(items, key_func, reversed) {
+ var sort_array = items.map(function(item, i) {
+ return [key_func(item), i];
+ });
+ var multiplier = reversed ? -1 : 1;
+
+ sort_array.sort(function(a, b) {
+ var key_a = a[0];
+ var key_b = b[0];
+ return multiplier * (key_a >= key_b ? 1 : -1);
+ });
+
+ return sort_array.map(function(item) {
+ var index = item[1];
+ return items[index];
+ });
+}
+
+function key_alpha(col_index) {
+ return function(elem) {
+ return elem.childNodes[col_index].firstChild.data.toLowerCase();
+ };
+}
+
+function key_num(col_index) {
+ return function(elem) {
+ return parseFloat(elem.childNodes[col_index].firstChild.data);
+ };
+}
+
+function reset_sort_headers() {
+ find_all('.sort-icon').forEach(function(elem) {
+ elem.parentNode.removeChild(elem);
+ });
+ find_all('.sortable').forEach(function(elem) {
+ var icon = document.createElement("div");
+ icon.className = "sort-icon";
+ icon.textContent = "vvv";
+ elem.insertBefore(icon, elem.firstChild);
+ elem.classList.remove("desc", "active");
+ elem.classList.add("asc", "inactive");
+ });
+}
+
+function toggle_sort_states(elem) {
+ //if active, toggle between asc and desc
+ if (elem.classList.contains('active')) {
+ elem.classList.toggle('asc');
+ elem.classList.toggle('desc');
+ }
+
+ //if inactive, reset all other functions and add ascending active
+ if (elem.classList.contains('inactive')) {
+ reset_sort_headers();
+ elem.classList.remove('inactive');
+ elem.classList.add('active');
+ }
+}
+
+function split_debug_onto_two_rows() {
+ find_all('tr.results-table-row').forEach(function(elem) {
+ var new_row = document.createElement("tr")
+ new_row.className = "debug";
+ elem.parentNode.insertBefore(new_row, elem.nextSibling);
+ find_all(".debug", elem).forEach(function (td_elem) {
+ if (find(".log", td_elem)) {
+ new_row.appendChild(td_elem);
+ td_elem.colSpan=5;
+ } else {
+ td_elem.parentNode.removeChild(td_elem);
+ }
+ });
+ });
+}
+
+function one_row_for_data() {
+ find_all('tr.results-table-row').forEach(function(elem) {
+ if (elem.nextSibling.classList.contains('debug')) {
+ toArray(elem.nextSibling.childNodes).forEach(
+ function (td_elem) {
+ elem.appendChild(td_elem);
+ })
+ } else {
+ var new_td = document.createElement("td");
+ new_td.className = "debug";
+ elem.appendChild(new_td);
+ }
+ });
+}