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

Side by Side Diff: options.js

Issue 5279235799252992: Issue 491 - Validate custom filters (Closed)
Patch Set: Addressed comment and added tests Created Nov. 20, 2014, 12:45 p.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
1 /* 1 /*
2 * This file is part of Adblock Plus <http://adblockplus.org/>, 2 * This file is part of Adblock Plus <http://adblockplus.org/>,
3 * Copyright (C) 2006-2014 Eyeo GmbH 3 * Copyright (C) 2006-2014 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 11 matching lines...) Expand all
22 { 22 {
23 this.Filter = Filter; 23 this.Filter = Filter;
24 this.WhitelistFilter = WhitelistFilter; 24 this.WhitelistFilter = WhitelistFilter;
25 } 25 }
26 with(require("subscriptionClasses")) 26 with(require("subscriptionClasses"))
27 { 27 {
28 this.Subscription = Subscription; 28 this.Subscription = Subscription;
29 this.SpecialSubscription = SpecialSubscription; 29 this.SpecialSubscription = SpecialSubscription;
30 this.DownloadableSubscription = DownloadableSubscription; 30 this.DownloadableSubscription = DownloadableSubscription;
31 } 31 }
32 with(require("filterValidation"))
33 {
34 this.parseFilter = parseFilter;
35 this.parseFilters = parseFilters;
36 }
32 var FilterStorage = require("filterStorage").FilterStorage; 37 var FilterStorage = require("filterStorage").FilterStorage;
33 var FilterNotifier = require("filterNotifier").FilterNotifier; 38 var FilterNotifier = require("filterNotifier").FilterNotifier;
34 var Prefs = require("prefs").Prefs; 39 var Prefs = require("prefs").Prefs;
35 var Synchronizer = require("synchronizer").Synchronizer; 40 var Synchronizer = require("synchronizer").Synchronizer;
36 var Utils = require("utils").Utils; 41 var Utils = require("utils").Utils;
37 42
38 // Loads options from localStorage and sets UI elements accordingly 43 // Loads options from localStorage and sets UI elements accordingly
39 function loadOptions() 44 function loadOptions()
40 { 45 {
41 // Set page title to i18n version of "Adblock Plus Options" 46 // Set page title to i18n version of "Adblock Plus Options"
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 470
466 var filterText = "@@||" + domain + "^$document"; 471 var filterText = "@@||" + domain + "^$document";
467 FilterStorage.addFilter(Filter.fromText(filterText)); 472 FilterStorage.addFilter(Filter.fromText(filterText));
468 } 473 }
469 474
470 // Adds filter text that user typed to the selection box 475 // Adds filter text that user typed to the selection box
471 function addTypedFilter(event) 476 function addTypedFilter(event)
472 { 477 {
473 event.preventDefault(); 478 event.preventDefault();
474 479
475 var filterText = Filter.normalize(document.getElementById("newFilter").value); 480 var element = document.getElementById("newFilter");
476 document.getElementById("newFilter").value = ""; 481 var filter;
477 if (!filterText) 482
483 try
484 {
485 filter = parseFilter(element.value);
486 }
487 catch (error)
488 {
489 alert(error);
478 return; 490 return;
491 }
479 492
480 FilterStorage.addFilter(Filter.fromText(filterText)); 493 if (filter)
494 FilterStorage.addFilter(filter);
495
496 element.value = "";
481 } 497 }
482 498
483 // Removes currently selected whitelisted domains 499 // Removes currently selected whitelisted domains
484 function removeSelectedExcludedDomain() 500 function removeSelectedExcludedDomain()
485 { 501 {
486 var excludedDomainsBox = document.getElementById("excludedDomainsBox"); 502 var excludedDomainsBox = document.getElementById("excludedDomainsBox");
487 var remove = []; 503 var remove = [];
488 for (var i = 0; i < excludedDomainsBox.length; i++) 504 for (var i = 0; i < excludedDomainsBox.length; i++)
489 if (excludedDomainsBox.options[i].selected) 505 if (excludedDomainsBox.options[i].selected)
490 remove.push(excludedDomainsBox.options[i].value); 506 remove.push(excludedDomainsBox.options[i].value);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 var text = ""; 538 var text = "";
523 for (var i = 0; i < userFiltersBox.length; i++) 539 for (var i = 0; i < userFiltersBox.length; i++)
524 text += userFiltersBox.options[i].value + "\n"; 540 text += userFiltersBox.options[i].value + "\n";
525 document.getElementById("rawFiltersText").value = text; 541 document.getElementById("rawFiltersText").value = text;
526 } 542 }
527 } 543 }
528 544
529 // Imports filters in the raw text box 545 // Imports filters in the raw text box
530 function importRawFiltersText() 546 function importRawFiltersText()
531 { 547 {
532 $("#rawFilters").hide(); 548 var text = document.getElementById("rawFiltersText").value;
533 var filters = document.getElementById("rawFiltersText").value.split("\n"); 549
550 var add;
551 try
552 {
553 add = parseFilters(text, true);
554 }
555 catch (error)
556 {
557 alert(error);
558 return;
559 }
560
534 var seenFilter = {__proto__: null}; 561 var seenFilter = {__proto__: null};
535 for (var i = 0; i < filters.length; i++) 562 for (var i = 0; i < add.length; i++)
536 { 563 {
537 var text = Filter.normalize(filters[i]); 564 var filter = add[i];
538 if (!text) 565 FilterStorage.addFilter(filter);
539 continue; 566 seenFilter[filter.text] = null;
540
541 // Don't import filter list header
542 if (/^\[/.test(text))
543 continue;
544
545 FilterStorage.addFilter(Filter.fromText(text));
546 seenFilter[text] = true;
547 } 567 }
548 568
549 var remove = []; 569 var remove = [];
550 for (var i = 0; i < FilterStorage.subscriptions.length; i++) 570 for (var i = 0; i < FilterStorage.subscriptions.length; i++)
551 { 571 {
552 var subscription = FilterStorage.subscriptions[i]; 572 var subscription = FilterStorage.subscriptions[i];
553 if (!(subscription instanceof SpecialSubscription)) 573 if (!(subscription instanceof SpecialSubscription))
554 continue; 574 continue;
555 575
556 for (var j = 0; j < subscription.filters.length; j++) 576 for (var j = 0; j < subscription.filters.length; j++)
557 { 577 {
558 var filter = subscription.filters[j]; 578 var filter = subscription.filters[j];
559 if (filter instanceof WhitelistFilter && /^@@\|\|([^\/:]+)\^\$document$/.t est(filter.text)) 579 if (filter instanceof WhitelistFilter && /^@@\|\|([^\/:]+)\^\$document$/.t est(filter.text))
560 continue; 580 continue;
561 581
562 if (!(filter.text in seenFilter)) 582 if (!(filter.text in seenFilter))
563 remove.push(filter); 583 remove.push(filter);
564 } 584 }
565 } 585 }
586
566 for (var i = 0; i < remove.length; i++) 587 for (var i = 0; i < remove.length; i++)
567 FilterStorage.removeFilter(remove[i]); 588 FilterStorage.removeFilter(remove[i]);
589
590 $("#rawFilters").hide();
568 } 591 }
569 592
570 // Called when user explicitly requests filter list updates 593 // Called when user explicitly requests filter list updates
571 function updateFilterLists() 594 function updateFilterLists()
572 { 595 {
573 for (var i = 0; i < FilterStorage.subscriptions.length; i++) 596 for (var i = 0; i < FilterStorage.subscriptions.length; i++)
574 { 597 {
575 var subscription = FilterStorage.subscriptions[i]; 598 var subscription = FilterStorage.subscriptions[i];
576 if (subscription instanceof DownloadableSubscription) 599 if (subscription instanceof DownloadableSubscription)
577 Synchronizer.execute(subscription, true, true); 600 Synchronizer.execute(subscription, true, true);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 links[i].href = arguments[i + 1]; 648 links[i].href = arguments[i + 1];
626 links[i].setAttribute("target", "_blank"); 649 links[i].setAttribute("target", "_blank");
627 } 650 }
628 else if (typeof arguments[i + 1] == "function") 651 else if (typeof arguments[i + 1] == "function")
629 { 652 {
630 links[i].href = "javascript:void(0);"; 653 links[i].href = "javascript:void(0);";
631 links[i].addEventListener("click", arguments[i + 1], false); 654 links[i].addEventListener("click", arguments[i + 1], false);
632 } 655 }
633 } 656 }
634 } 657 }
OLDNEW
« no previous file with comments | « metadata.common ('k') | qunit/index.html » ('j') | qunit/tests/filterValidation.js » ('J')

Powered by Google App Engine
This is Rietveld