aboutsummaryrefslogtreecommitdiffstats
path: root/js/logger-ui.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/logger-ui.js')
-rw-r--r--js/logger-ui.js706
1 files changed, 359 insertions, 347 deletions
diff --git a/js/logger-ui.js b/js/logger-ui.js
index 590e67b..aefb733 100644
--- a/js/logger-ui.js
+++ b/js/logger-ui.js
@@ -21,164 +21,157 @@
uMatrix Home: https://github.com/gorhill/sessbench
*/
-/* global uDom */
-
'use strict';
-/******************************************************************************/
-
-(function() {
-
- /******************************************************************************/
-
- var tbody = document.querySelector('#content tbody');
- var trJunkyard = [];
- var tdJunkyard = [];
- var firstVarDataCol = 2; // currently, column 2 (0-based index)
- var lastVarDataIndex = 3; // currently, d0-d3
- var maxEntries = 0;
- var noTabId = '';
- var allTabIds = {};
- var allTabIdsToken;
- var ownerId = Date.now();
-
- var emphasizeTemplate = document.querySelector('#emphasizeTemplate > span');
- var hiddenTemplate = document.querySelector('#hiddenTemplate > span');
-
- var prettyRequestTypes = {
+(function () {
+ let tbody = document.querySelector('#content tbody');
+ let trJunkyard = [];
+ let tdJunkyard = [];
+ let firstVarDataCol = 2; // currently, column 2 (0-based index)
+ let lastVarDataIndex = 3; // currently, d0-d3
+ let maxEntries = 0;
+ let noTabId = '';
+ let allTabIds = {};
+ let allTabIdsToken;
+ let ownerId = Date.now();
+
+ let emphasizeTemplate = document.querySelector('#emphasizeTemplate > span');
+ let hiddenTemplate = document.querySelector('#hiddenTemplate > span');
+
+ let prettyRequestTypes = {
'main_frame': 'doc',
'stylesheet': 'css',
'sub_frame': 'frame',
'xmlhttprequest': 'xhr'
};
- var dontEmphasizeSet = new Set([
+ let dontEmphasizeSet = new Set([
'COOKIE',
'CSP',
'REFERER'
]);
- /******************************************************************************/
-
// Adjust top padding of content table, to match that of toolbar height.
- document.getElementById('content').style.setProperty(
- 'margin-top',
- document.getElementById('toolbar').clientHeight + 'px'
- );
+ document
+ .getElementById('content')
+ .style
+ .setProperty('margin-top',
+ document.getElementById('toolbar').clientHeight + 'px');
- /******************************************************************************/
-
- var classNameFromTabId = function(tabId) {
- if ( tabId === noTabId ) {
+ let classNameFromTabId = function (tabId) {
+ if (tabId === noTabId) {
return 'tab_bts';
}
- if ( tabId !== '' ) {
+ if (tabId !== '') {
return 'tab_' + tabId;
}
return '';
};
- /******************************************************************************/
-
// Emphasize hostname and cookie name.
- var emphasizeCookie = function(s) {
- var pnode = emphasizeHostname(s);
- if ( pnode.childNodes.length !== 3 ) {
+ let emphasizeCookie = function (s) {
+ let pnode = emphasizeHostname(s);
+ if (pnode.childNodes.length !== 3) {
return pnode;
}
- var prefix = '-cookie:';
- var text = pnode.childNodes[2].textContent;
- var beg = text.indexOf(prefix);
- if ( beg === -1 ) {
+
+ let prefix = '-cookie:';
+ let text = pnode.childNodes[2].textContent;
+
+ let beg = text.indexOf(prefix);
+ if (beg === -1) {
return pnode;
}
beg += prefix.length;
- var end = text.indexOf('}', beg);
- if ( end === -1 ) {
+
+ let end = text.indexOf('}', beg);
+ if (end === -1) {
return pnode;
}
- var cnode = emphasizeTemplate.cloneNode(true);
+
+ let cnode = emphasizeTemplate.cloneNode(true);
cnode.childNodes[0].textContent = text.slice(0, beg);
cnode.childNodes[1].textContent = text.slice(beg, end);
cnode.childNodes[2].textContent = text.slice(end);
pnode.replaceChild(cnode.childNodes[0], pnode.childNodes[2]);
pnode.appendChild(cnode.childNodes[0]);
pnode.appendChild(cnode.childNodes[0]);
+
return pnode;
};
- /******************************************************************************/
-
// Emphasize hostname in URL.
- var emphasizeHostname = function(url) {
- var hnbeg = url.indexOf('://');
- if ( hnbeg === -1 ) {
+ let emphasizeHostname = function (url) {
+ let hnbeg = url.indexOf('://');
+ if (hnbeg === -1) {
return document.createTextNode(url);
}
hnbeg += 3;
- var hnend = url.indexOf('/', hnbeg);
- if ( hnend === -1 ) {
+ let hnend = url.indexOf('/', hnbeg);
+ if (hnend === -1) {
hnend = url.slice(hnbeg).search(/\?#/);
- if ( hnend !== -1 ) {
+ if (hnend !== -1) {
hnend += hnbeg;
} else {
hnend = url.length;
}
}
- var node = emphasizeTemplate.cloneNode(true);
+ let node = emphasizeTemplate.cloneNode(true);
node.childNodes[0].textContent = url.slice(0, hnbeg);
node.childNodes[1].textContent = url.slice(hnbeg, hnend);
node.childNodes[2].textContent = url.slice(hnend);
+
return node;
};
- /******************************************************************************/
-
- var createCellAt = function(tr, index) {
- var td = tr.cells[index];
- var mustAppend = !td;
- if ( mustAppend ) {
+ let createCellAt = function (tr, index) {
+ let td = tr.cells[index];
+ let mustAppend = !td;
+ if (mustAppend) {
td = tdJunkyard.pop();
}
- if ( td ) {
+
+ if (td) {
td.removeAttribute('colspan');
td.textContent = '';
} else {
td = document.createElement('td');
}
- if ( mustAppend ) {
+ if (mustAppend) {
tr.appendChild(td);
}
+
return td;
};
- /******************************************************************************/
-
- var createRow = function(layout) {
- var tr = trJunkyard.pop();
- if ( tr ) {
+ let createRow = function (layout) {
+ let tr = trJunkyard.pop();
+ if (tr) {
tr.className = '';
} else {
tr = document.createElement('tr');
}
- for ( var index = 0; index < firstVarDataCol; index++ ) {
+
+ let index;
+ for (index=0; index<firstVarDataCol; ++index) {
createCellAt(tr, index);
}
- var i = 1, span = 1, td;
+
+ let i = 1, span = 1, td;
for (;;) {
td = createCellAt(tr, index);
- if ( i === lastVarDataIndex ) {
+ if (i === lastVarDataIndex) {
break;
}
- if ( layout.charAt(i) !== '1' ) {
+ if (layout.charAt(i) !== '1') {
span += 1;
} else {
- if ( span !== 1 ) {
+ if (span !== 1) {
td.setAttribute('colspan', span);
}
index += 1;
@@ -186,34 +179,30 @@
}
i += 1;
}
- if ( span !== 1 ) {
+
+ if (span !== 1) {
td.setAttribute('colspan', span);
}
index += 1;
- while ( (td = tr.cells[index]) ) {
+ while ((td = tr.cells[index])) {
tdJunkyard.push(tr.removeChild(td));
}
+
return tr;
};
- /******************************************************************************/
-
- var createHiddenTextNode = function(text) {
- var node = hiddenTemplate.cloneNode(true);
+ let createHiddenTextNode = function (text) {
+ let node = hiddenTemplate.cloneNode(true);
node.textContent = text;
return node;
};
- /******************************************************************************/
-
- var padTo2 = function(v) {
+ let padTo2 = function (v) {
return v < 10 ? '0' + v : v;
};
- /******************************************************************************/
-
- var createGap = function(tabId, url) {
- var tr = createRow('1');
+ let createGap = function (tabId, url) {
+ let tr = createRow('1');
tr.classList.add('doc');
tr.classList.add('tab');
tr.classList.add('canMtx');
@@ -222,39 +211,41 @@
tbody.insertBefore(tr, tbody.firstChild);
};
- /******************************************************************************/
-
- var renderLogEntry = function(entry) {
- var tr;
- var fvdc = firstVarDataCol;
+ let renderLogEntry = function (entry) {
+ let tr;
+ let fvdc = firstVarDataCol;
- switch ( entry.cat ) {
+ switch (entry.cat) {
case 'error':
case 'info':
tr = createRow('1');
- if ( entry.d0 === 'cookie' ) {
+ if (entry.d0 === 'cookie') {
tr.cells[fvdc].appendChild(emphasizeCookie(entry.d1));
} else {
tr.cells[fvdc].textContent = entry.d0;
}
break;
-
case 'net':
tr = createRow('111');
tr.classList.add('canMtx');
+
// If the request is that of a root frame, insert a gap in the table
// in order to visually separate entries for different documents.
- if ( entry.d2 === 'doc' && entry.tab !== noTabId ) {
+ if (entry.d2 === 'doc' && entry.tab !== noTabId) {
createGap(entry.tab, entry.d1);
}
- if ( entry.d3 ) {
+
+ if (entry.d3) {
tr.classList.add('blocked');
tr.cells[fvdc].textContent = '--';
} else {
tr.cells[fvdc].textContent = '';
}
- tr.cells[fvdc+1].textContent = (prettyRequestTypes[entry.d2] || entry.d2);
- if ( dontEmphasizeSet.has(entry.d2) ) {
+
+ tr.cells[fvdc+1].textContent =
+ (prettyRequestTypes[entry.d2] || entry.d2);
+
+ if (dontEmphasizeSet.has(entry.d2)) {
tr.cells[fvdc+2].textContent = entry.d1;
} else if ( entry.d2 === 'cookie' ) {
tr.cells[fvdc+2].appendChild(emphasizeCookie(entry.d1));
@@ -262,7 +253,6 @@
tr.cells[fvdc+2].appendChild(emphasizeHostname(entry.d1));
}
break;
-
default:
tr = createRow('1');
tr.cells[fvdc].textContent = entry.d0;
@@ -270,20 +260,22 @@
}
// Fields common to all rows.
- var time = logDate;
+ let time = logDate;
time.setTime(entry.tstamp - logDateTimezoneOffset);
- tr.cells[0].textContent = padTo2(time.getUTCHours()) + ':' +
- padTo2(time.getUTCMinutes()) + ':' +
- padTo2(time.getSeconds());
+ tr.cells[0].textContent = padTo2(time.getUTCHours())
+ + ':'
+ + padTo2(time.getUTCMinutes())
+ + ':'
+ + padTo2(time.getSeconds());
- if ( entry.tab ) {
+ if (entry.tab) {
tr.classList.add('tab');
tr.classList.add(classNameFromTabId(entry.tab));
- if ( entry.tab === noTabId ) {
+ if (entry.tab === noTabId) {
tr.cells[1].appendChild(createHiddenTextNode('bts'));
}
}
- if ( entry.cat !== '' ) {
+ if (entry.cat !== '') {
tr.classList.add('cat_' + entry.cat);
}
@@ -293,27 +285,25 @@
};
// Reuse date objects.
- var logDate = new Date(),
- logDateTimezoneOffset = logDate.getTimezoneOffset() * 60000;
-
- /******************************************************************************/
+ let logDate = new Date();
+ let logDateTimezoneOffset = logDate.getTimezoneOffset() * 60000;
- var renderLogEntries = function(response) {
- var entries = response.entries;
- if ( entries.length === 0 ) {
+ let renderLogEntries = function (response) {
+ let entries = response.entries;
+ if (entries.length === 0) {
return;
}
// Preserve scroll position
- var height = tbody.offsetHeight;
+ let height = tbody.offsetHeight;
- var tabIds = response.tabIds;
- var n = entries.length;
- var entry;
- for ( var i = 0; i < n; i++ ) {
+ let tabIds = response.tabIds;
+ let n = entries.length;
+ let entry;
+ for (let i=0; i<n; ++i) {
entry = entries[i];
// Unlikely, but it may happen
- if ( entry.tab && tabIds.hasOwnProperty(entry.tab) === false ) {
+ if (entry.tab && tabIds.hasOwnProperty(entry.tab) === false) {
continue;
}
renderLogEntry(entries[i]);
@@ -324,85 +314,94 @@
// dynamically refreshed pages.
truncateLog(maxEntries);
- var yDelta = tbody.offsetHeight - height;
- if ( yDelta === 0 ) {
+ let yDelta = tbody.offsetHeight - height;
+ if (yDelta === 0) {
return;
}
// Chromium:
// body.scrollTop = good value
// body.parentNode.scrollTop = 0
- if ( document.body.scrollTop !== 0 ) {
- document.body.scrollTop += yDelta;
- return;
- }
+ // if (document.body.scrollTop !== 0) {
+ // document.body.scrollTop += yDelta;
+ // return;
+ // }
// Firefox:
// body.scrollTop = 0
// body.parentNode.scrollTop = good value
- var parentNode = document.body.parentNode;
- if ( parentNode && parentNode.scrollTop !== 0 ) {
+ let parentNode = document.body.parentNode;
+ if (parentNode && parentNode.scrollTop !== 0) {
parentNode.scrollTop += yDelta;
}
};
- /******************************************************************************/
+ let synchronizeTabIds = function (newTabIds) {
+ let oldTabIds = allTabIds;
+ let autoDeleteVoidRows =
+ !!vAPI.localStorage.getItem('loggerAutoDeleteVoidRows');
+ let rowVoided = false;
+ let trs;
- var synchronizeTabIds = function(newTabIds) {
- var oldTabIds = allTabIds;
- var autoDeleteVoidRows = !!vAPI.localStorage.getItem('loggerAutoDeleteVoidRows');
- var rowVoided = false;
- var trs;
- for ( var tabId in oldTabIds ) {
- if ( oldTabIds.hasOwnProperty(tabId) === false ) {
+ for (let tabId in oldTabIds) {
+ if (oldTabIds.hasOwnProperty(tabId) === false) {
continue;
}
- if ( newTabIds.hasOwnProperty(tabId) ) {
+ if (newTabIds.hasOwnProperty(tabId)) {
continue;
}
// Mark or remove voided rows
trs = uDom('.tab_' + tabId);
- if ( autoDeleteVoidRows ) {
+
+ if (autoDeleteVoidRows) {
toJunkyard(trs);
} else {
trs.removeClass('canMtx');
rowVoided = true;
}
+
// Remove popup if it is currently bound to a removed tab.
- if ( tabId === popupManager.tabId ) {
+ if (tabId === popupManager.tabId) {
popupManager.toggleOff();
}
}
- var select = document.getElementById('pageSelector');
- var selectValue = select.value;
- var tabIds = Object.keys(newTabIds).sort(function(a, b) {
+ let select = document.getElementById('pageSelector');
+ let selectValue = select.value;
+ let tabIds = Object.keys(newTabIds).sort(function (a, b) {
return newTabIds[a].localeCompare(newTabIds[b]);
});
- var option;
- for ( var i = 0, j = 2; i < tabIds.length; i++ ) {
- tabId = tabIds[i];
- if ( tabId === noTabId ) {
+
+ let i, j;
+ for (i=0, j=2; i<tabIds.length; ++i) {
+ let tabId = tabIds[i];
+ if (tabId === noTabId) {
continue;
}
- option = select.options[j];
+
+ let option = select.options[j];
j += 1;
- if ( !option ) {
+
+ if (!option) {
option = document.createElement('option');
select.appendChild(option);
}
+
option.textContent = newTabIds[tabId];
option.value = classNameFromTabId(tabId);
- if ( option.value === selectValue ) {
+
+ if (option.value === selectValue) {
option.setAttribute('selected', '');
} else {
option.removeAttribute('selected');
}
}
- while ( j < select.options.length ) {
+
+ while (j < select.options.length) {
select.removeChild(select.options[j]);
}
- if ( select.value !== selectValue ) {
+
+ if (select.value !== selectValue) {
select.selectedIndex = 0;
select.value = '';
select.options[0].setAttribute('selected', '');
@@ -414,25 +413,22 @@
return rowVoided;
};
- /******************************************************************************/
-
- var truncateLog = function(size) {
- if ( size === 0 ) {
+ let truncateLog = function (size) {
+ if (size === 0) {
size = 5000;
}
- var tbody = document.querySelector('#content tbody');
+
+ let tbody = document.querySelector('#content tbody');
size = Math.min(size, 10000);
- var tr;
- while ( tbody.childElementCount > size ) {
- tr = tbody.lastElementChild;
+
+ while (tbody.childElementCount > size) {
+ let tr = tbody.lastElementChild;
trJunkyard.push(tbody.removeChild(tr));
}
};
- /******************************************************************************/
-
- var onLogBufferRead = function(response) {
- if ( !response || response.unavailable ) {
+ let onLogBufferRead = function (response) {
+ if (!response || response.unavailable) {
readLogBufferAsync();
return;
}
@@ -441,101 +437,98 @@
noTabId = response.noTabId;
// This may have changed meanwhile
- if ( response.maxLoggedRequests !== maxEntries ) {
+ if (response.maxLoggedRequests !== maxEntries) {
maxEntries = response.maxLoggedRequests;
uDom('#maxEntries').val(maxEntries || '');
}
// Neuter rows for which a tab does not exist anymore
- var rowVoided = false;
- if ( response.tabIdsToken !== allTabIdsToken ) {
+ let rowVoided = false;
+ if (response.tabIdsToken !== allTabIdsToken) {
rowVoided = synchronizeTabIds(response.tabIds);
allTabIdsToken = response.tabIdsToken;
}
renderLogEntries(response);
- if ( rowVoided ) {
- uDom('#clean').toggleClass(
- 'disabled',
- tbody.querySelector('tr.tab:not(.canMtx)') === null
- );
+ if (rowVoided) {
+ uDom('#clean')
+ .toggleClass('disabled',
+ tbody
+ .querySelector('tr.tab:not(.canMtx)') === null);
}
// Synchronize toolbar with content of log
- uDom('#clear').toggleClass(
- 'disabled',
- tbody.querySelector('tr') === null
- );
+ uDom('#clear').toggleClass('disabled',
+ tbody.querySelector('tr') === null);
readLogBufferAsync();
};
- /******************************************************************************/
+ // This can be called only once, at init time. After that, this
+ // will be called automatically. If called after init time, this
+ // will be messy, and this would require a bit more code to ensure
+ // no multi time out events.
- // This can be called only once, at init time. After that, this will be called
- // automatically. If called after init time, this will be messy, and this would
- // require a bit more code to ensure no multi time out events.
+ let readLogBuffer = function () {
+ if (ownerId === undefined) {
+ return;
+ }
- var readLogBuffer = function() {
- if ( ownerId === undefined ) { return; }
- vAPI.messaging.send(
- 'logger-ui.js',
- { what: 'readMany', ownerId: ownerId },
- onLogBufferRead
- );
+ vAPI.messaging.send('logger-ui.js', {
+ what: 'readMany',
+ ownerId: ownerId
+ }, onLogBufferRead);
};
- var readLogBufferAsync = function() {
- if ( ownerId === undefined ) { return; }
+ let readLogBufferAsync = function () {
+ if (ownerId === undefined) {
+ return;
+ }
vAPI.setTimeout(readLogBuffer, 1200);
};
- /******************************************************************************/
+ let pageSelectorChanged = function () {
+ let style = document.getElementById('tabFilterer');
+ let tabClass = document.getElementById('pageSelector').value;
+ let sheet = style.sheet;
- var pageSelectorChanged = function() {
- var style = document.getElementById('tabFilterer');
- var tabClass = document.getElementById('pageSelector').value;
- var sheet = style.sheet;
- while ( sheet.cssRules.length !== 0 ) {
+ while (sheet.cssRules.length !== 0) {
sheet.deleteRule(0);
}
- if ( tabClass !== '' ) {
- sheet.insertRule(
- '#content table tr:not(.' + tabClass + ') { display: none; }',
- 0
- );
+
+ if (tabClass !== '') {
+ sheet.insertRule('#content table tr:not(.'
+ + tabClass
+ + ') { display: none; }', 0);
}
- uDom('#refresh').toggleClass(
- 'disabled',
- tabClass === '' || tabClass === 'tab_bts'
- );
+ uDom('#refresh').toggleClass('disabled',
+ tabClass === '' || tabClass === 'tab_bts');
};
- /******************************************************************************/
-
- var refreshTab = function() {
- var tabClass = document.getElementById('pageSelector').value;
- var matches = tabClass.match(/^tab_(.+)$/);
- if ( matches === null ) {
+ let refreshTab = function () {
+ let tabClass = document.getElementById('pageSelector').value;
+ let matches = tabClass.match(/^tab_(.+)$/);
+ if (matches === null) {
return;
}
- if ( matches[1] === 'bts' ) {
+
+ if (matches[1] === 'bts') {
return;
}
- vAPI.messaging.send(
- 'logger-ui.js',
- { what: 'forceReloadTab', tabId: matches[1] }
- );
+
+ vAPI.messaging.send('logger-ui.js', {
+ what: 'forceReloadTab',
+ tabId: matches[1]
+ });
};
- /******************************************************************************/
+ let onMaxEntriesChanged = function () {
+ let raw = uDom(this).val();
- var onMaxEntriesChanged = function() {
- var raw = uDom(this).val();
try {
maxEntries = parseInt(raw, 10);
- if ( isNaN(maxEntries) ) {
+ if (isNaN(maxEntries)) {
maxEntries = 0;
}
} catch (e) {
@@ -551,51 +544,55 @@
truncateLog(maxEntries);
};
- /******************************************************************************/
-
- var rowFilterer = (function() {
- var filters = [];
+ let rowFilterer = (function () {
+ let filters = [];
- var parseInput = function() {
+ let parseInput = function () {
filters = [];
- var rawPart, hardBeg, hardEnd;
- var raw = uDom('#filterInput').val().trim();
- var rawParts = raw.split(/\s+/);
- var reStr, reStrs = [], not = false;
- var n = rawParts.length;
- for ( var i = 0; i < n; i++ ) {
+ let rawPart, hardBeg, hardEnd;
+ let raw = uDom('#filterInput').val().trim();
+ let rawParts = raw.split(/\s+/);
+ let reStr, reStrs = [], not = false;
+ let n = rawParts.length;
+
+ for (let i=0; i<n; ++i) {
rawPart = rawParts[i];
- if ( rawPart.charAt(0) === '!' ) {
- if ( reStrs.length === 0 ) {
+ if (rawPart.charAt(0) === '!') {
+ if (reStrs.length === 0) {
not = true;
}
rawPart = rawPart.slice(1);
}
+
hardBeg = rawPart.charAt(0) === '|';
- if ( hardBeg ) {
+ if (hardBeg) {
rawPart = rawPart.slice(1);
}
+
hardEnd = rawPart.slice(-1) === '|';
- if ( hardEnd ) {
+ if (hardEnd) {
rawPart = rawPart.slice(0, -1);
}
+
if ( rawPart === '' ) {
continue;
}
- // https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions
+
reStr = rawPart.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
- if ( hardBeg ) {
+ if (hardBeg) {
reStr = '(?:^|\\s)' + reStr;
}
- if ( hardEnd ) {
+ if (hardEnd) {
reStr += '(?:\\s|$)';
}
+
reStrs.push(reStr);
- if ( i < (n - 1) && rawParts[i + 1] === '||' ) {
+ if (i < (n - 1) && rawParts[i + 1] === '||') {
i += 1;
continue;
}
+
reStr = reStrs.length === 1 ? reStrs[0] : reStrs.join('|');
filters.push({
re: new RegExp(reStr, 'i'),
@@ -606,77 +603,85 @@
}
};
- var filterOne = function(tr, clean) {
- var ff = filters;
- var fcount = ff.length;
- if ( fcount === 0 && clean === true ) {
+ let filterOne = function (tr, clean) {
+ let ff = filters;
+ let fcount = ff.length;
+ if (fcount === 0 && clean === true) {
return;
}
- // do not filter out doc boundaries, they help separate important
- // section of log.
- var cl = tr.classList;
- if ( cl.contains('doc') ) {
+
+ // do not filter out doc boundaries, they help separate
+ // important section of log.
+ let cl = tr.classList;
+ if (cl.contains('doc')) {
return;
}
- if ( fcount === 0 ) {
+
+ if (fcount === 0) {
cl.remove('f');
return;
}
- var cc = tr.cells;
- var ccount = cc.length;
- var hit, j, f;
+
+ let cc = tr.cells;
+ let ccount = cc.length;
+ let hit, j, f;
+
// each filter expression must hit (implicit and-op)
// if...
// positive filter expression = there must one hit on any field
// negative filter expression = there must be no hit on all fields
- for ( var i = 0; i < fcount; i++ ) {
+ for (let i=0; i<fcount; ++i) {
f = ff[i];
hit = !f.r;
- for ( j = 0; j < ccount; j++ ) {
- if ( f.re.test(cc[j].textContent) ) {
+
+ for (j=0; j<ccount; ++j) {
+ if (f.re.test(cc[j].textContent)) {
hit = f.r;
break;
}
}
- if ( !hit ) {
+
+ if (!hit) {
cl.add('f');
return;
}
}
+
cl.remove('f');
};
- var filterAll = function() {
+ let filterAll = function () {
// Special case: no filter
- if ( filters.length === 0 ) {
+ if (filters.length === 0) {
uDom('#content tr').removeClass('f');
return;
}
- var tbody = document.querySelector('#content tbody');
- var rows = tbody.rows;
- var i = rows.length;
- while ( i-- ) {
+
+ let tbody = document.querySelector('#content tbody');
+ let rows = tbody.rows;
+ for (let i=rows.length-1; i>=0; --i) {
filterOne(rows[i]);
}
};
- var onFilterChangedAsync = (function() {
- var timer = null;
- var commit = function() {
+ let onFilterChangedAsync = (function () {
+ let timer = null;
+ let commit = function () {
timer = null;
parseInput();
filterAll();
};
- return function() {
- if ( timer !== null ) {
+
+ return function () {
+ if (timer !== null) {
clearTimeout(timer);
}
timer = vAPI.setTimeout(commit, 750);
};
})();
- var onFilterButton = function() {
- var cl = document.body.classList;
+ let onFilterButton = function () {
+ let cl = document.body.classList;
cl.toggle('f', cl.contains('f') === false);
};
@@ -685,113 +690,110 @@
return {
filterOne: filterOne,
- filterAll: filterAll
+ filterAll: filterAll,
};
})();
- /******************************************************************************/
-
- var toJunkyard = function(trs) {
+ let toJunkyard = function (trs) {
trs.remove();
- var i = trs.length;
- while ( i-- ) {
+ for (let i=trs.length-1; i>=0; --i) {
trJunkyard.push(trs.nodeAt(i));
}
};
- /******************************************************************************/
+ let clearBuffer = function () {
+ let tbody = document.querySelector('#content tbody');
+ let tr;
- var clearBuffer = function() {
- var tbody = document.querySelector('#content tbody');
- var tr;
- while ( tbody.firstChild !== null ) {
+ while (tbody.firstChild !== null) {
tr = tbody.lastElementChild;
trJunkyard.push(tbody.removeChild(tr));
}
+
uDom('#clear').addClass('disabled');
uDom('#clean').addClass('disabled');
};
- /******************************************************************************/
-
- var cleanBuffer = function() {
- var rows = uDom('#content tr.tab:not(.canMtx)').remove();
- var i = rows.length;
- while ( i-- ) {
+ let cleanBuffer = function () {
+ let rows = uDom('#content tr.tab:not(.canMtx)').remove();
+ for (let i=rows.length-1; i>=0; --i) {
trJunkyard.push(rows.nodeAt(i));
}
uDom('#clean').addClass('disabled');
};
- /******************************************************************************/
-
- var toggleCompactView = function() {
+ let toggleCompactView = function () {
document.body.classList.toggle('compactView');
uDom('#content table .vExpanded').removeClass('vExpanded');
};
- var toggleCompactRow = function(ev) {
+ let toggleCompactRow = function (ev) {
ev.target.parentElement.classList.toggle('vExpanded');
};
- /******************************************************************************/
-
- var popupManager = (function() {
- var realTabId = null;
- var localTabId = null;
- var container = null;
- var popup = null;
- var popupObserver = null;
- var style = null;
- var styleTemplate = [
+ let popupManager = (function () {
+ let realTabId = null;
+ let localTabId = null;
+ let container = null;
+ let popup = null;
+ let popupObserver = null;
+ let style = null;
+ let styleTemplate = [
'tr:not(.tab_{{tabId}}) {',
'cursor: not-allowed;',
'opacity: 0.2;',
'}'
].join('\n');
- var resizePopup = function() {
- if ( popup === null ) {
+ let resizePopup = function () {
+ if (popup === null) {
return;
}
- var popupBody = popup.contentWindow.document.body;
- if ( popupBody.clientWidth !== 0 && container.clientWidth !== popupBody.clientWidth ) {
+
+ let popupBody = popup.contentWindow.document.body;
+ if (popupBody.clientWidth !== 0
+ && container.clientWidth !== popupBody.clientWidth) {
container.style.setProperty('width', popupBody.clientWidth + 'px');
}
+
popup.style.removeProperty('height');
- if ( popupBody.clientHeight !== 0 && popup.clientHeight !== popupBody.clientHeight ) {
+ if (popupBody.clientHeight !== 0
+ && popup.clientHeight !== popupBody.clientHeight) {
popup.style.setProperty('height', popupBody.clientHeight + 'px');
}
- var ph = document.documentElement.clientHeight;
- var crect = container.getBoundingClientRect();
- if ( crect.height > ph ) {
+
+ let ph = document.documentElement.clientHeight;
+ let crect = container.getBoundingClientRect();
+ if (crect.height > ph) {
popup.style.setProperty('height', 'calc(' + ph + 'px - 1.8em)');
}
+
// Adjust width for presence/absence of vertical scroll bar which may
// have appeared as a result of last operation.
- var cw = container.clientWidth;
- var dw = popup.contentWindow.document.documentElement.clientWidth;
- if ( cw !== dw ) {
+ let cw = container.clientWidth;
+ let dw = popup.contentWindow.document.documentElement.clientWidth;
+ if (cw !== dw) {
container.style.setProperty('width', (2 * cw - dw) + 'px');
}
};
- var toggleSize = function() {
+ let toggleSize = function () {
container.classList.toggle('hide');
};
- var onResizeRequested = function() {
- var popupBody = popup.contentWindow.document.body;
- if ( popupBody.hasAttribute('data-resize-popup') === false ) {
+ let onResizeRequested = function () {
+ let popupBody = popup.contentWindow.document.body;
+ if (popupBody.hasAttribute('data-resize-popup') === false) {
return;
}
+
popupBody.removeAttribute('data-resize-popup');
resizePopup();
};
- var onLoad = function() {
+ let onLoad = function () {
resizePopup();
- var popupBody = popup.contentDocument.body;
+ let popupBody = popup.contentDocument.body;
popupBody.removeAttribute('data-resize-popup');
popupObserver.observe(popupBody, {
attributes: true,
@@ -799,21 +801,26 @@
});
};
- var toggleOn = function(td) {
- var tr = td.parentNode;
- var matches = tr.className.match(/(?:^| )tab_([^ ]+)/);
- if ( matches === null ) {
+ let toggleOn = function (td) {
+ let tr = td.parentNode;
+ let matches = tr.className.match(/(?:^| )tab_([^ ]+)/);
+ if (matches === null) {
return;
}
+
realTabId = localTabId = matches[1];
- if ( localTabId === 'bts' ) {
+ if (localTabId === 'bts') {
realTabId = noTabId;
}
container = document.getElementById('popupContainer');
- container.querySelector('div > span:nth-of-type(1)').addEventListener('click', toggleSize);
- container.querySelector('div > span:nth-of-type(2)').addEventListener('click', toggleOff);
+ container
+ .querySelector('div > span:nth-of-type(1)')
+ .addEventListener('click', toggleSize);
+ container
+ .querySelector('div > span:nth-of-type(2)')
+ .addEventListener('click', toggleOff);
popup = document.createElement('iframe');
popup.addEventListener('load', onLoad);
@@ -827,11 +834,15 @@
document.body.classList.add('popupOn');
};
- var toggleOff = function() {
+ let toggleOff = function () {
document.body.classList.remove('popupOn');
- container.querySelector('div > span:nth-of-type(1)').removeEventListener('click', toggleSize);
- container.querySelector('div > span:nth-of-type(2)').removeEventListener('click', toggleOff);
+ container
+ .querySelector('div > span:nth-of-type(1)')
+ .removeEventListener('click', toggleSize);
+ container
+ .querySelector('div > span:nth-of-type(2)')
+ .removeEventListener('click', toggleOff);
container.classList.remove('hide');
popup.removeEventListener('load', onLoad);
@@ -848,41 +859,45 @@
realTabId = null;
};
- var exports = {
- toggleOn: function(ev) {
- if ( realTabId === null ) {
+ let exports = {
+ toggleOn: function (ev) {
+ if (realTabId === null) {
toggleOn(ev.target);
}
},
- toggleOff: function() {
- if ( realTabId !== null ) {
+ toggleOff: function () {
+ if (realTabId !== null) {
toggleOff();
}
}
};
Object.defineProperty(exports, 'tabId', {
- get: function() { return realTabId || 0; }
+ get: function () {
+ return realTabId || 0;
+ },
});
return exports;
})();
- /******************************************************************************/
-
- var grabView = function() {
- if ( ownerId === undefined ) {
+ let grabView = function () {
+ if (ownerId === undefined) {
ownerId = Date.now();
}
readLogBufferAsync();
};
- var releaseView = function() {
- if ( ownerId === undefined ) { return; }
- vAPI.messaging.send(
- 'logger-ui.js',
- { what: 'releaseView', ownerId: ownerId }
- );
+ let releaseView = function () {
+ if (ownerId === undefined) {
+ return;
+ }
+
+ vAPI.messaging.send('logger-ui.js', {
+ what: 'releaseView',
+ ownerId: ownerId
+ });
+
ownerId = undefined;
};
@@ -891,8 +906,6 @@
// https://bugzilla.mozilla.org/show_bug.cgi?id=1398625
window.addEventListener('beforeunload', releaseView);
- /******************************************************************************/
-
readLogBuffer();
uDom('#pageSelector').on('change', pageSelectorChanged);
@@ -901,9 +914,8 @@
uDom('#clean').on('click', cleanBuffer);
uDom('#clear').on('click', clearBuffer);
uDom('#maxEntries').on('change', onMaxEntriesChanged);
- uDom('#content table').on('click', 'tr > td:nth-of-type(1)', toggleCompactRow);
- uDom('#content table').on('click', 'tr.canMtx > td:nth-of-type(2)', popupManager.toggleOn);
-
- /******************************************************************************/
-
+ uDom('#content table').on('click', 'tr > td:nth-of-type(1)',
+ toggleCompactRow);
+ uDom('#content table').on('click', 'tr.canMtx > td:nth-of-type(2)',
+ popupManager.toggleOn);
})();