server/site/js/source/activity.js (42 lines of code) (raw):

function list_activity(state, json) { let obj = document.getElementById('activity'); obj.innerHTML = ''; // clear object if (json.activity && json.activity.length > 0) { json.activity = json.activity.sort((a,b) => b.epoch - a.epoch); let div = _div(); div.inject(_hr()); let wheader = _h3({class:'subtitle'},"Activity log entries (%u):".format(json.activity.length)); div.inject(wheader); let tbl = new HTML('table', { style: {fontSize: '0.8rem'}}); let tbh = new HTML('thead'); let tbody = new HTML('tbody'); tbh.inject(new HTML('tr', {}, [ new HTML('th', 'Type'), new HTML('th', {style: {width: '110px'}},'Added'), new HTML('th', 'Text'), ])); tbl.inject(tbh); div.inject(tbl); for (var i = 0; i < json.activity.length; i++) { let res = json.activity[i]; let when = 'Never'; if (res.epoch) { when = moment(res.epoch*1000.0).fromNow(); } res.text = res.text.replace(/\b([a-f0-9]{8})[a-f0-9]{32}\b/g, (a, b) => b + ".."); let tr = new HTML('tr', {}, [ new HTML('td', {}, _kbd(res.ntype)), new HTML('td', moment(res.epoch*1000.0).fromNow()), new HTML('td', res.text) ]); tbody.inject(tr); } tbl.inject(tbody); obj.inject(div); } } function init_activity(source) { let obj = document.getElementById('activity'); obj.innerText = "Fetching activity, hang on..."; GET('./api/activity', list_activity, manage_error, {}); }