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: changed custom-filters-edit-area to custom-filters-control as suggested Created Feb. 5, 2018, 9:05 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
« no previous file with comments | « desktop-options.html ('k') | locale/en_US/desktop-options.json » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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").value;
651 sendMessageHandleErrors({ 655 sendMessageHandleErrors({
652 type: "filters.importRaw", 656 type: "filters.importRaw",
653 text: E("custom-filters-raw").value, 657 text: filters,
654 removeExisting: true 658 removeExisting: true
655 }, 659 },
656 () => 660 (errors) =>
657 { 661 {
658 setCustomFiltersView("read"); 662 if (errors)
663 {
664 E("custom-filters").classList.add("warning");
665 const customFiltersError = clearAndGetCustomFiltersError();
666
667 // The current error does not contain info about the line
668 // that generated such error.
669 // Whenever the error object will pass the bad filter
670 // within its properties, this split should be removed.
671 const lines = filters.split("\n");
672 const messages = errors.map(error => lines[error.lineno - 1]);
673 for (const message of messages)
674 {
675 const li = document.createElement("li");
676 customFiltersError.appendChild(li).textContent = message;
677 }
678 if (errors.length > 5)
679 customFiltersError.classList.add("many");
680 }
681 else
682 {
683 setCustomFiltersView("read");
684 }
659 }); 685 });
660 break; 686 break;
661 case "show-more-filters-section": 687 case "show-more-filters-section":
662 E("more-filters").setAttribute("aria-hidden", false); 688 E("more-filters").setAttribute("aria-hidden", false);
663 break; 689 break;
664 case "switch-acceptable-ads": 690 case "switch-acceptable-ads":
665 let value = element.value || element.dataset.value; 691 let value = element.value || element.dataset.value;
666 // User check the checkbox 692 // User check the checkbox
667 let shouldCheck = element.getAttribute("aria-checked") != "true"; 693 let shouldCheck = element.getAttribute("aria-checked") != "true";
668 let installAcceptableAds = false; 694 let installAcceptableAds = false;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 closeDialog(); 768 closeDialog();
743 } 769 }
744 else 770 else
745 { 771 {
746 form.querySelector(":invalid").focus(); 772 form.querySelector(":invalid").focus();
747 } 773 }
748 break; 774 break;
749 } 775 }
750 } 776 }
751 777
778 function clearAndGetCustomFiltersError()
779 {
780 const customFiltersError = E("custom-filters-error");
781 customFiltersError.textContent = "";
782 customFiltersError.classList.remove("many");
783 return customFiltersError;
784 }
785
752 function setCustomFiltersView(mode) 786 function setCustomFiltersView(mode)
753 { 787 {
754 let customFiltersElement = E("custom-filters-raw"); 788 let customFiltersElement = E("custom-filters-raw");
755 updateCustomFiltersUi(); 789 updateCustomFiltersUi();
756 if (mode == "read") 790 if (mode == "read")
757 { 791 {
792 E("custom-filters").classList.remove("warning");
793 clearAndGetCustomFiltersError();
758 customFiltersElement.disabled = true; 794 customFiltersElement.disabled = true;
759 if (!customFiltersElement.value) 795 if (!customFiltersElement.value)
760 { 796 {
761 setCustomFiltersView("empty"); 797 setCustomFiltersView("empty");
762 return; 798 return;
763 } 799 }
764 } 800 }
765 else if (mode == "write") 801 else if (mode == "write")
766 { 802 {
767 customFiltersElement.disabled = false; 803 customFiltersElement.disabled = false;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
911 947
912 // General tab 948 // General tab
913 getDocLink("contribute", (link) => 949 getDocLink("contribute", (link) =>
914 { 950 {
915 E("contribute").href = link; 951 E("contribute").href = link;
916 }); 952 });
917 getDocLink("acceptable_ads_criteria", (link) => 953 getDocLink("acceptable_ads_criteria", (link) =>
918 { 954 {
919 setLinks("enable-acceptable-ads-description", link); 955 setLinks("enable-acceptable-ads-description", link);
920 }); 956 });
921 setElementText(E("tracking-warning-1"), "options_tracking_warning_1", 957 setElementText(E("tracking-warning-1"), "options_tracking_warning_1",
922 [getMessage("common_feature_privacy_title"), 958 [getMessage("common_feature_privacy_title"),
923 getMessage("options_acceptableAds_ads_label")]); 959 getMessage("options_acceptableAds_ads_label")]);
924 setElementText(E("tracking-warning-3"), "options_tracking_warning_3", 960 setElementText(E("tracking-warning-3"), "options_tracking_warning_3",
925 [getMessage("options_acceptableAds_privacy_label")]); 961 [getMessage("options_acceptableAds_privacy_label")]);
926 962
927 getDocLink("privacy_friendly_ads", (link) => 963 getDocLink("privacy_friendly_ads", (link) =>
928 { 964 {
929 E("enable-acceptable-ads-privacy-description").href = link; 965 E("enable-acceptable-ads-privacy-description").href = link;
930 }); 966 });
931 getDocLink("adblock_plus_{browser}_dnt", url => 967 getDocLink("adblock_plus_{browser}_dnt", url =>
932 { 968 {
933 setLinks("dnt", url); 969 setLinks("dnt", url);
934 }); 970 });
(...skipping 21 matching lines...) Expand all
956 type: "app.get", 992 type: "app.get",
957 what: "features" 993 what: "features"
958 }, 994 },
959 (features) => 995 (features) =>
960 { 996 {
961 hidePref("show_devtools_panel", !features.devToolsPanel); 997 hidePref("show_devtools_panel", !features.devToolsPanel);
962 }); 998 });
963 999
964 getDocLink("filterdoc", (link) => 1000 getDocLink("filterdoc", (link) =>
965 { 1001 {
966 E("link-filters").setAttribute("href", link); 1002 E("link-filters-1").setAttribute("href", link);
1003 E("link-filters-2").setAttribute("href", link);
967 }); 1004 });
968 1005
969 getDocLink("subscriptions", (link) => 1006 getDocLink("subscriptions", (link) =>
970 { 1007 {
971 E("filter-lists-learn-more").setAttribute("href", link); 1008 E("filter-lists-learn-more").setAttribute("href", link);
972 }); 1009 });
973 1010
974 E("custom-filters-raw").setAttribute("placeholder", 1011 E("custom-filters-raw").setAttribute("placeholder",
975 getMessage("options_customFilters_edit_placeholder", ["/ads/track/*"])); 1012 getMessage("options_customFilters_edit_placeholder", ["/ads/track/*"]));
976 1013
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 special: true 1188 special: true
1152 }, 1189 },
1153 (subscriptions) => 1190 (subscriptions) =>
1154 { 1191 {
1155 // Load filters 1192 // Load filters
1156 for (let subscription of subscriptions) 1193 for (let subscription of subscriptions)
1157 { 1194 {
1158 browser.runtime.sendMessage({ 1195 browser.runtime.sendMessage({
1159 type: "filters.get", 1196 type: "filters.get",
1160 subscriptionUrl: subscription.url 1197 subscriptionUrl: subscription.url
1161 }, 1198 }, loadCustomFilters);
1162 (filters) =>
1163 {
1164 loadCustomFilters(filters);
1165 });
1166 } 1199 }
1167 }); 1200 });
1168 loadRecommendations(); 1201 loadRecommendations();
1169 browser.runtime.sendMessage({ 1202 browser.runtime.sendMessage({
1170 type: "prefs.get", 1203 type: "prefs.get",
1171 key: "subscriptions_exceptionsurl" 1204 key: "subscriptions_exceptionsurl"
1172 }, 1205 },
1173 (url) => 1206 (url) =>
1174 { 1207 {
1175 acceptableAdsUrl = url; 1208 acceptableAdsUrl = url;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 setPrivacyConflict(); 1321 setPrivacyConflict();
1289 break; 1322 break;
1290 case "downloading": 1323 case "downloading":
1291 case "downloadStatus": 1324 case "downloadStatus":
1292 case "homepage": 1325 case "homepage":
1293 case "lastDownload": 1326 case "lastDownload":
1294 case "title": 1327 case "title":
1295 updateSubscription(subscription); 1328 updateSubscription(subscription);
1296 break; 1329 break;
1297 case "added": 1330 case "added":
1298 let {url, recommended} = subscription; 1331 let {url} = subscription;
1299 // Handle custom subscription 1332 // Handle custom subscription
1300 if (/^~user/.test(url)) 1333 if (/^~user/.test(url))
1301 { 1334 {
1302 loadCustomFilters(subscription.filters); 1335 loadCustomFilters(subscription.filters);
1303 return; 1336 return;
1304 } 1337 }
1305 else if (url in subscriptionsMap) 1338 else if (url in subscriptionsMap)
1306 updateSubscription(subscription); 1339 updateSubscription(subscription);
1307 else 1340 else
1308 addSubscription(subscription); 1341 addSubscription(subscription);
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 }); 1502 });
1470 browser.runtime.sendMessage({ 1503 browser.runtime.sendMessage({
1471 type: "subscriptions.listen", 1504 type: "subscriptions.listen",
1472 filter: ["added", "disabled", "homepage", "lastDownload", "removed", 1505 filter: ["added", "disabled", "homepage", "lastDownload", "removed",
1473 "title", "downloadStatus", "downloading"] 1506 "title", "downloadStatus", "downloading"]
1474 }); 1507 });
1475 1508
1476 window.addEventListener("DOMContentLoaded", onDOMLoaded, false); 1509 window.addEventListener("DOMContentLoaded", onDOMLoaded, false);
1477 window.addEventListener("hashchange", onHashChange, false); 1510 window.addEventListener("hashchange", onHashChange, false);
1478 } 1511 }
OLDNEW
« no previous file with comments | « desktop-options.html ('k') | locale/en_US/desktop-options.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld