OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-present eyeo GmbH | 3 * Copyright (C) 2006-present eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 } | 66 } |
67 } | 67 } |
68 } | 68 } |
69 | 69 |
70 let params = { | 70 let params = { |
71 blockedURLs: "", | 71 blockedURLs: "", |
72 filterlistsReinitialized: false, | 72 filterlistsReinitialized: false, |
73 addSubscription: false, | 73 addSubscription: false, |
74 filterError: false, | 74 filterError: false, |
75 downloadStatus: "synchronize_ok", | 75 downloadStatus: "synchronize_ok", |
76 showNotificationUI: false | 76 showNotificationUI: false, |
| 77 showPageOptions: false |
77 }; | 78 }; |
78 updateFromURL(params); | 79 updateFromURL(params); |
79 | 80 |
80 let modules = {}; | 81 let modules = {}; |
81 window.require = function(module) | 82 window.require = function(module) |
82 { | 83 { |
83 return modules[module]; | 84 return modules[module]; |
84 }; | 85 }; |
85 | 86 |
86 modules.utils = { | 87 modules.utils = { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 let index = categories.indexOf(category); | 129 let index = categories.indexOf(category); |
129 if (index == -1) | 130 if (index == -1) |
130 categories.push(category); | 131 categories.push(category); |
131 else | 132 else |
132 categories.splice(index, 1); | 133 categories.splice(index, 1); |
133 modules.prefs.Prefs.notifications_ignoredcategories = categories; | 134 modules.prefs.Prefs.notifications_ignoredcategories = categories; |
134 } | 135 } |
135 } | 136 } |
136 }; | 137 }; |
137 | 138 |
| 139 let subscriptionServer = "https://easylist-downloads.adblockplus.org"; |
| 140 let subscriptionDetails = { |
| 141 [`${subscriptionServer}/easylistgermany+easylist.txt`]: { |
| 142 title: "EasyList Germany+EasyList", |
| 143 installed: true |
| 144 }, |
| 145 [`${subscriptionServer}/exceptionrules.txt`]: { |
| 146 title: "Allow non-intrusive advertising", |
| 147 installed: true |
| 148 }, |
| 149 [`${subscriptionServer}/exceptionrules-privacy.txt`]: { |
| 150 title: "Allow only nonintrusive ads that are privacy-friendly" |
| 151 }, |
| 152 [`${subscriptionServer}/fanboy-social.txt`]: { |
| 153 title: "Fanboy's Social Blocking List", |
| 154 installed: true |
| 155 }, |
| 156 [`${subscriptionServer}/antiadblockfilters.txt`]: { |
| 157 title: "Adblock Warning Removal List", |
| 158 installed: true, |
| 159 disabled: true |
| 160 }, |
| 161 "~user~786254": { |
| 162 installed: true |
| 163 } |
| 164 }; |
| 165 |
138 function Subscription(url) | 166 function Subscription(url) |
139 { | 167 { |
140 this.url = url; | 168 this.url = url; |
141 this._disabled = false; | 169 this._disabled = false; |
142 this._lastDownload = 1234; | 170 this._lastDownload = 1234; |
143 this.homepage = "https://easylist.adblockplus.org/"; | 171 this.homepage = "https://easylist.adblockplus.org/"; |
144 this.downloadStatus = params.downloadStatus; | 172 this.downloadStatus = params.downloadStatus; |
145 | 173 |
146 if (subscriptions[this.url] && subscriptions[this.url].title) | 174 let details = subscriptionDetails[this.url]; |
| 175 if (details) |
147 { | 176 { |
148 this.title = subscriptions[this.url].title; | 177 this.disabled = !!details.disabled; |
149 } | 178 this.title = details.title || ""; |
150 if (this.url == prefs.subscriptions_exceptionsurl_privacy) | |
151 { | |
152 this.title = "Allow only nonintrusive ads that are privacy-friendly"; | |
153 } | 179 } |
154 } | 180 } |
155 Subscription.prototype = | 181 Subscription.prototype = |
156 { | 182 { |
157 get disabled() | 183 get disabled() |
158 { | 184 { |
159 return this._disabled; | 185 return this._disabled; |
160 }, | 186 }, |
161 set disabled(value) | 187 set disabled(value) |
162 { | 188 { |
163 this._disabled = value; | 189 this._disabled = value; |
164 modules.filterNotifier.FilterNotifier.emit("subscription.disabled", this); | 190 modules.filterNotifier.FilterNotifier.emit("subscription.disabled", this); |
165 }, | 191 }, |
166 get lastDownload() | 192 get lastDownload() |
167 { | 193 { |
168 return this._lastDownload; | 194 return this._lastDownload; |
169 }, | 195 }, |
170 set lastDownload(value) | 196 set lastDownload(value) |
171 { | 197 { |
172 this._lastDownload = value; | 198 this._lastDownload = value; |
173 modules.filterNotifier.FilterNotifier.emit("subscription.lastDownload", | 199 modules.filterNotifier.FilterNotifier.emit("subscription.lastDownload", |
174 this); | 200 this); |
175 } | 201 } |
176 }; | 202 }; |
177 Subscription.fromURL = function(url) | 203 Subscription.fromURL = function(url) |
178 { | 204 { |
179 if (url in knownSubscriptions) | 205 if (url in knownSubscriptions) |
180 return knownSubscriptions[url]; | 206 return knownSubscriptions[url]; |
181 | 207 |
182 if (/^https?:\/\//.test(url)) | 208 if (/^https?:\/\//.test(url)) |
183 return new modules.subscriptionClasses.Subscription(url); | 209 return new modules.subscriptionClasses.Subscription(url); |
184 return new modules.subscriptionClasses.SpecialSubscription(url); | 210 return new modules.subscriptionClasses.SpecialSubscription(url); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 | 244 |
219 addSubscription(subscription) | 245 addSubscription(subscription) |
220 { | 246 { |
221 let {fromURL} = Subscription; | 247 let {fromURL} = Subscription; |
222 let {FilterStorage} = modules.filterStorage; | 248 let {FilterStorage} = modules.filterStorage; |
223 | 249 |
224 if (!(subscription.url in FilterStorage.knownSubscriptions)) | 250 if (!(subscription.url in FilterStorage.knownSubscriptions)) |
225 { | 251 { |
226 knownSubscriptions[subscription.url] = fromURL(subscription.url); | 252 knownSubscriptions[subscription.url] = fromURL(subscription.url); |
227 modules.filterNotifier.FilterNotifier.emit("subscription.added", | 253 modules.filterNotifier.FilterNotifier.emit("subscription.added", |
228 subscription); | 254 subscription); |
229 } | 255 } |
230 }, | 256 }, |
231 | 257 |
232 removeSubscription(subscription) | 258 removeSubscription(subscription) |
233 { | 259 { |
234 let {FilterStorage} = modules.filterStorage; | 260 let {FilterStorage} = modules.filterStorage; |
235 | 261 |
236 if (subscription.url in FilterStorage.knownSubscriptions) | 262 if (subscription.url in FilterStorage.knownSubscriptions) |
237 { | 263 { |
238 delete knownSubscriptions[subscription.url]; | 264 delete knownSubscriptions[subscription.url]; |
239 modules.filterNotifier.FilterNotifier.emit("subscription.removed", | 265 modules.filterNotifier.FilterNotifier.emit("subscription.removed", |
240 subscription); | 266 subscription); |
241 } | 267 } |
242 }, | 268 }, |
243 | 269 |
244 addFilter(filter) | 270 addFilter(filter) |
245 { | 271 { |
246 for (let customFilter of customSubscription.filters) | 272 for (let customFilter of customSubscription.filters) |
247 { | 273 { |
248 if (customFilter.text == filter.text) | 274 if (customFilter.text == filter.text) |
249 return; | 275 return; |
250 } | 276 } |
251 customSubscription.filters.push(filter); | 277 customSubscription.filters.push(filter); |
252 modules.filterNotifier.FilterNotifier.emit("filter.added", filter); | 278 modules.filterNotifier.FilterNotifier.emit("filter.added", filter); |
253 }, | 279 }, |
254 | 280 |
255 removeFilter(filter) | 281 removeFilter(filter) |
256 { | 282 { |
257 for (let i = 0; i < customSubscription.filters.length; i++) | 283 for (let i = 0; i < customSubscription.filters.length; i++) |
258 { | 284 { |
259 if (customSubscription.filters[i].text == filter.text) | 285 if (customSubscription.filters[i].text == filter.text) |
260 { | 286 { |
261 customSubscription.filters.splice(i, 1); | 287 customSubscription.filters.splice(i, 1); |
262 modules.filterNotifier.FilterNotifier.emit("filter.removed", | 288 modules.filterNotifier.FilterNotifier.emit("filter.removed", |
263 filter); | 289 filter); |
264 return; | 290 return; |
265 } | 291 } |
266 } | 292 } |
267 } | 293 } |
268 } | 294 } |
269 }; | 295 }; |
270 | 296 |
271 function Filter(text) | 297 function Filter(text) |
272 { | 298 { |
273 this.text = text; | 299 this.text = text; |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 "###Werbung_Sky", | 467 "###Werbung_Sky", |
442 "###Werbung_Wide", | 468 "###Werbung_Wide", |
443 "###__ligatus_placeholder__", | 469 "###__ligatus_placeholder__", |
444 "###ad-bereich1-08", | 470 "###ad-bereich1-08", |
445 "###ad-bereich1-superbanner", | 471 "###ad-bereich1-superbanner", |
446 "###ad-bereich2-08", | 472 "###ad-bereich2-08", |
447 "###ad-bereich2-skyscrapper" | 473 "###ad-bereich2-skyscrapper" |
448 ]; | 474 ]; |
449 let knownFilters = filters.map(modules.filterClasses.Filter.fromText); | 475 let knownFilters = filters.map(modules.filterClasses.Filter.fromText); |
450 | 476 |
451 let subscriptions = { | 477 let knownSubscriptions = Object.create(null); |
452 "https://easylist-downloads.adblockplus.org/easylistgermany+easylist.txt": { | 478 for (let url in subscriptionDetails) |
453 title: "EasyList Germany+EasyList" | 479 { |
454 }, | 480 if (!subscriptionDetails[url].installed) |
455 "https://easylist-downloads.adblockplus.org/exceptionrules.txt": { | 481 continue; |
456 title: "Allow non-intrusive advertising" | |
457 }, | |
458 "https://easylist-downloads.adblockplus.org/fanboy-social.txt": { | |
459 title: "Fanboy's Social Blocking List", | |
460 type: "social" | |
461 }, | |
462 "https://easylist-downloads.adblockplus.org/antiadblockfilters.txt": { | |
463 title: "Adblock Warning Removal List" | |
464 }, | |
465 "~user~78625": { | |
466 title: "My filter list" | |
467 } | |
468 }; | |
469 | 482 |
470 let knownSubscriptions = Object.create(null); | 483 knownSubscriptions[url] = |
471 for (let subscriptionUrl in subscriptions) | 484 modules.subscriptionClasses.Subscription.fromURL(url); |
472 { | |
473 knownSubscriptions[subscriptionUrl] = | |
474 modules.subscriptionClasses.Subscription.fromURL(subscriptionUrl); | |
475 } | 485 } |
476 let customSubscription = knownSubscriptions["~user~78625"]; | 486 let customSubscription = knownSubscriptions["~user~786254"]; |
477 | 487 |
478 if (params.addSubscription) | 488 if (params.addSubscription) |
479 { | 489 { |
480 // We don't know how long it will take for the page to fully load | 490 // We don't know how long it will take for the page to fully load |
481 // so we'll post the message after one second | 491 // so we'll post the message after one second |
482 setTimeout(() => | 492 setTimeout(() => |
483 { | 493 { |
484 window.postMessage({ | 494 window.postMessage({ |
485 type: "message", | 495 type: "message", |
486 payload: { | 496 payload: { |
487 title: "Custom subscription", | 497 title: "Custom subscription", |
488 url: "http://example.com/custom.txt", | 498 url: "http://example.com/custom.txt", |
489 confirm: true, | 499 confirm: true, |
490 type: "subscriptions.add" | 500 type: "subscriptions.add" |
491 } | 501 } |
492 }, "*"); | 502 }, "*"); |
493 }, 1000); | 503 }, 1000); |
494 } | 504 } |
495 | 505 |
| 506 if (params.showPageOptions) |
| 507 { |
| 508 // We don't know how long it will take for the page to fully load |
| 509 // so we'll post the message after one second |
| 510 setTimeout(() => |
| 511 { |
| 512 let host = "example.com"; |
| 513 let isWhitelisted = customSubscription.filters |
| 514 .some((filter) => filter.text == `@@||${host}^$document`); |
| 515 window.postMessage({ |
| 516 type: "message", |
| 517 payload: { |
| 518 type: "app.open", |
| 519 what: "options", |
| 520 action: "showPageOptions", |
| 521 args: [ |
| 522 { |
| 523 host, |
| 524 whitelisted: isWhitelisted |
| 525 } |
| 526 ] |
| 527 } |
| 528 }, "*"); |
| 529 }, 1000); |
| 530 } |
| 531 |
496 ext.devtools.onCreated.addListener((panel) => | 532 ext.devtools.onCreated.addListener((panel) => |
497 { | 533 { |
498 // blocked request | 534 // blocked request |
499 panel.sendMessage({ | 535 panel.sendMessage({ |
500 type: "add-record", | 536 type: "add-record", |
501 request: { | 537 request: { |
502 url: "http://adserver.example.com/ad_banner.png", | 538 url: "http://adserver.example.com/ad_banner.png", |
503 type: "IMAGE", | 539 type: "IMAGE", |
504 docDomain: "example.com" | 540 docDomain: "example.com" |
505 }, | 541 }, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 }, | 599 }, |
564 filter: { | 600 filter: { |
565 text: "||example.com/some-annoying-popup$popup", | 601 text: "||example.com/some-annoying-popup$popup", |
566 whitelisted: false, | 602 whitelisted: false, |
567 userDefined: true, | 603 userDefined: true, |
568 subscription: null | 604 subscription: null |
569 } | 605 } |
570 }); | 606 }); |
571 }); | 607 }); |
572 }()); | 608 }()); |
OLD | NEW |