function render() { var ups = V.ups, now = V.now, html = []; ebi('filter').value = V.filter; ebi('hits').innerHTML = 'showing ' + ups.length + ' files'; for (var a = 0; a < ups.length; a++) { var f = ups[a], vsp = vsplit(f.vp.split('?')[0]), dn = esc(uricom_dec(vsp[0])), fn = esc(uricom_dec(vsp[1])), at = f.at, td = now - f.at, ts = !at ? '(?)' : unix2iso(at), sa = !at ? '(?)' : td > 60 ? shumantime(td) : (td + 's'), sz = ('' + f.sz).replace(/\B(?=(\d{3})+(?!\d))/g, " "); html.push('' + sz + '' + f.ip + '' + ts + '' + sa + '' + dn + '' + fn + ''); } if (!ups.length) { var t = V.filter ? ' matching the filter' : ''; html = ['there are no uploads' + t + '']; } ebi('tb').innerHTML = html.join(''); } render(); var ti; function ask(e) { ev(e); clearTimeout(ti); ebi('hits').innerHTML = 'Loading...'; var xhr = new XHR(), filter = unsmart(ebi('filter').value); hist_replace(get_evpath().split('?')[0] + '?ru&filter=' + uricom_enc(filter)); xhr.onload = xhr.onerror = function () { try { V = JSON.parse(this.responseText) } catch (ex) { ebi('tb').innerHTML = 'failed to decode server response as json:
' + esc(this.responseText) + '
'; return; } render(); }; xhr.open('GET', SR + '/?ru&j&filter=' + uricom_enc(filter), true); xhr.send(); } ebi('re').onclick = ask; ebi('filter').oninput = function () { clearTimeout(ti); ti = setTimeout(ask, 500); ebi('hits').innerHTML = '...'; }; ebi('filter').onkeydown = function (e) { if (('' + e.key).endsWith('Enter')) ask(); };