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

Side by Side Diff: desktop-options.js

Issue 29674584: Issue 5549 - Implement missing error handlings for custom filter lists (Closed)
Patch Set: enabled testing via ?filterError=true Created Jan. 25, 2018, 12:56 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 <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 529 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 if (returnElement) 540 if (returnElement)
541 return element; 541 return element;
542 return element.getAttribute("data-" + dataName); 542 return element.getAttribute("data-" + dataName);
543 } 543 }
544 544
545 element = element.parentElement; 545 element = element.parentElement;
546 } 546 }
547 return null; 547 return null;
548 } 548 }
549 549
550 function sendMessageHandleErrors(message, onSuccess) 550 function sendMessageHandleErrors(message, callback)
551 { 551 {
552 browser.runtime.sendMessage(message, (errors) => 552 browser.runtime.sendMessage(message, (errors) =>
553 { 553 {
554 if (errors.length > 0) 554 if (callback)
555 alert(errors.join("\n")); 555 {
556 else if (onSuccess) 556 if (errors.length > 0)
557 onSuccess(); 557 callback(errors);
558 else
559 callback();
560 }
558 }); 561 });
559 } 562 }
560 563
561 function switchTab(id) 564 function switchTab(id)
562 { 565 {
563 location.hash = id; 566 location.hash = id;
564 } 567 }
565 568
566 function execAction(action, element) 569 function execAction(action, element)
567 { 570 {
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 text: findParentData(element, "access", false) 644 text: findParentData(element, "access", false)
642 }); 645 });
643 break; 646 break;
644 case "remove-subscription": 647 case "remove-subscription":
645 browser.runtime.sendMessage({ 648 browser.runtime.sendMessage({
646 type: "subscriptions.remove", 649 type: "subscriptions.remove",
647 url: findParentData(element, "access", false) 650 url: findParentData(element, "access", false)
648 }); 651 });
649 break; 652 break;
650 case "save-custom-filters": 653 case "save-custom-filters":
654 const filters = E("custom-filters-raw");
saroyanm 2018/01/29 11:44:48 Detail/Suggestion: We don't use the element anywhe
a.giammarchi 2018/01/29 13:09:02 I'll do that, but this is nitpicking ;-)
655 const filtersValue = filters.value;
651 sendMessageHandleErrors({ 656 sendMessageHandleErrors({
652 type: "filters.importRaw", 657 type: "filters.importRaw",
653 text: E("custom-filters-raw").value, 658 text: filtersValue,
654 removeExisting: true 659 removeExisting: true
655 }, 660 },
656 () => 661 (errors) =>
657 { 662 {
658 setCustomFiltersView("read"); 663 if (errors)
664 {
665 E("custom-filters").classList.add("warning");
666 const lines = filtersValue.split(/\n+|\n\s+\n/);
saroyanm 2018/01/29 11:44:48 Splitting same as it's done in the filterValidatio
a.giammarchi 2018/01/29 13:09:02 I've tested this before writing the RegExp, their
saroyanm 2018/01/29 14:30:49 I don't understand what you mean by "Logic keeps g
a.giammarchi 2018/01/29 15:01:09 if you have a textarea with a b c d the filte
saroyanm 2018/01/30 12:03:44 This doesn't work on my(Manvel) test enviroment, A
667 const info = errors.map(error => lines[error.lineno - 1]);
668 const editFilters = E("custom-filters-edit-filters");
669 info.forEach(
saroyanm 2018/01/29 11:44:48 Detail: We usualy use for..of when looping through
a.giammarchi 2018/01/29 13:09:02 have we banned the forEach from the code? performa
saroyanm 2018/01/29 14:30:49 That is a news for me. AFAIK we used for...of beca
a.giammarchi 2018/01/29 15:01:09 It's actually usually slower because it involved A
670 message =>
671 {
672 const li = document.createElement("li");
673 editFilters.appendChild(li).textContent = message;
674 }
675 );
676 if (errors.length > 5)
677 editFilters.classList.add("many");
678 }
679 else
680 {
681 setCustomFiltersView("read");
682 }
659 }); 683 });
660 break; 684 break;
661 case "show-more-filters-section": 685 case "show-more-filters-section":
662 E("more-filters").setAttribute("aria-hidden", false); 686 E("more-filters").setAttribute("aria-hidden", false);
663 break; 687 break;
664 case "switch-acceptable-ads": 688 case "switch-acceptable-ads":
665 let value = element.value || element.dataset.value; 689 let value = element.value || element.dataset.value;
666 // User check the checkbox 690 // User check the checkbox
667 let shouldCheck = element.getAttribute("aria-checked") != "true"; 691 let shouldCheck = element.getAttribute("aria-checked") != "true";
668 let installAcceptableAds = false; 692 let installAcceptableAds = false;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 break; 772 break;
749 } 773 }
750 } 774 }
751 775
752 function setCustomFiltersView(mode) 776 function setCustomFiltersView(mode)
753 { 777 {
754 let customFiltersElement = E("custom-filters-raw"); 778 let customFiltersElement = E("custom-filters-raw");
755 updateCustomFiltersUi(); 779 updateCustomFiltersUi();
756 if (mode == "read") 780 if (mode == "read")
757 { 781 {
782 E("custom-filters").classList.remove("warning");
783 const editFilters = E("custom-filters-edit-filters");
784 editFilters.textContent = "";
785 editFilters.classList.remove("many");
758 customFiltersElement.disabled = true; 786 customFiltersElement.disabled = true;
759 if (!customFiltersElement.value) 787 if (!customFiltersElement.value)
760 { 788 {
761 setCustomFiltersView("empty"); 789 setCustomFiltersView("empty");
762 return; 790 return;
763 } 791 }
764 } 792 }
765 else if (mode == "write") 793 else if (mode == "write")
766 { 794 {
767 customFiltersElement.disabled = false; 795 customFiltersElement.disabled = false;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 939
912 // General tab 940 // General tab
913 getDocLink("contribute", (link) => 941 getDocLink("contribute", (link) =>
914 { 942 {
915 E("contribute").href = link; 943 E("contribute").href = link;
916 }); 944 });
917 getDocLink("acceptable_ads_criteria", (link) => 945 getDocLink("acceptable_ads_criteria", (link) =>
918 { 946 {
919 setLinks("enable-acceptable-ads-description", link); 947 setLinks("enable-acceptable-ads-description", link);
920 }); 948 });
921 setElementText(E("tracking-warning-1"), "options_tracking_warning_1", 949 setElementText(E("tracking-warning-1"), "options_tracking_warning_1",
922 [getMessage("common_feature_privacy_title"), 950 [getMessage("common_feature_privacy_title"),
923 getMessage("options_acceptableAds_ads_label")]); 951 getMessage("options_acceptableAds_ads_label")]);
924 setElementText(E("tracking-warning-3"), "options_tracking_warning_3", 952 setElementText(E("tracking-warning-3"), "options_tracking_warning_3",
925 [getMessage("options_acceptableAds_privacy_label")]); 953 [getMessage("options_acceptableAds_privacy_label")]);
926 954
927 getDocLink("privacy_friendly_ads", (link) => 955 getDocLink("privacy_friendly_ads", (link) =>
928 { 956 {
929 E("enable-acceptable-ads-privacy-description").href = link; 957 E("enable-acceptable-ads-privacy-description").href = link;
930 }); 958 });
931 getDocLink("adblock_plus_{browser}_dnt", url => 959 getDocLink("adblock_plus_{browser}_dnt", url =>
932 { 960 {
933 setLinks("dnt", url); 961 setLinks("dnt", url);
934 }); 962 });
(...skipping 22 matching lines...) Expand all
957 what: "features" 985 what: "features"
958 }, 986 },
959 (features) => 987 (features) =>
960 { 988 {
961 hidePref("show_devtools_panel", !features.devToolsPanel); 989 hidePref("show_devtools_panel", !features.devToolsPanel);
962 }); 990 });
963 991
964 getDocLink("filterdoc", (link) => 992 getDocLink("filterdoc", (link) =>
965 { 993 {
966 E("link-filters").setAttribute("href", link); 994 E("link-filters").setAttribute("href", link);
995 E("link-filters-on-edit-error").setAttribute("href", link);
967 }); 996 });
968 997
969 getDocLink("subscriptions", (link) => 998 getDocLink("subscriptions", (link) =>
970 { 999 {
971 E("filter-lists-learn-more").setAttribute("href", link); 1000 E("filter-lists-learn-more").setAttribute("href", link);
972 }); 1001 });
973 1002
974 E("custom-filters-raw").setAttribute("placeholder", 1003 E("custom-filters-raw").setAttribute("placeholder",
975 getMessage("options_customFilters_edit_placeholder", ["/ads/track/*"])); 1004 getMessage("options_customFilters_edit_placeholder", ["/ads/track/*"]));
976 1005
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 setPrivacyConflict(); 1317 setPrivacyConflict();
1289 break; 1318 break;
1290 case "downloading": 1319 case "downloading":
1291 case "downloadStatus": 1320 case "downloadStatus":
1292 case "homepage": 1321 case "homepage":
1293 case "lastDownload": 1322 case "lastDownload":
1294 case "title": 1323 case "title":
1295 updateSubscription(subscription); 1324 updateSubscription(subscription);
1296 break; 1325 break;
1297 case "added": 1326 case "added":
1298 let {url, recommended} = subscription; 1327 let {url} = subscription;
1299 // Handle custom subscription 1328 // Handle custom subscription
1300 if (/^~user/.test(url)) 1329 if (/^~user/.test(url))
1301 { 1330 {
1302 loadCustomFilters(subscription.filters); 1331 loadCustomFilters(subscription.filters);
1303 return; 1332 return;
1304 } 1333 }
1305 else if (url in subscriptionsMap) 1334 else if (url in subscriptionsMap)
1306 updateSubscription(subscription); 1335 updateSubscription(subscription);
1307 else 1336 else
1308 addSubscription(subscription); 1337 addSubscription(subscription);
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 }); 1498 });
1470 browser.runtime.sendMessage({ 1499 browser.runtime.sendMessage({
1471 type: "subscriptions.listen", 1500 type: "subscriptions.listen",
1472 filter: ["added", "disabled", "homepage", "lastDownload", "removed", 1501 filter: ["added", "disabled", "homepage", "lastDownload", "removed",
1473 "title", "downloadStatus", "downloading"] 1502 "title", "downloadStatus", "downloading"]
1474 }); 1503 });
1475 1504
1476 window.addEventListener("DOMContentLoaded", onDOMLoaded, false); 1505 window.addEventListener("DOMContentLoaded", onDOMLoaded, false);
1477 window.addEventListener("hashchange", onHashChange, false); 1506 window.addEventListener("hashchange", onHashChange, false);
1478 } 1507 }
OLDNEW

Powered by Google App Engine
This is Rietveld