| Index: new-options.js |
| =================================================================== |
| --- a/new-options.js |
| +++ b/new-options.js |
| @@ -25,6 +25,8 @@ |
| let filtersMap = Object.create(null); |
| let collections = Object.create(null); |
| let acceptableAdsUrl = null; |
| + let acceptableAdsPrivacyUrl = null; |
| + let subscriptionToChange = null; |
| let isCustomFiltersLoaded = false; |
| let {getMessage} = ext.i18n; |
| let customFilters = []; |
| @@ -44,6 +46,8 @@ |
| const minuteInMs = 60000; |
| const hourInMs = 3600000; |
| const fullDayInMs = 86400000; |
| + const privacySubscriptions = ["privacy", "social"]; |
| + const moreSubscriptions = ["malware", "anti-adblock"]; |
| function Collection(details) |
| { |
| @@ -83,8 +87,10 @@ |
| Collection.prototype._getItemTitle = function(item, i) |
| { |
| - if (item.url == acceptableAdsUrl) |
| - return getMessage("options_acceptableAds_description"); |
| + if (item.url === acceptableAdsUrl) |
|
Thomas Greiner
2017/08/09 18:14:49
Do we even need this special handling of Acceptabl
saroyanm
2017/08/14 14:00:10
I think that we want the title to be translated, a
Thomas Greiner
2017/08/15 17:10:29
What's so bad about showing the original (i.e. unt
saroyanm
2017/08/16 14:17:38
Nevermind I totally agree, I thought that this als
|
| + return getMessage("options_aa_tracking_label"); |
|
Thomas Greiner
2017/08/09 18:14:49
Detail: Let's be consistent with the naming scheme
saroyanm
2017/08/14 14:00:09
Agree, I'll change.
saroyanm
2017/08/16 14:17:38
Done.
|
| + if (item.url === acceptableAdsPrivacyUrl) |
| + return getMessage("options_aa_no_tracking_label"); |
| if (this.details[i].useOriginalTitle && item.originalTitle) |
| return item.originalTitle; |
| return item.title || item.url || item.text; |
| @@ -98,9 +104,9 @@ |
| // disabled, but only be removed. That way it's grouped together with |
| // the "Own filter list" which cannot be disabled either at the bottom |
| // of the filter lists in the Advanced tab. |
| - if (a.url == acceptableAdsUrl) |
| + if (a.url == acceptableAdsUrl || a.url == acceptableAdsPrivacyUrl) |
| return 1; |
| - if (b.url == acceptableAdsUrl) |
| + if (b.url == acceptableAdsUrl || b.url == acceptableAdsPrivacyUrl) |
| return -1; |
| // Make sure that newly added entries always appear on top in descending |
| @@ -134,12 +140,19 @@ |
| listItem.setAttribute("data-access", item.url || item.text); |
| listItem.setAttribute("role", "section"); |
| - let label = listItem.querySelector(".display"); |
| - if (item.recommended && label.hasAttribute("data-tooltip")) |
| + let tooltip = listItem.querySelector("[data-tooltip]"); |
| + if (tooltip && tooltip.hasAttribute("data-tooltip")) |
|
Thomas Greiner
2017/08/09 18:14:48
Detail: The second condition is redundant because
saroyanm
2017/08/14 14:00:10
Well spotted.
saroyanm
2017/08/16 14:17:38
Done.
|
| { |
| - let tooltipId = label.getAttribute("data-tooltip"); |
| - tooltipId = tooltipId.replace("%value%", item.recommended); |
| - label.setAttribute("data-tooltip", tooltipId); |
| + if (item.recommended) |
|
Thomas Greiner
2017/08/09 18:14:48
According to the spec, not all subscriptions that
saroyanm
2017/08/14 14:00:08
I agree, make sense to first check if the string f
saroyanm
2017/08/16 14:17:37
Done.
|
| + { |
| + let tooltipId = tooltip.getAttribute("data-tooltip"); |
| + tooltipId = tooltipId.replace("%value%", item.recommended); |
| + tooltip.setAttribute("data-tooltip", tooltipId); |
| + } |
| + else |
| + { |
| + tooltip.parentNode.removeChild(tooltip); |
| + } |
| } |
| for (let control of listItem.querySelectorAll(".control")) |
| @@ -222,7 +235,9 @@ |
| if (control) |
| { |
| control.setAttribute("aria-checked", item.disabled == false); |
| - if (item.url == acceptableAdsUrl && this == collections.filterLists) |
| + if ((item.url == acceptableAdsUrl || |
| + item.url == acceptableAdsPrivacyUrl) && |
|
Thomas Greiner
2017/08/09 18:14:50
Detail: This is already the third time that you're
saroyanm
2017/08/14 14:00:10
agree.
saroyanm
2017/08/16 14:17:36
Done.
|
| + this == collections.filterLists) |
| control.disabled = true; |
| } |
| @@ -330,31 +345,26 @@ |
| return true; |
| } |
| - collections.popular = new Collection([ |
| + collections.security = new Collection([ |
| { |
| - id: "recommend-list-table" |
| + id: "recommend-security-list-table" |
| } |
| ]); |
| collections.langs = new Collection([ |
| { |
| id: "blocking-languages-table", |
| - emptyText: ["options_dialog_language_added_empty"] |
| - }, |
| - { |
| - id: "blocking-languages-dialog-table", |
| - emptyText: ["options_dialog_language_added_empty"] |
| + emptyText: ["options_language_empty"], |
| + switchSingleEntryControl: true |
|
Thomas Greiner
2017/08/09 18:14:48
Detail: This property appears to be unused.
saroyanm
2017/08/14 14:00:09
right, will remove.
saroyanm
2017/08/16 14:17:38
Done.
|
| } |
| ]); |
| collections.allLangs = new Collection([ |
| { |
| - id: "all-lang-table", |
| - emptyText: ["options_dialog_language_other_empty"], |
| - searchable: true |
| - } |
| - ]); |
| - collections.acceptableAds = new Collection([ |
| + id: "all-lang-table-add", |
| + emptyText: ["options_dialog_language_other_empty"] |
| + }, |
| { |
| - id: "acceptableads-table" |
| + id: "all-lang-table-change", |
| + emptyText: ["options_dialog_language_other_empty"] |
| } |
| ]); |
| collections.custom = new Collection([ |
| @@ -375,20 +385,21 @@ |
| } |
| ]); |
| - function toggleShowLanguage(subscription) |
| + function toggleShowRecommendation(subscription) |
| { |
| if (subscription.recommended == "ads") |
| { |
| if (subscription.disabled) |
| - { |
| - collections.allLangs.addItem(subscription); |
| collections.langs.removeItem(subscription); |
| - } |
| else |
| - { |
| - collections.allLangs.removeItem(subscription); |
| collections.langs.addItem(subscription); |
| - } |
| + } |
| + |
| + if (moreSubscriptions.indexOf(subscription.recommended) >= 0 && |
|
Thomas Greiner
2017/08/09 18:14:50
This is the opposite of what the spec says: "All f
saroyanm
2017/08/14 14:00:08
Hmmm, good point.. I'll update this.
saroyanm
2017/08/16 14:17:36
Done.
|
| + subscription.disabled == false) |
| + { |
| + collections.custom.addItem(subscription); |
| + updateTooltips(); |
| } |
| } |
| @@ -397,21 +408,36 @@ |
| let collection; |
| if (subscription.recommended) |
| { |
| - if (subscription.recommended != "ads") |
| - collection = collections.popular; |
| + if (privacySubscriptions.indexOf(subscription.recommended) >= 0) |
|
Thomas Greiner
2017/08/09 18:14:49
Detail: This naming doesn't make sense. You're put
Thomas Greiner
2017/08/09 18:14:50
Detail: You're only using this variable here and w
saroyanm
2017/08/14 14:00:09
Good point.
saroyanm
2017/08/16 14:17:36
Done.
saroyanm
2017/08/16 14:17:36
Not anymore
|
| + collection = collections.security; |
| + else if (subscription.recommended == "ads") |
| + { |
| + if (subscription.disabled == false) |
| + collection = collections.langs; |
| + else |
| + collection = collections.allLangs; |
| + } |
| else if (subscription.disabled == false) |
| - collection = collections.langs; |
| + { |
| + collection = collections.custom; |
| + } |
| else |
| - collection = collections.allLangs; |
| + { |
| + subscriptionsMap[subscription.url] = subscription; |
| + return; |
| + } |
| } |
| - else if (subscription.url == acceptableAdsUrl) |
| - collection = collections.acceptableAds; |
| + else if (subscription.url == acceptableAdsUrl || |
| + subscription.url == acceptableAdsPrivacyUrl) |
| + { |
| + return; |
|
Thomas Greiner
2017/08/09 18:14:50
Doesn't this mean that neither of the Acceptable A
saroyanm
2017/08/14 14:00:09
I think I tried to be consistent with previous imp
Thomas Greiner
2017/08/15 17:10:29
Ok, thanks.
saroyanm
2017/08/16 14:17:37
I did updated the implementation on how subscripti
|
| + } |
| else |
| collection = collections.custom; |
| collection.addItem(subscription); |
| subscriptionsMap[subscription.url] = subscription; |
| - toggleShowLanguage(subscription); |
| + toggleShowRecommendation(subscription); |
| updateTooltips(); |
| } |
| @@ -420,7 +446,7 @@ |
| for (let name in collections) |
| collections[name].updateItem(subscription); |
| - toggleShowLanguage(subscription); |
| + toggleShowRecommendation(subscription); |
| } |
| function updateFilter(filter) |
| @@ -558,15 +584,57 @@ |
| closeDialog(); |
| break; |
| } |
| + case "block-all": |
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.remove", |
| + url: acceptableAdsPrivacyUrl |
| + }); |
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.remove", |
| + url: acceptableAdsUrl |
| + }); |
| + setDntNotification(false); |
|
Thomas Greiner
2017/08/09 18:14:48
Placing this here may cause inconsistent behavior
saroyanm
2017/08/14 14:00:09
Noted
saroyanm
2017/08/16 14:17:37
Done.
|
| + break; |
| case "cancel-custom-filters": |
| setCustomFiltersView("read"); |
| break; |
| + case "change-language-subscription": |
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.remove", |
| + url: subscriptionToChange |
|
Thomas Greiner
2017/08/09 18:14:50
This variable seems redundant because you should b
saroyanm
2017/08/14 14:00:09
agree.
saroyanm
2017/08/16 14:17:38
Done.
|
| + }); |
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.add", |
| + url: findParentData(element, "access", false) |
| + }); |
| + break; |
|
Thomas Greiner
2017/08/09 18:14:49
What if one of those two actions fails? In theory
saroyanm
2017/08/14 14:00:10
We still have a button for adding subscription, I
Thomas Greiner
2017/08/15 17:10:29
That's fine with me as long as we make sure that t
|
| case "close-dialog": |
| closeDialog(); |
| break; |
| case "edit-custom-filters": |
| setCustomFiltersView("write"); |
| break; |
| + case "enable-aa": |
|
saroyanm
2017/07/26 20:56:50
Adding acceptableAds multiple times, causes the "A
Thomas Greiner
2017/08/09 18:14:48
Acknowledged.
|
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.remove", |
| + url: acceptableAdsPrivacyUrl |
| + }); |
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.add", |
| + url: acceptableAdsUrl |
| + }); |
| + setDntNotification(false); |
| + break; |
| + case "enable-privacy-aa": |
|
saroyanm
2017/07/26 20:56:50
The "Acceptable Ads notification" I think will be
Thomas Greiner
2017/08/09 18:14:49
Acknowledged.
|
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.remove", |
| + url: acceptableAdsUrl |
| + }); |
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.add", |
| + url: acceptableAdsPrivacyUrl |
| + }); |
| + break; |
| case "import-subscription": { |
| let url = E("blockingList-textbox").value; |
| addEnableSubscription(url); |
| @@ -601,6 +669,9 @@ |
| url: findParentData(element, "access", false) |
| }); |
| break; |
| + case "save-change-subscription": |
| + subscriptionToChange = findParentData(element, "access", false); |
| + break; |
| case "save-custom-filters": |
| sendMessageHandleErrors({ |
| type: "filters.importRaw", |
| @@ -788,17 +859,6 @@ |
| function onDOMLoaded() |
| { |
| populateLists(); |
| - function onFindLanguageKeyUp() |
| - { |
| - let searchStyle = E("search-style"); |
| - if (!this.value) |
| - searchStyle.innerHTML = ""; |
| - else |
| - { |
| - searchStyle.innerHTML = "#all-lang-table li:not([data-search*=\"" + |
| - this.value.toLowerCase() + "\"]) { display: none; }"; |
| - } |
| - } |
| // Initialize navigation sidebar |
| ext.backgroundPage.sendMessage({ |
| @@ -820,9 +880,6 @@ |
| // Initialize interactive UI elements |
| document.body.addEventListener("click", onClick, false); |
| document.body.addEventListener("keyup", onKeyUp, false); |
| - let placeholderValue = getMessage("options_dialog_language_find"); |
| - E("find-language").setAttribute("placeholder", placeholderValue); |
| - E("find-language").addEventListener("keyup", onFindLanguageKeyUp, false); |
| let exampleValue = getMessage("options_whitelist_placeholder_example", |
| ["www.example.com"]); |
| E("whitelisting-textbox").setAttribute("placeholder", exampleValue); |
| @@ -831,6 +888,11 @@ |
| E("whitelisting-add-button").disabled = !e.target.value; |
| }, false); |
| + getDocLink("acceptable_ads_criteria", (link) => |
| + { |
| + setLinks("enable-aa-description", link); |
| + }); |
| + |
| // Advanced tab |
| let customize = document.querySelectorAll("#customize li[data-pref]"); |
| customize = Array.prototype.map.call(customize, (checkbox) => |
| @@ -969,6 +1031,14 @@ |
| focusedBeforeDialog.focus(); |
| } |
| + function setDntNotification(state) |
| + { |
| + if (state) |
| + E("acceptable-ads").classList.add("show-dnt-notification"); |
| + else |
| + E("acceptable-ads").classList.remove("show-dnt-notification"); |
| + } |
| + |
| function populateLists() |
| { |
| subscriptionsMap = Object.create(null); |
| @@ -1014,15 +1084,28 @@ |
| disabled: true |
| }); |
| - // Load user subscriptions |
| ext.backgroundPage.sendMessage({ |
| - type: "subscriptions.get", |
| - downloadable: true |
| + type: "prefs.get", |
| + key: "subscriptions_exceptionsurl_privacy" |
| }, |
| - (subscriptions) => |
| + (urlPrivacy) => |
| { |
| - for (let subscription of subscriptions) |
| - onSubscriptionMessage("added", subscription); |
| + acceptableAdsPrivacyUrl = urlPrivacy; |
| + addSubscription({ |
|
Thomas Greiner
2017/08/09 18:14:50
This looks odd. The subscription is not installed
saroyanm
2017/08/14 14:00:10
Agree it's odd :)
Will fix.
saroyanm
2017/08/16 14:17:37
Done.
|
| + url: acceptableAdsPrivacyUrl, |
| + disabled: true |
| + }); |
| + |
| + // Load user subscriptions |
|
Thomas Greiner
2017/08/09 18:14:49
This code doesn't depend on the value of `urlPriva
saroyanm
2017/08/14 14:00:09
There are checks involved dependant on acceptableA
Thomas Greiner
2017/08/15 17:10:29
Which checks in particular are you referring to?
saroyanm
2017/08/16 14:17:37
To checks in "onSubscriptionMessage", we do same f
Thomas Greiner
2017/08/16 17:57:08
Ok, makes sense.
|
| + ext.backgroundPage.sendMessage({ |
| + type: "subscriptions.get", |
| + downloadable: true |
| + }, |
| + (subscriptions) => |
| + { |
| + for (let subscription of subscriptions) |
| + onSubscriptionMessage("added", subscription); |
| + }); |
| }); |
| }); |
| } |
| @@ -1130,10 +1213,24 @@ |
| else |
| addSubscription(subscription); |
| + if (subscription.url == acceptableAdsUrl) |
| + document.querySelector( |
| + "[name='acceptable-ads'][value='tracking']").checked = true; |
|
Thomas Greiner
2017/08/09 18:14:49
I noticed that you're only changing the value of `
Thomas Greiner
2017/08/09 18:14:49
Coding Style: "When an if statement, an else state
saroyanm
2017/08/14 14:00:10
Agree.
saroyanm
2017/08/16 14:17:37
Done.
|
| + if (subscription.url == acceptableAdsPrivacyUrl) |
|
Thomas Greiner
2017/08/09 18:14:48
Detail: This condition will never be `true` if the
saroyanm
2017/08/14 14:00:10
agree.
Thomas Greiner
2017/08/16 17:57:08
Maybe I'm missing something but I can't find the c
|
| + { |
| + document.querySelector( |
| + "[name='acceptable-ads'][value='no-tracking']").checked = true; |
| + if (!navigator.doNotTrack) |
|
saroyanm
2017/07/26 20:56:50
I couldn't find way to listen for "do not track" c
Thomas Greiner
2017/08/09 18:14:49
Users need to move away from the options page to c
saroyanm
2017/08/14 14:00:10
This is a good idea, but I think would be better t
Thomas Greiner
2017/08/15 17:10:30
Ok, sounds good.
|
| + setDntNotification(true); |
| + } |
| + |
| collections.filterLists.addItem(subscription); |
| break; |
| case "removed": |
| - if (subscription.url == acceptableAdsUrl || subscription.recommended) |
| + if (subscription.url == acceptableAdsUrl || |
| + subscription.url == acceptableAdsPrivacyUrl || |
| + subscription.recommended && |
| + moreSubscriptions.indexOf(subscription.recommended) == -1) |
| { |
| subscription.disabled = true; |
| onSubscriptionMessage("disabled", subscription); |
| @@ -1273,10 +1370,6 @@ |
| let tooltip = document.createElement("div"); |
| tooltip.setAttribute("role", "tooltip"); |
| - let flip = anchor.getAttribute("data-tooltip-flip"); |
| - if (flip) |
| - tooltip.className = "flip-" + flip; |
|
Thomas Greiner
2017/08/09 18:14:48
How are you planning to handle tooltip orientation
saroyanm
2017/08/14 14:00:09
Not yet, sure, but I think it make sense to re-imp
|
| - |
| let imageSource = anchor.getAttribute("data-tooltip-image"); |
| if (imageSource) |
| { |