diff --git a/copyparty/web/up2k.js b/copyparty/web/up2k.js index 16ef1556..06b6ff29 100644 --- a/copyparty/web/up2k.js +++ b/copyparty/web/up2k.js @@ -137,6 +137,9 @@ function U2pvis(act, btns) { this.act = act; this.ctr = { "ok": 0, "ng": 0, "bz": 0, "q": 0 }; this.tab = []; + this.head = 0; + this.tail = -1; + this.wsz = 3; this.addfile = function (entry) { this.tab.push({ @@ -152,7 +155,10 @@ function U2pvis(act, btns) { this.ctr["q"]++; this.drawcard("q"); if (this.act == "q") { - this.addrow(this.genrow(this.tab.length - 1)); + this.addrow(this.tab.length - 1); + } + if (this.act == "bz") { + this.bzw(); } }; @@ -228,7 +234,8 @@ function U2pvis(act, btns) { this.move = function (nfile, newcat) { var fo = this.tab[nfile], - oldcat = fo.in; + oldcat = fo.in, + bz_act = this.act == "bz"; if (oldcat == newcat) { throw 42; @@ -240,12 +247,52 @@ function U2pvis(act, btns) { this.drawcard(oldcat); this.drawcard(newcat); if (this.is_act(newcat)) { - this.addrow(this.genrow(nfile)); + this.tail++; + if (!ebi('f' + nfile)) + this.addrow(nfile); } else if (this.is_act(oldcat)) { - var tr = ebi("f{0}n".format(nfile)).parentNode; - tr.parentNode.removeChild(tr); + this.head++; + if (!bz_act) { + var tr = ebi("f" + nfile); + tr.parentNode.removeChild(tr); + } } + if (bz_act) { + this.bzw(); + } + }; + + this.bzw_log = function (first, last) { + console.log("first %d head %d tail %d last %d", first, this.head, this.tail, last); + var trs = document.querySelectorAll('#u2tab>tbody>tr'), msg = []; + for (var a = 0; a < trs.length; a++) + msg.push(trs[a].getAttribute('id')); + + console.log(msg.join(' ')); + } + + this.bzw = function () { + var first = document.querySelector('#u2tab>tbody>tr:first-child'); + if (!first) + return; + + var last = document.querySelector('#u2tab>tbody>tr:last-child'); + first = parseInt(first.getAttribute('id').slice(1)); + last = parseInt(last.getAttribute('id').slice(1)); + //this.bzw_log(first, last); + + while (this.head - first > this.wsz) { + var obj = ebi('f' + (first++)); + obj.parentNode.removeChild(obj); + } + while (last - this.tail < this.wsz && last < this.tab.length - 2) { + var obj = ebi('f' + (++last)); + if (!obj) + this.addrow(last); + } + //this.bzw_log(first, last); + //console.log('--'); }; this.drawcard = function (cat) { @@ -273,27 +320,52 @@ function U2pvis(act, btns) { this.changecard = function (card) { this.act = card; var html = []; + this.head = -1; + this.tail = -1; for (var a = 0; a < this.tab.length; a++) { var rt = this.tab[a].in; if (this.is_act(rt)) { - html.push(this.genrow(a)); + html.push(this.genrow(a, true)); + + this.tail = a; + if (this.head == -1) + this.head = a; } } - ebi('u2tab').tBodies[0].innerHTML = - '