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

Side by Side Diff: files/parse.js

Issue 8483154: Adding ABP core modules to ABP/Opera (Closed)
Patch Set: Created Oct. 11, 2012, 9:35 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 const parse = {
2 adblock: function(content, add) {
3 var url = this.wildcard(content.replace(/^@@/, '').replace(/\$.* $/, ''));
4 var option = undefined;
5 if(content.match(/\$/)) { //Is a type-specific rule
6 option = this.options(content.split('$')[1].split(','));
7 }
8
9 if(content.match(/^@@/)) {
10 if(add)
11 opera.extension.urlfilter.allow.add(url, option) ;
12 else
13 opera.extension.urlfilter.allow.remove(url, opti on);
14 }
15 else {
16 if(add)
17 opera.extension.urlfilter.block.add(url, option) ;
18 else
19 opera.extension.urlfilter.block.remove(url, opti on);
20 }
21 },
22 adblockOld: function(content, add) { //Parsing of the content for older versions of Opera
23 if(!content.match(/^@@/)) { //Whitelist is not supported
24 var url = this.sepCharacters([this.wildcard(content.repl ace(/\$.*$/, ''))]); //Removes the special rules as those are not supported on o lder versions of Opera
25 if(add)
26 for(i in url)
27 opera.extension.urlfilter.block.add(url[ i]);
28 else
29 for(i in url)
30 opera.extension.urlfilter.block.remove(u rl[i]);
31 }
32 },
33 map: {
34 'script': opera.extension.urlfilter.RESOURCE_SCRIPT,
35 'image': opera.extension.urlfilter.RESOURCE_IMAGE,
36 'stylesheet': opera.extension.urlfilter.RESOURCE_STYLESHEET,
37 'object': opera.extension.urlfilter.RESOURCE_OBJECT,
38 'xmlhttprequest': opera.extension.urlfilter.RESOURCE_XMLHTTPREQU EST,
39 'object-subrequest': opera.extension.urlfilter.RESOURCE_OBJECT_S UBREQUEST,
40 'subdocument': opera.extension.urlfilter.RESOURCE_SUBDOCUMENT,
41 'document': opera.extension.urlfilter.RESOURCE_DOCUMENT,
42 //'refresh': opera.extension.urlfilter.RESOURCE_REFRESH,
43 //'media': opera.extension.urlfilter.RESOURCE_MEDIA,
44 //'font': opera.extension.urlfilter.RESOURCE_FONT,
45 'other': opera.extension.urlfilter.RESOURCE_OTHER,
46 'all': opera.extension.urlfilter.RESOURCE_SCRIPT | opera.extensi on.urlfilter.RESOURCE_IMAGE | opera.extension.urlfilter.RESOURCE_STYLESHEET | op era.extension.urlfilter.RESOURCE_OBJECT |
47 opera.extension.urlfilter.RESOURCE_XMLHTTPREQUEST | oper a.extension.urlfilter.RESOURCE_OBJECT_SUBREQUEST | opera.extension.urlfilter.RES OURCE_SUBDOCUMENT | opera.extension.urlfilter.RESOURCE_DOCUMENT |
48 opera.extension.urlfilter.RESOURCE_REFRESH | opera.exten sion.urlfilter.RESOURCE_MEDIA | opera.extension.urlfilter.RESOURCE_FONT | opera. extension.urlfilter.RESOURCE_OTHER
49 },
50 options: function(special) {
51 var option = {excludeDomains: [], includeDomains: [], resources: this.map['all']};
52 var additive = false;
53 for(i in special) {
54 var element = special[i];
55 if(element.match(/^domain/i) == 0) { //TESTED
56 var domains = special[i].split('=')[1].split(',' );
57 for(j in domains) {
58 if(domains[j].match(/^~/)) //Don't apply on this website
59 option['excludeDomains'].push(do mains[j]);
60 else //Apply on this website
61 option['includeDomains'].push(do mains[j]);
62 }
63 }
64 else if(!element.match(/^elemhide/i)) { //No support for ElemHide - TESTED
65 if(!element.match(/^~/i)) {
66 if(!additive) {
67 additive = true;
68 option['resources'] = 0;
69 }
70 option['resources'] += this.map[element] ;
71 }
72 else if(!additive)
73 option['resources'] -= this.map[element] ;
74 }
75 }
76 return option;
77 },
78 wildcard: function(url) { //TESTED
79 //| at the beginning or end means no wildcard
80 if(!url.match(/^\|\|/)) { //Does not starts with ||
81 if(url.match(/^\|/)) //Starts with |
82 url = url.replace(/^\|/, ''); //Remove the |
83 else if(!url.match(/^\*/)) //Avoid **
84 url = '*' + url; //Add the wildcard
85 }
86 if(url.match(/\|$/)) //Ends with |
87 url = url.replace(/\|$/, ''); //Remove the |
88 else if(!url.match(/\*$/)) //Avoid **
89 url = url + '*'; //Add the wildcard
90
91 return url;
92 },
93 sepCharacters: function(value) { //Separator charactor not supported in <12.1
94 //var characters = '(){}[],;:!?/|\\"\'#$&*+<=>@^`~'; //WARNING: Using the longer list WILL freeze the browser in some instances
95 var characters = ':?/#&='; //Shorter string to avoid over-proces sing
96 var values = new Array();
97 for(i in value) {
98 for(j in characters) {
99 values.push(value[i].replace(/\^/, characters[j] ));
100 }
101 if(values[0].match(/\^/))
102 return this.sepCharacters(values);
103 }
104 return values;
105 }
106 };
OLDNEW

Powered by Google App Engine
This is Rietveld