From 5102bd7c21fc208dbf97205eeb7c577986448225 Mon Sep 17 00:00:00 2001 From: gorhill Date: Wed, 2 Jul 2014 16:52:57 -0400 Subject: [PATCH] highlight part hit by filter --- js/popup.js | 5 ++++- js/stats.js | 61 +++++++++++++++++++++++++++++++++++++++++++++-------- popup.html | 4 ++-- stats.html | 4 ++++ 4 files changed, 62 insertions(+), 12 deletions(-) diff --git a/js/popup.js b/js/popup.js index 610b002d4..adde7b02e 100644 --- a/js/popup.js +++ b/js/popup.js @@ -68,7 +68,10 @@ var renderStats = function() { return; } - uDom('#gotoLog').toggleClass('enabled', stats.logBlockedRequests); + uDom('#gotoLog').toggleClass( + 'enabled', + stats.netFilteringSwitch && stats.logBlockedRequests + ); var blocked = stats.pageBlockedRequestCount; var total = stats.pageAllowedRequestCount + blocked; diff --git a/js/stats.js b/js/stats.js index 84b24a750..c45e959fd 100644 --- a/js/stats.js +++ b/js/stats.js @@ -54,6 +54,55 @@ var toPrettyTypeNames = { /******************************************************************************/ +var renderURL = function(url, filter) { + var chunkSize = 50; + // make a regex out of the filter + var reText = filter; + var pos = reText.indexOf('$'); + if ( pos > 0 ) { + reText = reText.slice(0, pos); + } + reText = reText + .replace(/\./g, '\\.') + .replace(/\?/g, '\\?') + .replace('||', '') + .replace(/\^/g, '.') + .replace(/\*/g, '.*') + ; + var re = new RegExp(reText, 'g'); + var matches = re.exec(url); + if ( !matches || !matches[0].length ) { + return url; + } + var renderedURL = []; + while ( url.length ) { + renderedURL.push(url.slice(0, chunkSize)); + url = url.slice(chunkSize); + } + + var index = (re.lastIndex / chunkSize) | 0; + var offset = re.lastIndex % chunkSize; + if ( offset === 0 ) { + offset = 0; + index -= 1; + } + var segment = renderedURL[index]; + renderedURL[index] = segment.slice(0, offset) + '' + segment.slice(offset); + + index = (matches.index / chunkSize) | 0; + offset = matches.index % chunkSize; + if ( offset === 0 ) { + offset = 0; + index -= 1; + } + segment = renderedURL[index]; + renderedURL[index] = segment.slice(0, offset) + '' + segment.slice(offset); + + return renderedURL.join('\n'); +}; + +/******************************************************************************/ + var renderPageDetails = function(tabId) { if ( !cachedPageSelectors[tabId] ) { return; @@ -63,7 +112,7 @@ var renderPageDetails = function(tabId) { if ( details.hash === cachedPageHash ) { return; } - blockedRequests = details.requests || []; + var blockedRequests = details.requests || []; blockedRequests.sort(function(a, b) { var r = a.domain.localeCompare(b.domain); if ( r === 0 ) { @@ -77,22 +126,16 @@ var renderPageDetails = function(tabId) { uDom('#tableHeader ~ tr').remove(); - var blockedRequest, requestURL, renderedURL; + var blockedRequest, requestURL; var html = []; for ( var i = 0; i < blockedRequests.length; i++ ) { blockedRequest = blockedRequests[i]; - requestURL = blockedRequest.url; - renderedURL = []; - while ( requestURL.length ) { - renderedURL.push(requestURL.slice(0, 60)); - requestURL = requestURL.slice(60); - } html.push( '', '', toPrettyTypeNames[blockedRequest.type] || blockedRequest.type, '', blockedRequest.domain, - '', renderedURL.join('\n'), + '', renderURL(blockedRequest.url, blockedRequest.reason), '', blockedRequest.reason ); } diff --git a/popup.html b/popup.html index b9faedb5b..712c78da6 100644 --- a/popup.html +++ b/popup.html @@ -71,10 +71,10 @@ p { #gotoLog { display: none; font-size: 14px; - color: gray; + color: #aaa; cursor: pointer; } -#gotoLog.hover { +#gotoLog:hover { color: #444; } #gotoLog.enabled { diff --git a/stats.html b/stats.html index f08b59182..f35ec7e4c 100644 --- a/stats.html +++ b/stats.html @@ -39,6 +39,10 @@ td, th { td:nth-of-type(2) { text-align: right; } +td:nth-of-type(3) b { + padding: 2px 0; + background-color: #ff8; + } #blockedRequests { margin: 2em 0 0 0; display: none;