code reviewed implementation of high-medium generic cosmetic filters

This commit is contained in:
gorhill 2015-09-11 17:59:25 -04:00
parent 032becfd76
commit 59bdcbdb7e
3 changed files with 30 additions and 6 deletions

View file

@ -93,7 +93,7 @@ return {
// read-only
systemSettings: {
compiledMagic: 'rzohdugizuxh',
compiledMagic: 'wzwgqiwgjhsh',
selfieMagic: 'mnigwksyvgkv'
},

View file

@ -577,19 +577,39 @@ var uBlockCollapser = (function() {
var nodeList = selectNodes('a[href^="http"]');
var iNode = nodeList.length;
var node, href, pos, hash, selectors, selector, iSelector;
while ( iNode-- ) {
node = nodeList[iNode];
href = node.getAttribute('href');
if ( !href ) { continue; }
pos = href.indexOf('://');
if ( pos === -1 ) { continue; }
hash = href.slice(pos + 3, pos + 11);
selectors = generics[hash];
if ( selectors === undefined ) { continue; }
// A string.
if ( typeof selectors === 'string' ) {
if (
href.lastIndexOf(selectors.slice(8, -2), 0) === 0 &&
injectedSelectors.hasOwnProperty(selectors) === false
) {
injectedSelectors[selectors] = true;
out.push(selectors);
}
continue;
}
// An array of strings.
iSelector = selectors.length;
while ( iSelector-- ) {
selector = selectors[iSelector];
if ( injectedSelectors.hasOwnProperty(selector) === false ) {
if (
href.lastIndexOf(selector.slice(8, -2), 0) === 0 &&
injectedSelectors.hasOwnProperty(selector) === false
) {
injectedSelectors[selector] = true;
out.push(selector);
}

View file

@ -769,7 +769,7 @@ FilterContainer.prototype.fromCompiledContent = function(text, lineBeg, skip) {
var lineEnd;
var textEnd = text.length;
var line, fields, filter, bucket;
var line, fields, filter, key, bucket;
while ( lineBeg < textEnd ) {
if ( text.charAt(lineBeg) !== 'c' ) {
@ -841,10 +841,14 @@ FilterContainer.prototype.fromCompiledContent = function(text, lineBeg, skip) {
}
if ( fields[0] === 'hmg0' ) {
if ( Array.isArray(this.highMediumGenericHide[fields[1]]) ) {
this.highMediumGenericHide[fields[1]].push(fields[2]);
key = fields[1];
bucket = this.highMediumGenericHide[key];
if ( bucket === undefined ) {
this.highMediumGenericHide[key] = fields[2];
} else if ( Array.isArray(bucket) ) {
bucket.push(fields[2]);
} else {
this.highMediumGenericHide[fields[1]] = [fields[2]];
this.highMediumGenericHide[key] = [bucket, fields[2]];
}
this.highMediumGenericHideCount += 1;
continue;