123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- /* 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));
- }
- function sort_column(elem) {
- toggle_sort_states(elem);
- var colIndex = toArray(elem.parentNode.childNodes).indexOf(elem);
- var key;
- if (elem.classList.contains('numeric')) {
- key = key_num;
- } else if (elem.classList.contains('result')) {
- key = key_result;
- } else {
- key = key_alpha;
- }
- sort_table(elem, key(colIndex));
- }
- function show_all_extras() {
- find_all('.col-result').forEach(show_extras);
- }
- function hide_all_extras() {
- find_all('.col-result').forEach(hide_extras);
- }
- function show_extras(colresult_elem) {
- var extras = colresult_elem.parentNode.nextElementSibling;
- var expandcollapse = colresult_elem.firstElementChild;
- extras.classList.remove("collapsed");
- expandcollapse.classList.remove("expander");
- expandcollapse.classList.add("collapser");
- }
- function hide_extras(colresult_elem) {
- var extras = colresult_elem.parentNode.nextElementSibling;
- var expandcollapse = colresult_elem.firstElementChild;
- extras.classList.add("collapsed");
- expandcollapse.classList.remove("collapser");
- expandcollapse.classList.add("expander");
- }
- function show_filters() {
- var filter_items = document.getElementsByClassName('filter');
- for (var i = 0; i < filter_items.length; i++)
- filter_items[i].hidden = false;
- }
- function add_collapse() {
- // Add links for show/hide all
- var resulttable = find('table#results-table');
- var showhideall = document.createElement("p");
- showhideall.innerHTML = '<a href="javascript:show_all_extras()">Show all details</a> / ' +
- '<a href="javascript:hide_all_extras()">Hide all details</a>';
- resulttable.parentElement.insertBefore(showhideall, resulttable);
- // Add show/hide link to each result
- find_all('.col-result').forEach(function(elem) {
- var extras = elem.parentNode.nextElementSibling;
- var expandcollapse = document.createElement("span");
- if (elem.innerHTML === 'Passed') {
- extras.classList.add("collapsed");
- expandcollapse.classList.add("expander");
- } else {
- expandcollapse.classList.add("collapser");
- }
- elem.appendChild(expandcollapse);
- elem.addEventListener("click", function(event) {
- if (event.currentTarget.parentNode.nextElementSibling.classList.contains("collapsed")) {
- show_extras(event.currentTarget);
- } else {
- hide_extras(event.currentTarget);
- }
- });
- })
- }
- function init () {
- reset_sort_headers();
- add_collapse();
- show_filters();
- toggle_sort_states(find('.initial-sort'));
- find_all('.sortable').forEach(function(elem) {
- elem.addEventListener("click",
- function(event) {
- sort_column(elem);
- }, false)
- });
- };
- function sort_table(clicked, key_func) {
- var rows = find_all('.results-table-row');
- var reversed = !clicked.classList.contains('asc');
- var sorted_rows = sort(rows, key_func, reversed);
- /* Whole table is removed here because browsers acts much slower
- * when appending existing elements.
- */
- var thead = document.getElementById("results-table-head");
- document.getElementById('results-table').remove();
- var parent = document.createElement("table");
- parent.id = "results-table";
- parent.appendChild(thead);
- sorted_rows.forEach(function(elem) {
- parent.appendChild(elem);
- });
- document.getElementsByTagName("BODY")[0].appendChild(parent);
- }
- 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[1].childNodes[col_index].firstChild.data.toLowerCase();
- };
- }
- function key_num(col_index) {
- return function(elem) {
- return parseFloat(elem.childNodes[1].childNodes[col_index].firstChild.data);
- };
- }
- function key_result(col_index) {
- return function(elem) {
- var strings = ['Error', 'Failed', 'Rerun', 'XFailed', 'XPassed',
- 'Skipped', 'Passed'];
- return strings.indexOf(elem.childNodes[1].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 is_all_rows_hidden(value) {
- return value.hidden == false;
- }
- function filter_table(elem) {
- var outcome_att = "data-test-result";
- var outcome = elem.getAttribute(outcome_att);
- class_outcome = outcome + " results-table-row";
- var outcome_rows = document.getElementsByClassName(class_outcome);
- for(var i = 0; i < outcome_rows.length; i++){
- outcome_rows[i].hidden = !elem.checked;
- }
- var rows = find_all('.results-table-row').filter(is_all_rows_hidden);
- var all_rows_hidden = rows.length == 0 ? true : false;
- var not_found_message = document.getElementById("not-found-message");
- not_found_message.hidden = !all_rows_hidden;
- }
|