1
0
Fork 0
mirror of https://github.com/gorhill/uMatrix.git synced 2024-06-02 02:14:52 +12:00

this fixes #8 (the 2nd part)

This commit is contained in:
gorhill 2014-10-25 20:03:22 -04:00
parent b31b7227ff
commit 9441ffe719

View file

@ -134,54 +134,100 @@ function getGroupStats() {
var columnOffsets = matrixSnapshot.headers;
var anyTypeOffset = columnOffsets['*'];
var hostname, domain;
var row, color, groupIndex;
var row, color, count, groupIndex;
var domainToGroupMap = {};
// First pass: put each domain in a group
// These have hard-coded position which cannot be overriden
domainToGroupMap['1st-party'] = 0;
domainToGroupMap[pageDomain] = 1;
// 1st pass: domain wins if it has an explicit rule or a count
for ( hostname in rows ) {
if ( rows.hasOwnProperty(hostname) === false ) {
continue;
}
// '*' is for header, ignore since header is always at the top
if ( hostname === '*' ) {
if ( hostname === '*' || hostname === '1st-party' ) {
continue;
}
row = rows[hostname];
domain = row.domain;
// literal "1st-party" row always into group 0
if ( hostname === '1st-party' ) {
domainToGroupMap[domain] = 0;
continue;
}
// 1st-party hostnames always into group 1
if ( domain === pageDomain ) {
domainToGroupMap[domain] = 1;
domain = rows[hostname].domain;
if ( domain === pageDomain || hostname !== domain ) {
continue;
}
row = rows[domain];
color = row.temporary[anyTypeOffset];
groupIndex = domainToGroupMap[domain] || 3; // anything overrides 3
// group 2: whitelisted (does not override 0, 1)
if ( color === DarkGreen ) {
domainToGroupMap[domain] = 2;
continue;
}
// group 4: blacklisted (does not override 0, 1, 2)
if ( color === DarkRed ) {
if ( groupIndex === 3 ) {
domainToGroupMap[domain] = 4;
}
domainToGroupMap[domain] = 4;
continue;
}
// group 3: graylisted (does not override 0, 1, 2, 4)
if ( groupIndex !== 3 ) {
count = row.counts[anyTypeOffset];
if ( count !== 0 ) {
domainToGroupMap[domain] = 3;
continue;
}
}
// 2nd pass: green wins
for ( hostname in rows ) {
if ( rows.hasOwnProperty(hostname) === false ) {
continue;
}
row = rows[hostname];
domain = row.domain;
if ( domainToGroupMap.hasOwnProperty(domain) ) {
continue;
}
color = row.temporary[anyTypeOffset];
if ( color === DarkGreen ) {
domainToGroupMap[domain] = 2;
}
}
// 3rd pass: gray with count wins
for ( hostname in rows ) {
if ( rows.hasOwnProperty(hostname) === false ) {
continue;
}
row = rows[hostname];
domain = row.domain;
if ( domainToGroupMap.hasOwnProperty(domain) ) {
continue;
}
color = row.temporary[anyTypeOffset];
count = row.counts[anyTypeOffset];
if ( color !== DarkRed && count !== 0 ) {
domainToGroupMap[domain] = 3;
}
}
// 4th pass: red wins whatever is left
for ( hostname in rows ) {
if ( rows.hasOwnProperty(hostname) === false ) {
continue;
}
row = rows[hostname];
domain = row.domain;
if ( domainToGroupMap.hasOwnProperty(domain) ) {
continue;
}
color = row.temporary[anyTypeOffset];
if ( color === DarkRed ) {
domainToGroupMap[domain] = 4;
}
}
// 5th pass: gray wins whatever is left
for ( hostname in rows ) {
if ( rows.hasOwnProperty(hostname) === false ) {
continue;
}
domain = rows[hostname].domain;
if ( domainToGroupMap.hasOwnProperty(domain) ) {
continue;
}
domainToGroupMap[domain] = 3;
}
// Second pass: put each domain in a group
// Last pass: put each domain in a group
var groups = [ {}, {}, {}, {}, {} ];
var group;
for ( hostname in rows ) {
@ -191,8 +237,7 @@ function getGroupStats() {
if ( hostname === '*' ) {
continue;
}
row = rows[hostname];
domain = row.domain;
domain = rows[hostname].domain;
groupIndex = domainToGroupMap[domain];
group = groups[groupIndex];
if ( group.hasOwnProperty(domain) === false ) {
@ -624,13 +669,13 @@ function makeMatrixGroup0SectionDomain() {
return makeMatrixRowDomain('1st-party').addClass('g0 l1');
}
function makeMatrixGroup0Section(hostnames) {
function makeMatrixGroup0Section() {
var domainDiv = createMatrixSection().prop('domain', '1st-party');
makeMatrixGroup0SectionDomain().appendTo(domainDiv);
return domainDiv;
}
function makeMatrixGroup0(group) {
function makeMatrixGroup0() {
// Show literal "1st-party" row only if there is
// at least one 1st-party hostname
if ( Object.keys(groupsSnapshot[1]).length === 0 ) {