| Index: options.js |
| =================================================================== |
| --- a/options.js |
| +++ b/options.js |
| @@ -1,29 +1,34 @@ |
| var backgroundPage = chrome.extension.getBackgroundPage(); |
| var imports = ["FilterStorage", "FilterNotifier", "Subscription", "SpecialSubscription", |
| "DownloadableSubscription", "Filter", "WhitelistFilter", |
| - "Synchronizer", "require"]; |
| + "Synchronizer", "Prefs", "Utils", "require"]; |
| for (var i = 0; i < imports.length; i++) |
| window[imports[i]] = backgroundPage[imports[i]]; |
| // Loads options from localStorage and sets UI elements accordingly |
| function loadOptions() |
| { |
| loadI18nStrings(); |
| // Set page title to i18n version of "Adblock Plus Options" |
| document.title = chrome.i18n.getMessage("options"); |
| + // Set links |
| + $("#acceptableAdsLink").attr("href", Prefs.subscriptions_exceptionsurl); |
| + $("#acceptableAdsDocs").attr("href", Prefs.documentation_link.replace(/%LINK%/g, "acceptable_ads").replace(/%LANG%/g, Utils.appLocale)); |
| + |
| // Add event listeners |
| window.addEventListener("unload", unloadOptions, false); |
| $("#updateFilterLists").click(updateFilterLists); |
| $("#startSubscriptionSelection").click(startSubscriptionSelection); |
| $("#subscriptionSelector").change(updateSubscriptionSelection); |
| $("#addSubscription").click(addSubscription); |
| + $("#acceptableAds").click(allowAcceptableAds); |
| $("#whitelistForm").submit(addWhitelistDomain); |
| $("#removeWhitelist").click(removeSelectedExcludedDomain); |
| $("#customFilterForm").submit(addTypedFilter); |
| $("#removeCustomFilter").click(removeSelectedFilters); |
| $("#rawFiltersButton").click(toggleFiltersInRawFormat); |
| $("#importRawFilters").click(importRawFiltersText); |
| FilterNotifier.addListener(onFilterChange); |
| @@ -51,25 +56,34 @@ function loadOptions() |
| // Reloads the displayed subscriptions and filters |
| function reloadFilters() |
| { |
| // Load user filter URLs |
| var container = document.getElementById("filterLists"); |
| while (container.lastChild) |
| container.removeChild(container.lastChild); |
| + var hasAcceptable = false; |
| for (var i = 0; i < FilterStorage.subscriptions.length; i++) |
| { |
| var subscription = FilterStorage.subscriptions[i]; |
| if (subscription instanceof SpecialSubscription) |
| continue; |
| + if (subscription.url == Prefs.subscriptions_exceptionsurl) |
| + { |
| + hasAcceptable = true; |
| + continue; |
| + } |
| + |
| addSubscriptionEntry(subscription); |
| } |
| + $("#acceptableAds").prop("checked", hasAcceptable); |
| + |
| // User-entered filters |
| showUserFilters(); |
| } |
| // Cleans up when the options window is closed |
| function unloadOptions() |
| { |
| FilterNotifier.removeListener(onFilterChange); |
| @@ -254,16 +268,34 @@ function doAddSubscription(url, title, h |
| if (homepage) |
| subscription.homepage = homepage; |
| FilterStorage.addSubscription(subscription); |
| if (subscription instanceof DownloadableSubscription && !subscription.lastDownload) |
| Synchronizer.execute(subscription); |
| } |
| +function allowAcceptableAds(event) |
| +{ |
| + var subscription = Subscription.fromURL(Prefs.subscriptions_exceptionsurl); |
| + if (!subscription) |
| + return; |
| + |
| + subscription.disabled = false; |
| + subscription.title = "Allow non-intrusive advertising"; |
| + if ($("#acceptableAds").prop("checked")) |
| + { |
| + FilterStorage.addSubscription(subscription); |
| + if (subscription instanceof DownloadableSubscription && !subscription.lastDownload) |
| + Synchronizer.execute(subscription); |
| + } |
| + else |
| + FilterStorage.removeSubscription(subscription); |
| +} |
| + |
| function findSubscriptionElement(subscription) |
| { |
| var children = document.getElementById("filterLists").childNodes; |
| for (var i = 0; i < children.length; i++) |
| if (children[i]._subscription == subscription) |
| return children[i]; |
| return null; |
| } |
| @@ -323,22 +355,32 @@ function onFilterChange(action, item, pa |
| case "subscription.lastDownload": |
| case "subscription.downloadStatus": |
| var element = findSubscriptionElement(item); |
| if (element) |
| updateSubscriptionInfo(element); |
| break; |
| case "subscription.added": |
| if (!(item instanceof SpecialSubscription) && !findSubscriptionElement(item)) |
| - addSubscriptionEntry(item); |
| + { |
| + if (item.url == Prefs.subscriptions_exceptionsurl) |
| + $("#acceptableAds").prop("checked", true); |
| + else |
| + addSubscriptionEntry(item); |
| + } |
| break; |
| case "subscription.removed": |
| - var element = findSubscriptionElement(item); |
| - if (element) |
| - element.parentNode.removeChild(element); |
| + if (item.url == Prefs.subscriptions_exceptionsurl) |
| + $("#acceptableAds").prop("checked", false); |
| + else |
| + { |
| + var element = findSubscriptionElement(item); |
| + if (element) |
| + element.parentNode.removeChild(element); |
| + } |
| break; |
| case "filter.added": |
| if (item instanceof WhitelistFilter && /^@@\|\|([^\/:]+)\^\$document$/.test(item.text)) |
| appendToListBox("excludedDomainsBox", RegExp.$1); |
| else |
| appendToListBox("userFiltersBox", item.text); |
| break; |
| case "filter.removed": |