re. #781: backward compatibility code to ignore unsupported explicit style properties

This commit is contained in:
gorhill 2015-10-04 13:27:05 -04:00
parent f0b65eb6e8
commit a92c8f1413
1 changed files with 21 additions and 13 deletions

View File

@ -230,21 +230,19 @@ FilterEntity.fromSelfie = function(s) {
/******************************************************************************/ /******************************************************************************/
var FilterParser = function() { var FilterParser = function() {
this.prefix = ''; this.prefix = this.suffix = this.style = '';
this.suffix = '';
this.unhide = 0; this.unhide = 0;
this.hostnames = []; this.hostnames = [];
this.invalid = false; this.invalid = false;
this.cosmetic = true; this.cosmetic = true;
this.reParser = /^\s*([^#]*)(##|#@#)(.+)\s*$/; this.reParser = /^([^#]*?)(##|#@#)(.+)$/;
this.reScriptContains = /^script:contains\(.+?\)$/; this.reScriptContains = /^script:contains\(.+?\)$/;
}; };
/******************************************************************************/ /******************************************************************************/
FilterParser.prototype.reset = function() { FilterParser.prototype.reset = function() {
this.prefix = ''; this.prefix = this.suffix = this.style = '';
this.suffix = '';
this.unhide = 0; this.unhide = 0;
this.hostnames.length = 0; this.hostnames.length = 0;
this.invalid = false; this.invalid = false;
@ -263,11 +261,20 @@ FilterParser.prototype.parse = function(s) {
this.cosmetic = false; this.cosmetic = false;
return this; return this;
} }
this.prefix = matches[1].trim();
// Remember original string
this.prefix = matches[1];
this.suffix = matches[3];
this.unhide = matches[2].charAt(1) === '@' ? 1 : 0; this.unhide = matches[2].charAt(1) === '@' ? 1 : 0;
this.suffix = matches[3].trim();
// Cosmetic filters with explicit style properties can apply only:
// - to specific cosmetic filters (those which apply to a specific site)
// - to block cosmetic filters (not exception cosmetic filters)
if ( this.suffix.slice(-1) === '}' ) {
// Not supported for now: this code will ensure some backward
// compatibility for when cosmetic filters with explicit style
// properties start to be in use.
this.invalid = true;
return this;
}
// 2014-05-23: // 2014-05-23:
// https://github.com/gorhill/httpswitchboard/issues/260 // https://github.com/gorhill/httpswitchboard/issues/260
@ -285,6 +292,10 @@ FilterParser.prototype.parse = function(s) {
this.suffix = this.suffix.slice(1); this.suffix = this.suffix.slice(1);
} }
if ( this.prefix !== '' ) {
this.hostnames = this.prefix.split(/\s*,\s*/);
}
// Script tag filters: pre-process them so that can be used with minimal // Script tag filters: pre-process them so that can be used with minimal
// overhead in the content script. // overhead in the content script.
// Examples: // Examples:
@ -293,7 +304,7 @@ FilterParser.prototype.parse = function(s) {
if ( this.suffix.charAt(0) === 's' && this.reScriptContains.test(this.suffix) ) { if ( this.suffix.charAt(0) === 's' && this.reScriptContains.test(this.suffix) ) {
// Currently supported only as non-generic selector. Also, exception // Currently supported only as non-generic selector. Also, exception
// script tag filter makes no sense, ignore. // script tag filter makes no sense, ignore.
if ( this.prefix.length === 0 || this.unhide === 1 ) { if ( this.hostnames.length === 0 || this.unhide === 1 ) {
this.invalid = true; this.invalid = true;
return this; return this;
} }
@ -306,9 +317,6 @@ FilterParser.prototype.parse = function(s) {
} }
} }
if ( this.prefix !== '' ) {
this.hostnames = this.prefix.split(/\s*,\s*/);
}
return this; return this;
}; };