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

Unified Diff: new-options.js

Issue 29373665: issue 4264 - centralize action handling (Closed)
Patch Set: Show custom filters view not edit on refresh Created Feb. 8, 2017, 11:51 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « new-options.html ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: new-options.js
===================================================================
--- a/new-options.js
+++ b/new-options.js
@@ -23,6 +23,7 @@
var filtersMap = Object.create(null);
var collections = Object.create(null);
var acceptableAdsUrl = null;
+ var isCustomFiltersLoaded = false;
var getMessage = ext.i18n.getMessage;
var filterErrors =
{
@@ -474,150 +475,164 @@
location.hash = id;
}
+ function execAction(action, key, element)
+ {
+ switch (action)
+ {
+ case "add-domain-exception":
+ addWhitelistedDomain();
+ break;
+ case "add-language-subscription":
+ addEnableSubscription(findParentData(element, "access", false));
+ break;
+ case "add-predefined-subscription":
+ var dialog = E("dialog-content-predefined");
+ var title = dialog.querySelector("h3").textContent;
+ var url = dialog.querySelector(".url").textContent;
+ addEnableSubscription(url, title);
+ closeDialog();
+ break;
+ case "cancel-custom-filters":
+ E("custom-filters").classList.remove("mode-edit");
+ break;
+ case "cancel-domain-exception":
+ E("whitelisting-textbox").value = "";
+ document.querySelector("#whitelisting .controls").classList.remove("mode-edit");
+ break;
+ case "close-dialog":
+ closeDialog();
+ break;
+ case "edit-custom-filters":
+ editCustomFilters();
+ break;
+ case "edit-domain-exception":
+ document.querySelector("#whitelisting .controls").classList.add("mode-edit");
+ E("whitelisting-textbox").focus();
+ break;
+ case "import-subscription":
+ var url = E("blockingList-textbox").value;
+ addEnableSubscription(url);
+ closeDialog();
+ break;
+ case "open-context-menu":
+ var listItem = findParentData(element, "access", true);
+ if (listItem != context)
+ listItem.classList.add("show-context-menu");
+ break;
+ case "open-dialog":
+ var dialog = findParentData(element, "dialog", false);
+ openDialog(dialog);
+ break;
+ case "open-doclink":
+ var doclink = findParentData(element, "doclink", false);
+ openDocLink(doclink);
+ break;
+ case "remove-filter":
+ ext.backgroundPage.sendMessage(
+ {
+ type: "filters.remove",
+ text: findParentData(element, "access", false)
+ });
+ break;
+ case "remove-subscription":
+ ext.backgroundPage.sendMessage(
+ {
+ type: "subscriptions.remove",
+ url: findParentData(element, "access", false)
+ });
+ break;
+ case "save-custom-filters":
+ sendMessageHandleErrors(
+ {
+ type: "filters.importRaw",
+ text: E("custom-filters-raw").value,
+ removeExisting: true
+ },
+ function()
+ {
+ E("custom-filters").classList.remove("mode-edit");
+ });
+ break;
+ case "switch-tab":
+ if (key == "Enter")
+ {
+ var tabId = findParentData(element, "tab", false);
+ switchTab(tabId);
+ }
+ else if (element.hasAttribute("aria-selected"))
+ {
+ if (key == "ArrowLeft" || key == "ArrowUp")
+ {
+ element = element.previousElementSibling
+ || container.lastElementChild;
+ }
+ else if (key == "ArrowRight" || key == "ArrowDown")
+ {
+ element = element.nextElementSibling
+ || container.firstElementChild;
+ }
+
+ var tabId = findParentData(element, "tab", false);
+ switchTab(tabId);
+ }
+ break;
+ case "toggle-disable-subscription":
+ ext.backgroundPage.sendMessage(
+ {
+ type: "subscriptions.toggle",
+ keepInstalled: true,
+ url: findParentData(element, "access", false)
+ });
+ break;
+ case "toggle-pref":
+ ext.backgroundPage.sendMessage(
+ {
+ type: "prefs.toggle",
+ key: findParentData(element, "pref", false)
+ });
+ break;
+ case "toggle-remove-subscription":
+ var subscriptionUrl = findParentData(element, "access", false);
+ if (element.getAttribute("aria-checked") == "true")
+ {
+ ext.backgroundPage.sendMessage({
+ type: "subscriptions.remove",
+ url: subscriptionUrl
+ });
+ }
+ else
+ addEnableSubscription(subscriptionUrl);
+ break;
+ case "update-all-subscriptions":
+ ext.backgroundPage.sendMessage(
+ {
+ type: "subscriptions.update"
+ });
+ break;
+ case "update-subscription":
+ ext.backgroundPage.sendMessage(
+ {
+ type: "subscriptions.update",
+ url: findParentData(element, "access", false)
+ });
+ break;
+ }
+ }
+
function onClick(e)
{
var context = document.querySelector(".show-context-menu");
if (context)
context.classList.remove("show-context-menu");
- var element = e.target;
- while (true)
- {
- if (!element)
- return;
+ var actions = findParentData(e.target, "action", false);
+ if (!actions)
+ return;
- if (element.hasAttribute("data-action"))
- break;
-
- element = element.parentElement;
- }
-
- var element = findParentData(e.target, "action", true);
- var actions = element.getAttribute("data-action").split(",");
+ actions = actions.split(",");
for (var i = 0; i < actions.length; i++)
{
- switch (actions[i])
- {
- case "add-domain-exception":
- addWhitelistedDomain();
- break;
- case "add-predefined-subscription":
- var dialog = E("dialog-content-predefined");
- var title = dialog.querySelector("h3").textContent;
- var url = dialog.querySelector(".url").textContent;
- addEnableSubscription(url, title);
- closeDialog();
- break;
- case "cancel-custom-filters":
- E("custom-filters").classList.remove("mode-edit");
- break;
- case "cancel-domain-exception":
- E("whitelisting-textbox").value = "";
- document.querySelector("#whitelisting .controls").classList.remove("mode-edit");
- break;
- case "close-dialog":
- closeDialog();
- break;
- case "edit-custom-filters":
- E("custom-filters").classList.add("mode-edit");
- editCustomFilters();
- break;
- case "edit-domain-exception":
- document.querySelector("#whitelisting .controls").classList.add("mode-edit");
- E("whitelisting-textbox").focus();
- break;
- case "import-subscription":
- var url = E("blockingList-textbox").value;
- addEnableSubscription(url);
- closeDialog();
- break;
- case "open-dialog":
- var dialog = findParentData(element, "dialog", false);
- openDialog(dialog);
- break;
- case "open-doclink":
- var doclink = findParentData(element, "doclink", false);
- openDocLink(doclink);
- break;
- case "save-custom-filters":
- sendMessageHandleErrors(
- {
- type: "filters.importRaw",
- text: E("custom-filters-raw").value,
- removeExisting: true
- },
- function()
- {
- E("custom-filters").classList.remove("mode-edit");
- });
- break;
- case "switch-tab":
- var tabId = findParentData(e.target, "tab", false);
- switchTab(tabId);
- break;
- case "toggle-pref":
- ext.backgroundPage.sendMessage(
- {
- type: "prefs.toggle",
- key: findParentData(element, "pref", false)
- });
- break;
- case "update-all-subscriptions":
- ext.backgroundPage.sendMessage(
- {
- type: "subscriptions.update"
- });
- break;
- case "open-context-menu":
- var listItem = findParentData(element, "access", true);
- if (listItem != context)
- listItem.classList.add("show-context-menu");
- break;
- case "update-subscription":
- ext.backgroundPage.sendMessage(
- {
- type: "subscriptions.update",
- url: findParentData(element, "access", false)
- });
- break;
- case "remove-subscription":
- ext.backgroundPage.sendMessage(
- {
- type: "subscriptions.remove",
- url: findParentData(element, "access", false)
- });
- break;
- case "toggle-remove-subscription":
- var subscriptionUrl = findParentData(element, "access", false);
- if (element.getAttribute("aria-checked") == "true")
- {
- ext.backgroundPage.sendMessage({
- type: "subscriptions.remove",
- url: subscriptionUrl
- });
- }
- else
- addEnableSubscription(subscriptionUrl);
- break;
- case "toggle-disable-subscription":
- ext.backgroundPage.sendMessage(
- {
- type: "subscriptions.toggle",
- keepInstalled: true,
- url: findParentData(element, "access", false)
- });
- break;
- case "add-language-subscription":
- addEnableSubscription(findParentData(element, "access", false));
- break;
- case "remove-filter":
- ext.backgroundPage.sendMessage(
- {
- type: "filters.remove",
- text: findParentData(element, "access", false)
- });
- break;
- }
+ execAction(actions[i], "Enter", e.target);
}
}
@@ -653,38 +668,10 @@
if (keys.indexOf(key) < 0)
return;
- switch (container.getAttribute("data-action"))
+ var actions = container.getAttribute("data-action").split(",");
+ for (var i = 0; i < actions.length; i++)
{
- case "add-domain-exception":
- addWhitelistedDomain();
- break;
- case "open-doclink":
- var doclink = findParentData(element, "doclink", false);
- openDocLink(doclink);
- break;
- case "switch-tab":
- if (key == "Enter")
- {
- var tabId = findParentData(element, "tab", false);
- switchTab(tabId);
- }
- else if (element.hasAttribute("aria-selected"))
- {
- if (key == "ArrowLeft" || key == "ArrowUp")
- {
- element = element.previousElementSibling
- || container.lastElementChild;
- }
- else if (key == "ArrowRight" || key == "ArrowDown")
- {
- element = element.nextElementSibling
- || container.firstElementChild;
- }
-
- var tabId = findParentData(element, "tab", false);
- switchTab(tabId);
- }
- break;
+ execAction(actions[i], key, element);
}
}
@@ -906,6 +893,8 @@
{
for (var i = 0; i < filters.length; i++)
updateFilter(filters[i]);
+
+ isCustomFiltersLoaded = true;
});
}
});
@@ -955,6 +944,10 @@
function editCustomFilters()
{
+ if (!isCustomFiltersLoaded)
saroyanm 2017/02/08 12:14:01 Theoretically user will not need this check, but t
Thomas Greiner 2017/03/02 15:10:13 Nevertheless it'd be good to use `console.error()`
saroyanm 2017/03/03 13:10:20 Agree, done
+ return;
+
+ E("custom-filters").classList.add("mode-edit");
var customFilterItems = collections.customFilters.items;
var filterTexts = [];
for (var i = 0; i < customFilterItems.length; i++)
« no previous file with comments | « new-options.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld