3
function forEach(iterable, fn, bind){
4
for (var i = 0, j = iterable.length; i < j; i++) fn.call(bind, iterable[i], i, iterable);
9
window.onload = function load(){
13
forEach(document.getElementsByTagName('iframe'), function(iframe){
14
frameworks[iframe.name] = {
15
'test': window.frames[iframe.name].test,
20
var tbody = document.getElementById('tbody');
21
var tfoot = document.getElementById('tfoot');
22
var lastrow = tfoot.getElementsByTagName('tr')[0];
24
var controls = document.getElementById('controls');
26
var links = controls.getElementsByTagName('a');
31
start.onclick = function(){
36
stop.onclick = function(){
46
for (var name in frameworks){
47
var framework = frameworks[name];
48
forEach(window.selectors, function(selector){
49
framework.selectors.push(selector);
51
scores[name] = lastrow.getElementsByTagName('td')[frxi];
58
forEach(window.selectors, function(selector, i){
60
var row = tbody.getElementsByTagName('tr')[i];
61
for (var name in frameworks){
62
var framework = frameworks[name];
63
var cell = row.getElementsByTagName('td')[frxi];
65
'execute': framework.test,
66
'selector': framework.selectors[i],
77
var testRunner = function(){
78
var test = tests.shift();
80
var results = test.execute(test.selector);
81
test.cell.className = 'test';
82
test.cell.innerHTML = results.time + ' ms | ' + results.found + ' found';
83
test.cell.speed = results.time;
85
test.cell.innerHTML = results.time + ' ms | <span class="exception" title="' + results.error + '">error returned</a>';
86
test.cell.className += ' exception';
88
test.cell.error = true;
90
test.cell.found = results.found;
91
test.cell.error = false;
94
score[test.name] += test.cell.speed;
95
scores[test.name].innerHTML = ' ' + score[test.name] + ' ';
97
if (test.cell == test.row.lastChild) colourRow(test.row);
98
timer = setTimeout(testRunner, 250);
101
var colourRow = function(row){
105
var tds = row.getElementsByTagName('td');
106
forEach(tds, function(td){
112
forEach(cells, function(cell, i){
113
if (!cell.error) speeds[i] = cell.speed;
114
//error, so we exclude it from colouring
115
else speeds[i] = 99999999999999999999999;
118
var min = Math.min.apply(this, speeds);
119
var max = Math.max.apply(this, speeds);
122
var mismatch = false;
123
forEach(cells, function(cell, i){
124
found.push(cell.found);
126
forEach(found, function(n){
127
if (cell.found && n && cell.found != n){
133
if (cell.speed == min) cell.className += ' good';
134
else if (cell.speed == max) cell.className += ' bad';
135
else cell.className += ' normal';
139
forEach(cells, function(cell, i){
140
if (cell.found) cell.className += ' mismatch';