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

Side by Side Diff: new-options.js

Issue 29502647: Issue 5482 - Sidebar and about ABP dialog (Closed)
Patch Set: Created Aug. 24, 2017, 5:35 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
« no previous file with comments | « new-options.html ('k') | skin/abp-logo.svg » ('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 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 { 519 {
520 ext.backgroundPage.sendMessage(message, (errors) => 520 ext.backgroundPage.sendMessage(message, (errors) =>
521 { 521 {
522 if (errors.length > 0) 522 if (errors.length > 0)
523 alert(errors.join("\n")); 523 alert(errors.join("\n"));
524 else if (onSuccess) 524 else if (onSuccess)
525 onSuccess(); 525 onSuccess();
526 }); 526 });
527 } 527 }
528 528
529 function openDocLink(id)
530 {
531 getDocLink(id, (link) =>
532 {
533 if (id == "share-general")
534 openSharePopup(link);
535 else
536 location.href = link;
537 });
538 }
539
540 function switchTab(id) 529 function switchTab(id)
541 { 530 {
542 location.hash = id; 531 location.hash = id;
543 } 532 }
544 533
545 function execAction(action, element) 534 function execAction(action, element)
546 { 535 {
547 switch (action) 536 switch (action)
548 { 537 {
549 case "add-domain-exception": 538 case "add-domain-exception":
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 let listItem = findParentData(element, "access", true); 587 let listItem = findParentData(element, "access", true);
599 if (listItem && !listItem.classList.contains("show-context-menu")) 588 if (listItem && !listItem.classList.contains("show-context-menu"))
600 listItem.classList.add("show-context-menu"); 589 listItem.classList.add("show-context-menu");
601 break; 590 break;
602 } 591 }
603 case "open-dialog": { 592 case "open-dialog": {
604 let dialog = findParentData(element, "dialog", false); 593 let dialog = findParentData(element, "dialog", false);
605 openDialog(dialog); 594 openDialog(dialog);
606 break; 595 break;
607 } 596 }
608 case "open-doclink": {
609 let doclink = findParentData(element, "doclink", false);
610 openDocLink(doclink);
611 break;
612 }
613 case "remove-filter": 597 case "remove-filter":
614 ext.backgroundPage.sendMessage({ 598 ext.backgroundPage.sendMessage({
615 type: "filters.remove", 599 type: "filters.remove",
616 text: findParentData(element, "access", false) 600 text: findParentData(element, "access", false)
617 }); 601 });
618 break; 602 break;
619 case "remove-subscription": 603 case "remove-subscription":
620 ext.backgroundPage.sendMessage({ 604 ext.backgroundPage.sendMessage({
621 type: "subscriptions.remove", 605 type: "subscriptions.remove",
622 url: findParentData(element, "access", false) 606 url: findParentData(element, "access", false)
(...skipping 16 matching lines...) Expand all
639 type: value == "privacy" ? "subscriptions.add" : 623 type: value == "privacy" ? "subscriptions.add" :
640 "subscriptions.remove", 624 "subscriptions.remove",
641 url: acceptableAdsPrivacyUrl 625 url: acceptableAdsPrivacyUrl
642 }); 626 });
643 ext.backgroundPage.sendMessage({ 627 ext.backgroundPage.sendMessage({
644 type: value == "ads" ? "subscriptions.add" : "subscriptions.remove", 628 type: value == "ads" ? "subscriptions.add" : "subscriptions.remove",
645 url: acceptableAdsUrl 629 url: acceptableAdsUrl
646 }); 630 });
647 break; 631 break;
648 case "switch-tab": 632 case "switch-tab":
649 let tabId = findParentData(element, "tab", false); 633 switchTab(element.getAttribute("href").substr(1));
650 switchTab(tabId);
651 break; 634 break;
652 case "toggle-disable-subscription": 635 case "toggle-disable-subscription":
653 ext.backgroundPage.sendMessage({ 636 ext.backgroundPage.sendMessage({
654 type: "subscriptions.toggle", 637 type: "subscriptions.toggle",
655 keepInstalled: true, 638 keepInstalled: true,
656 url: findParentData(element, "access", false) 639 url: findParentData(element, "access", false)
657 }); 640 });
658 break; 641 break;
659 case "toggle-pref": 642 case "toggle-pref":
660 ext.backgroundPage.sendMessage({ 643 ext.backgroundPage.sendMessage({
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 let container = findParentData(element, "action", true); 736 let container = findParentData(element, "action", true);
754 if (!container || !container.hasAttribute("data-keys")) 737 if (!container || !container.hasAttribute("data-keys"))
755 return; 738 return;
756 739
757 let keys = container.getAttribute("data-keys").split(" "); 740 let keys = container.getAttribute("data-keys").split(" ");
758 if (keys.indexOf(key) < 0) 741 if (keys.indexOf(key) < 0)
759 return; 742 return;
760 743
761 if (element.getAttribute("role") == "tab") 744 if (element.getAttribute("role") == "tab")
762 { 745 {
746 let parent = element.parentElement;
763 if (key == "ArrowLeft" || key == "ArrowUp") 747 if (key == "ArrowLeft" || key == "ArrowUp")
764 element = element.previousElementSibling || container.lastElementChild; 748 parent = parent.previousElementSibling || container.lastElementChild;
765 else if (key == "ArrowRight" || key == "ArrowDown") 749 else if (key == "ArrowRight" || key == "ArrowDown")
766 element = element.nextElementSibling || container.firstElementChild; 750 parent = parent.nextElementSibling || container.firstElementChild;
751 element = parent.firstElementChild;
767 } 752 }
768 753
769 let actions = container.getAttribute("data-action").split(","); 754 let actions = container.getAttribute("data-action").split(",");
770 for (let action of actions) 755 for (let action of actions)
771 { 756 {
772 execAction(action, element); 757 execAction(action, element);
773 } 758 }
774 } 759 }
775 760
776 function selectTabItem(tabId, container, focus) 761 function selectTabItem(tabId, container, focus)
777 { 762 {
778 // Show tab content 763 // Show tab content
779 document.body.setAttribute("data-tab", tabId); 764 document.body.setAttribute("data-tab", tabId);
780 765
781 // Select tab 766 // Select tab
782 let tabList = container.querySelector("[role='tablist']"); 767 let tabList = container.querySelector("[role='tablist']");
783 if (!tabList) 768 if (!tabList)
784 return null; 769 return null;
785 770
786 let previousTab = tabList.querySelector("[aria-selected]"); 771 let previousTab = tabList.querySelector("[aria-selected]");
787 previousTab.removeAttribute("aria-selected"); 772 previousTab.removeAttribute("aria-selected");
788 previousTab.setAttribute("tabindex", -1); 773 previousTab.setAttribute("tabindex", -1);
789 774
790 let tab = tabList.querySelector("li[data-tab='" + tabId + "']"); 775 let tab = tabList.querySelector("a[href='#" + tabId + "']");
791 tab.setAttribute("aria-selected", true); 776 tab.setAttribute("aria-selected", true);
792 tab.setAttribute("tabindex", 0); 777 tab.setAttribute("tabindex", 0);
793 778
794 let tabContentId = tab.getAttribute("aria-controls"); 779 let tabContentId = tab.getAttribute("aria-controls");
795 let tabContent = document.getElementById(tabContentId); 780 let tabContent = document.getElementById(tabContentId);
796 781
797 if (tab && focus) 782 if (tab && focus)
798 tab.focus(); 783 tab.focus();
799 784
800 return tabContent; 785 return tabContent;
(...skipping 21 matching lines...) Expand all
822 { 807 {
823 populateLists(); 808 populateLists();
824 809
825 // Initialize navigation sidebar 810 // Initialize navigation sidebar
826 ext.backgroundPage.sendMessage({ 811 ext.backgroundPage.sendMessage({
827 type: "app.get", 812 type: "app.get",
828 what: "addonVersion" 813 what: "addonVersion"
829 }, 814 },
830 (addonVersion) => 815 (addonVersion) =>
831 { 816 {
832 E("abp-version").textContent = addonVersion; 817 E("abp-version").textContent = getMessage("options_dialog_about_version",
833 }); 818 [addonVersion]);
834 getDocLink("releases", (link) =>
835 {
836 E("link-version").setAttribute("href", link);
837 }); 819 });
838 820
839 updateShareLink();
840 updateTooltips(); 821 updateTooltips();
841 822
842 // Initialize interactive UI elements 823 // Initialize interactive UI elements
843 document.body.addEventListener("click", onClick, false); 824 document.body.addEventListener("click", onClick, false);
844 document.body.addEventListener("keyup", onKeyUp, false); 825 document.body.addEventListener("keyup", onKeyUp, false);
845 let exampleValue = getMessage("options_whitelist_placeholder_example", 826 let exampleValue = getMessage("options_whitelist_placeholder_example",
846 ["www.example.com"]); 827 ["www.example.com"]);
847 E("whitelisting-textbox").setAttribute("placeholder", exampleValue); 828 E("whitelisting-textbox").setAttribute("placeholder", exampleValue);
848 E("whitelisting-textbox").addEventListener("keyup", (e) => 829 E("whitelisting-textbox").addEventListener("keyup", (e) =>
849 { 830 {
850 E("whitelisting-add-button").disabled = !e.target.value; 831 E("whitelisting-add-button").disabled = !e.target.value;
851 }, false); 832 }, false);
852 833
834
835 getDocLink("contribute", (link) =>
836 {
837 E("contribute").href = link;
838 });
853 getDocLink("acceptable_ads_criteria", (link) => 839 getDocLink("acceptable_ads_criteria", (link) =>
854 { 840 {
855 setLinks("enable-aa-description", link); 841 setLinks("enable-aa-description", link);
856 }); 842 });
857 843
858 // Advanced tab 844 // Advanced tab
859 let customize = document.querySelectorAll("#customize li[data-pref]"); 845 let customize = document.querySelectorAll("#customize li[data-pref]");
860 customize = Array.prototype.map.call(customize, (checkbox) => 846 customize = Array.prototype.map.call(customize, (checkbox) =>
861 { 847 {
862 return checkbox.getAttribute("data-pref"); 848 return checkbox.getAttribute("data-pref");
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 ext.backgroundPage.sendMessage(message); 1115 ext.backgroundPage.sendMessage(message);
1130 } 1116 }
1131 1117
1132 function onFilterMessage(action, filter) 1118 function onFilterMessage(action, filter)
1133 { 1119 {
1134 switch (action) 1120 switch (action)
1135 { 1121 {
1136 case "added": 1122 case "added":
1137 filter[timestampUI] = Date.now(); 1123 filter[timestampUI] = Date.now();
1138 updateFilter(filter); 1124 updateFilter(filter);
1139 updateShareLink();
1140 break; 1125 break;
1141 case "loaded": 1126 case "loaded":
1142 populateLists(); 1127 populateLists();
1143 break; 1128 break;
1144 case "removed": 1129 case "removed":
1145 let knownFilter = filtersMap[filter.text]; 1130 let knownFilter = filtersMap[filter.text];
1146 if (whitelistedDomainRegexp.test(knownFilter.text)) 1131 if (whitelistedDomainRegexp.test(knownFilter.text))
1147 collections.whitelist.removeItem(knownFilter); 1132 collections.whitelist.removeItem(knownFilter);
1148 else 1133 else
1149 removeCustomFilter(filter.text); 1134 removeCustomFilter(filter.text);
1150 1135
1151 delete filtersMap[filter.text]; 1136 delete filtersMap[filter.text];
1152 updateShareLink();
1153 break; 1137 break;
1154 } 1138 }
1155 } 1139 }
1156 1140
1157 function onSubscriptionMessage(action, subscription) 1141 function onSubscriptionMessage(action, subscription)
1158 { 1142 {
1159 if (subscription.url in subscriptionsMap) 1143 if (subscription.url in subscriptionsMap)
1160 { 1144 {
1161 let knownSubscription = subscriptionsMap[subscription.url]; 1145 let knownSubscription = subscriptionsMap[subscription.url];
1162 for (let property in subscription) 1146 for (let property in subscription)
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 } 1190 }
1207 else 1191 else
1208 { 1192 {
1209 collections.custom.removeItem(subscription); 1193 collections.custom.removeItem(subscription);
1210 } 1194 }
1211 } 1195 }
1212 collections.filterLists.removeItem(subscription); 1196 collections.filterLists.removeItem(subscription);
1213 break; 1197 break;
1214 } 1198 }
1215 1199
1216 updateShareLink();
1217 } 1200 }
1218 1201
1219 function hidePref(key, value) 1202 function hidePref(key, value)
1220 { 1203 {
1221 let element = document.querySelector("[data-pref='" + key + "']"); 1204 let element = document.querySelector("[data-pref='" + key + "']");
1222 if (element) 1205 if (element)
1223 element.setAttribute("aria-hidden", value); 1206 element.setAttribute("aria-hidden", value);
1224 } 1207 }
1225 1208
1226 function getPref(key, callback) 1209 function getPref(key, callback)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 break; 1250 break;
1268 } 1251 }
1269 1252
1270 let checkbox = document.querySelector( 1253 let checkbox = document.querySelector(
1271 "[data-pref='" + key + "'] button[role='checkbox']" 1254 "[data-pref='" + key + "'] button[role='checkbox']"
1272 ); 1255 );
1273 if (checkbox) 1256 if (checkbox)
1274 checkbox.setAttribute("aria-checked", value); 1257 checkbox.setAttribute("aria-checked", value);
1275 } 1258 }
1276 1259
1277 function updateShareLink()
1278 {
1279 let shareResources = [
1280 "https://facebook.com/plugins/like.php?",
1281 "https://platform.twitter.com/widgets/",
1282 "https://apis.google.com/se/0/_/+1/fastbutton?"
1283 ];
1284 let isAnyBlocked = false;
1285 let checksRemaining = shareResources.length;
1286
1287 function onResult(isBlocked)
1288 {
1289 isAnyBlocked |= isBlocked;
1290 if (!--checksRemaining)
1291 {
1292 // Hide the share tab if a script on the share page would be blocked
1293 E("tab-share").hidden = isAnyBlocked;
1294 }
1295 }
1296
1297 for (let sharedResource of shareResources)
1298 checkShareResource(sharedResource, onResult);
1299 }
1300
1301 function updateTooltips() 1260 function updateTooltips()
1302 { 1261 {
1303 let anchors = document.querySelectorAll(":not(.tooltip) > [data-tooltip]"); 1262 let anchors = document.querySelectorAll(":not(.tooltip) > [data-tooltip]");
1304 for (let anchor of anchors) 1263 for (let anchor of anchors)
1305 { 1264 {
1306 let id = anchor.getAttribute("data-tooltip"); 1265 let id = anchor.getAttribute("data-tooltip");
1307 1266
1308 let wrapper = document.createElement("div"); 1267 let wrapper = document.createElement("div");
1309 wrapper.className = "tooltip"; 1268 wrapper.className = "tooltip";
1310 anchor.parentNode.replaceChild(wrapper, anchor); 1269 anchor.parentNode.replaceChild(wrapper, anchor);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1367 }); 1326 });
1368 ext.backgroundPage.sendMessage({ 1327 ext.backgroundPage.sendMessage({
1369 type: "subscriptions.listen", 1328 type: "subscriptions.listen",
1370 filter: ["added", "disabled", "homepage", "lastDownload", "removed", 1329 filter: ["added", "disabled", "homepage", "lastDownload", "removed",
1371 "title", "downloadStatus", "downloading"] 1330 "title", "downloadStatus", "downloading"]
1372 }); 1331 });
1373 1332
1374 window.addEventListener("DOMContentLoaded", onDOMLoaded, false); 1333 window.addEventListener("DOMContentLoaded", onDOMLoaded, false);
1375 window.addEventListener("hashchange", onHashChange, false); 1334 window.addEventListener("hashchange", onHashChange, false);
1376 } 1335 }
OLDNEW
« no previous file with comments | « new-options.html ('k') | skin/abp-logo.svg » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld