Index: mobile-options.js |
=================================================================== |
--- a/mobile-options.js |
+++ b/mobile-options.js |
@@ -127,28 +127,66 @@ |
/* Actions */ |
- function setSubscription({disabled, title, url}, shouldAdd) |
+ function setFilter({disabled, text}, action) |
{ |
+ if (!whitelistFilter || text != whitelistFilter) |
+ return; |
+ |
+ get("#enabled").checked = (action == "remove" || disabled); |
+ } |
+ |
+ function setSubscription(subscription, action) |
+ { |
+ let {disabled, filters, title, url} = subscription; |
if (disabled) |
+ { |
+ action = "remove"; |
+ } |
+ |
+ // Handle custom subscription |
+ if (/^~user/.test(url)) |
+ { |
+ for (let filter of filters) |
+ { |
+ setFilter(filter, action); |
+ } |
return; |
+ } |
promisedAcceptableAdsUrl.then((acceptableAdsUrl) => |
{ |
+ // Update Acceptable Ads |
if (url == acceptableAdsUrl) |
{ |
- get(`#${idAcceptableAds}`).checked = true; |
+ get(`#${idAcceptableAds}`).checked = (action != "remove"); |
return; |
} |
let listInstalled = get("#subscriptions-installed"); |
let installed = get(`[data-url="${url}"]`, listInstalled); |
- if (installed) |
+ // Remove subscription |
+ if (action == "remove") |
+ { |
+ if (installed) |
+ { |
+ installed.parentNode.removeChild(installed); |
+ } |
+ |
+ let recommended = get(`#${idRecommended} [data-url="${url}"]`); |
+ if (recommended) |
+ { |
+ recommended.classList.remove("installed"); |
+ } |
+ } |
+ // Update subscription |
+ else if (installed) |
{ |
let titleElement = get("span", installed); |
titleElement.textContent = title || url; |
} |
- else if (shouldAdd) |
+ // Add subscription |
+ else if (action == "add") |
{ |
let element = create(listInstalled, "li", null, {"data-url": url}); |
create(element, "span", title || url); |
@@ -165,30 +203,6 @@ |
}); |
} |
- function removeSubscription(url) |
- { |
- promisedAcceptableAdsUrl.then((acceptableAdsUrl) => |
- { |
- if (url == acceptableAdsUrl) |
- { |
- get(`#${idAcceptableAds}`).checked = false; |
- return; |
- } |
- |
- let installed = get(`#subscriptions-installed [data-url="${url}"]`); |
- if (installed) |
- { |
- installed.parentNode.removeChild(installed); |
- } |
- |
- let recommended = get(`#${idRecommended} [data-url="${url}"]`); |
- if (recommended) |
- { |
- recommended.classList.remove("installed"); |
- } |
- }); |
- } |
- |
function setDialog(id, options) |
{ |
if (!id) |
@@ -245,7 +259,7 @@ |
if (subscription.disabled) |
continue; |
- setSubscription(subscription, true); |
+ setSubscription(subscription, "add"); |
} |
}) |
.catch((err) => console.error(err)); |
@@ -372,11 +386,8 @@ |
break; |
} |
case "filters.respond": { |
- let [filter] = msg.args; |
- if (!whitelistFilter || filter.text != whitelistFilter) |
- break; |
- |
- get("#enabled").checked = (msg.action == "removed"); |
+ let action = (msg.action == "added") ? "add" : "remove"; |
+ setFilter(msg.args[0], action); |
break; |
} |
case "subscriptions.respond": { |
@@ -384,25 +395,16 @@ |
switch (msg.action) |
{ |
case "added": |
- setSubscription(subscription, true); |
- break; |
case "disabled": |
- if (subscription.disabled) |
- { |
- removeSubscription(subscription.url); |
- } |
- else |
- { |
- setSubscription(subscription, true); |
- } |
+ setSubscription(subscription, "add"); |
break; |
case "removed": |
- removeSubscription(subscription.url); |
+ setSubscription(subscription, "remove"); |
break; |
case "title": |
// We're also receiving these messages for subscriptions that are |
// not installed so we shouldn't add those by accident |
- setSubscription(subscription, false); |
+ setSubscription(subscription, "update"); |
break; |
} |
break; |