gemini-coverage
Version:
Coverage report generator for gemini
147 lines (143 loc) • 4.45 kB
JavaScript
// Based on the source from http://www.scriptiny.com/2009/03/table-sorter/
var TINY = {};
function T$(i) {
return document.getElementById(i);
}
function T$$(e, p) {
return p.getElementsByTagName(e);
}
TINY.table = function() {
function sorter(n) {
this.n = n;
this.pagesize = 20;
this.paginate = 0;
}
sorter.prototype.init = function(e, f) {
var t = ge(e), i = 0;
this.e = e;
this.l = t.r.length;
t.a = [];
t.h = T$$('thead', T$(e))[0].rows[0];
t.w = t.h.cells.length;
for (i; i < t.w; i++) {
var c = t.h.cells[i];
if (c.className != 'nosort') {
c.className = this.head;
c.onclick = new Function(this.n + '.wk(this.cellIndex)');
}
}
for (i = 0; i < this.l; i++) {
t.a[i] = {};
}
if (f != null) {
var a = new Function(this.n + '.wk(' + f + ')');
a();
}
if (this.paginate) {
this.g = 1;
this.pages();
}
};
sorter.prototype.wk = function(y) {
var t = ge(this.e), x = t.h.cells[y], i = 0;
for (i; i < this.l; i++) {
t.a[i].o = i;
var v = t.r[i].cells[y];
t.r[i].style.display = '';
while (v.hasChildNodes()) {
v = v.firstChild;
}
t.a[i].v = v.nodeValue? v.nodeValue : '';
}
for (i = 0; i < t.w; i++) {
var c = t.h.cells[i];
if (c.className != 'nosort') {
c.className = this.head;
}
}
if (t.p == y) {
t.a.reverse();
var sort = t.d? this.asc : this.desc;
this.asc && x.classList.remove(this.asc);
this.desc && x.classList.remove(this.desc);
sort && x.classList.add(sort);
t.d = t.d? 0 : 1;
}
else {
t.p = y;
t.a.sort(cp);
t.d = 0;
this.asc && x.classList.add(this.asc);
}
var n = document.createElement('tbody');
for (i = 0; i < this.l; i++) {
var r = t.r[t.a[i].o].cloneNode(true);
n.appendChild(r);
var cl = i % 2 == 0? this.even : this.odd;
this.even && r.classList.remove(this.even);
this.odd && r.classList.remove(this.odd);
cl && r.classList.add(cl);
var cells = T$$('td', r);
for (var z = 0; z < t.w; z++) {
cl = y == z? i % 2 == 0? this.evensel : this.oddsel : '';
this.evensel && cells[z].classList.remove(this.evensel);
this.oddsel && cells[z].classList.remove(this.oddsel);
cl && cells[z].classList.add(cl);
}
}
t.replaceChild(n, t.b);
if (this.paginate) {
this.size(this.pagesize);
}
};
sorter.prototype.page = function(s) {
var t = ge(this.e), i = 0, l = s + parseInt(this.pagesize);
if (this.currentid && this.limitid) {
T$(this.currentid).innerHTML = this.g;
}
for (i; i < this.l; i++) {
t.r[i].style.display = i >= s && i < l? '' : 'none';
}
};
sorter.prototype.move = function(d, m) {
var s = d == 1? (m? this.d : this.g + 1) : (m? 1 : this.g - 1);
if (s <= this.d && s > 0) {
this.g = s;
this.page((s - 1) * this.pagesize);
}
};
sorter.prototype.size = function(s) {
this.pagesize = s;
this.g = 1;
this.pages();
this.page(0);
if (this.currentid && this.limitid) {
T$(this.limitid).innerHTML = this.d;
}
};
sorter.prototype.pages = function() {
this.d = Math.ceil(this.l / this.pagesize);
};
function ge(e) {
var t = T$(e);
t.b = T$$('tbody', t)[0];
t.r = t.b.rows;
return t;
};
function cp(f, c) {
var g, h;
f = g = f.v.toLowerCase(), c = h = c.v.toLowerCase();
var i = parseFloat(f.replace(/(\$|\,)/g, '')), n = parseFloat(c.replace(/(\$|\,)/g, ''));
if (!isNaN(i) && !isNaN(n)) {
return i - n;
}
if (f < c) {
return -1;
}
if (f > c) {
return 1;
}
return 0;
};
return {sorter: sorter};
}();