Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: files/parse.js

Issue 8493027: Acquired Opera AdBlock code (Closed)
Patch Set: Created Oct. 2, 2012, 1:15 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: files/parse.js
===================================================================
new file mode 100644
--- /dev/null
+++ b/files/parse.js
@@ -0,0 +1,105 @@
+const parse = {/*
+ opera: function(content, add) {
+ //if(content.indexOf(';') == 0)//Comment
+ // return;
+ if(add)
+ opera.extension.urlfilter.block.add(content);
+ else
+ opera.extension.urlfilter.block.remove(content);
+ },*/
+ adblock: function(content, add) {
Felix Dahlke 2012/10/05 15:47:16 This function has a lot of code duplication, we sh
+ var url = this.wildcard(content.replace(/^@@/, '').replace(/\$.*$/, ''));
+ //opera.postError(content);
+ if(content.match(/\$/)) { //Is a type-specific rule
+ option = this.options(content.split('$')[1].split(','));
+
+ if(content.match(/^@@/)) {
+ if(add)
+ opera.extension.urlfilter.allow.add(url, option);
Felix Dahlke 2012/10/05 15:47:16 If we're using urlfilter.allow, filters with "adbl
+ else
+ opera.extension.urlfilter.allow.remove(url, option);
+ }
+ else {
+ if(add)
+ opera.extension.urlfilter.block.add(url, option);
+ else
+ opera.extension.urlfilter.block.remove(url, option);
+ }
+ }
+ else {
+ if(content.match(/^@@/)) {
+ if(add)
+ opera.extension.urlfilter.allow.add(url);
Felix Dahlke 2012/10/05 15:47:16 See above.
+ else
+ opera.extension.urlfilter.allow.remove(url);
+ }
+ else {
+ if(add)
+ opera.extension.urlfilter.block.add(url);
+ else
+ opera.extension.urlfilter.block.remove(url);
+ }
+ }
+ },
+ map: {
+ 'script': opera.extension.urlfilter.RESOURCE_SCRIPT,
+ 'image': opera.extension.urlfilter.RESOURCE_IMAGE,
+ 'stylesheet': opera.extension.urlfilter.RESOURCE_STYLESHEET,
+ 'object': opera.extension.urlfilter.RESOURCE_OBJECT,
+ 'xmlhttprequest': opera.extension.urlfilter.RESOURCE_XMLHTTPREQUEST,
+ 'object-subrequest': opera.extension.urlfilter.RESOURCE_OBJECT_SUBREQUEST,
+ 'subdocument': opera.extension.urlfilter.RESOURCE_SUBDOCUMENT,
+ 'document': opera.extension.urlfilter.RESOURCE_DOCUMENT,
+ //'refresh': opera.extension.urlfilter.RESOURCE_REFRESH,
+ //'media': opera.extension.urlfilter.RESOURCE_MEDIA,
+ //'font': opera.extension.urlfilter.RESOURCE_FONT,
+ 'other': opera.extension.urlfilter.RESOURCE_OTHER,
+ 'all': opera.extension.urlfilter.RESOURCE_SCRIPT | opera.extension.urlfilter.RESOURCE_IMAGE | opera.extension.urlfilter.RESOURCE_STYLESHEET | opera.extension.urlfilter.RESOURCE_OBJECT |
Felix Dahlke 2012/10/05 15:47:16 We should generate this 'all' mask from the flags
+ opera.extension.urlfilter.RESOURCE_XMLHTTPREQUEST | opera.extension.urlfilter.RESOURCE_OBJECT_SUBREQUEST | opera.extension.urlfilter.RESOURCE_SUBDOCUMENT | opera.extension.urlfilter.RESOURCE_DOCUMENT |
+ opera.extension.urlfilter.RESOURCE_REFRESH | opera.extension.urlfilter.RESOURCE_MEDIA | opera.extension.urlfilter.RESOURCE_FONT | opera.extension.urlfilter.RESOURCE_OTHER
+ },
+ options: function(special) {
+ var option = {excludeDomains: [], includeDomains: [], resources: this.map['all']};
+ var additive = false;
+ for(i in special) {
+ var element = special[i];
+ if(element.match(/^domain/i) == 0) { //TESTED
Felix Dahlke 2012/10/05 15:47:16 What is "TESTED" supposed to mean? That this expre
+ var domains = special[i].split('=')[1].split(',');
Felix Dahlke 2012/10/05 15:47:16 What if there is no "="? The above should match fo
+ for(j in domains) {
+ if(domains[j].match(/^~/)) //Don't apply on this website
Felix Dahlke 2012/10/05 15:47:16 This could be made more succinct by setting the op
+ option['excludeDomains'].push(domains[j]);
+ else //Apply on this website
+ option['includeDomains'].push(domains[j]);
+ }
+ }
+ else if(!element.match(/^elemhide/i)) { //No support for ElemHide - TESTED
Felix Dahlke 2012/10/05 15:47:16 "TESTED" again? What about bogus or unsupported op
+ if(!element.match(/^~/i)) {
Felix Dahlke 2012/10/05 15:47:16 Case insensitive matching makes no sense for "~".
+ if(!additive) {
+ additive = true;
+ option['resources'] = 0;
+ }
+ option['resources'] += this.map[element];
Felix Dahlke 2012/10/05 15:47:16 That's not how a bit flag is added to a mask ("|="
+ }
+ else if(!additive)
+ option['resources'] -= this.map[element];
Felix Dahlke 2012/10/05 15:47:16 That's not how a bit flag is removed from a bit ma
+ }
+ }
+ return option;
+ },
+ wildcard: function(url) { //TESTED
Felix Dahlke 2012/10/05 15:47:16 "TESTED" again? There's a bit of duplication here
+ //| at the beginning or end means no wildcard
+
+ if(!url.match(/^\|\|/)) { //Does not starts with ||
+ if(url.match(/^\|/)) //Starts with |
+ url = url.replace(/^\|/, ''); //Remove the |
+ else if(!url.match(/^\*/)) //Avoid **
+ url = '*' + url; //Add the wildcard
+ }
+ if(url.match(/\|$/)) //Ends with |
+ url = url.replace(/\|$/, ''); //Remove the |
+ else if(!url.match(/\*$/)) //Avoid **
+ url = url + '*'; //Add the wildcard
+
+ return url;
+ }
+};

Powered by Google App Engine
This is Rietveld