| Index: new-options.js |
| =================================================================== |
| --- a/new-options.js |
| +++ b/new-options.js |
| @@ -70,12 +70,12 @@ |
| return item.title || item.url || item.text; |
| }; |
| - Collection.prototype.addItems = function() |
| + Collection.prototype.addItem = function(item) |
| { |
| - var length = Array.prototype.push.apply(this.items, arguments); |
| - if (length == 0) |
| + if (this.items.indexOf(item) >= 0) |
| return; |
| + this.items.push(item); |
| this.items.sort(function(a, b) |
| { |
| // Make sure that Acceptable Ads is always last, since it cannot be |
| @@ -96,43 +96,39 @@ |
| { |
| var table = E(this.details[j].id); |
| var template = table.querySelector("template"); |
| - for (var i = 0; i < arguments.length; i++) |
| + var listItem = document.createElement("li"); |
| + listItem.appendChild(document.importNode(template.content, true)); |
| + listItem.setAttribute("aria-label", this._getItemTitle(item, j)); |
| + listItem.setAttribute("data-access", item.url || item.text); |
| + listItem.setAttribute("role", "section"); |
| + |
| + var label = listItem.querySelector(".display"); |
| + if (item.recommended && label.hasAttribute("data-tooltip")) |
| { |
| - var item = arguments[i]; |
| - var listItem = document.createElement("li"); |
| - listItem.appendChild(document.importNode(template.content, true)); |
| - listItem.setAttribute("aria-label", this._getItemTitle(item, j)); |
| - listItem.setAttribute("data-access", item.url || item.text); |
| - listItem.setAttribute("role", "section"); |
| + var tooltipId = label.getAttribute("data-tooltip"); |
| + tooltipId = tooltipId.replace("%value%", item.recommended); |
| + label.setAttribute("data-tooltip", tooltipId); |
| + } |
| - var label = listItem.querySelector(".display"); |
| - if (item.recommended && label.hasAttribute("data-tooltip")) |
| + var controls = listItem.querySelectorAll(".control"); |
| + for (var k = 0; k < controls.length; k++) |
| + { |
| + if (controls[k].hasAttribute("title")) |
| { |
| - var tooltipId = label.getAttribute("data-tooltip"); |
| - tooltipId = tooltipId.replace("%value%", item.recommended); |
| - label.setAttribute("data-tooltip", tooltipId); |
| + var titleValue = getMessage(controls[k].getAttribute("title")); |
| + controls[k].setAttribute("title", titleValue) |
| } |
| + } |
| - var controls = listItem.querySelectorAll(".control"); |
| - for (var k = 0; k < controls.length; k++) |
| - { |
| - if (controls[k].hasAttribute("title")) |
| - { |
| - var titleValue = getMessage(controls[k].getAttribute("title")); |
| - controls[k].setAttribute("title", titleValue) |
| - } |
| - } |
| - |
| - this._setEmpty(table, null); |
| - if (table.hasChildNodes()) |
| - { |
| - table.insertBefore(listItem, |
| - table.childNodes[this.items.indexOf(item)]); |
| - } |
| - else |
| - table.appendChild(listItem); |
| - this.updateItem(item); |
| + this._setEmpty(table, null); |
| + if (table.hasChildNodes()) |
| + { |
| + table.insertBefore(listItem, |
| + table.childNodes[this.items.indexOf(item)]); |
| } |
| + else |
| + table.appendChild(listItem); |
| + this.updateItem(item); |
| } |
| return length; |
| }; |
| @@ -335,19 +331,19 @@ |
| } |
| ]); |
| - function updateLanguageCollections(subscription) |
| + function toggleShowLanguage(subscription) |
| { |
| if (subscription.recommended == "ads") |
| { |
| if (subscription.disabled) |
| { |
| - collections.allLangs.addItems(subscription); |
| + collections.allLangs.addItem(subscription); |
| collections.langs.removeItem(subscription); |
| } |
| else |
| { |
| collections.allLangs.removeItem(subscription); |
| - collections.langs.addItems(subscription); |
| + collections.langs.addItem(subscription); |
| } |
| } |
| } |
| @@ -369,26 +365,18 @@ |
| else |
| collection = collections.custom; |
| - collection.addItems(subscription); |
| + collection.addItem(subscription); |
| subscriptionsMap[subscription.url] = subscription; |
| + toggleShowLanguage(subscription); |
| updateTooltips(); |
| } |
| function updateSubscription(subscription) |
| { |
| - var knownSubscription = subscriptionsMap[subscription.url]; |
| - for (var property in subscription) |
| - { |
| - if (property == "title" && subscription.recommended) |
| - knownSubscription.originalTitle = subscription.title; |
| - else |
| - knownSubscription[property] = subscription[property]; |
| - } |
| + for (var name in collections) |
| + collections[name].updateItem(subscription); |
| - for (var name in collections) |
| - collections[name].updateItem(knownSubscription); |
| - |
| - return knownSubscription; |
| + toggleShowLanguage(subscription); |
| } |
| function updateFilter(filter) |
| @@ -397,10 +385,10 @@ |
| if (match && !filtersMap[filter.text]) |
| { |
| filter.title = match[1]; |
| - collections.whitelist.addItems(filter); |
| + collections.whitelist.addItem(filter); |
| } |
| else |
| - collections.customFilters.addItems(filter); |
| + collections.customFilters.addItem(filter); |
| filtersMap[filter.text] = filter; |
| } |
| @@ -422,7 +410,7 @@ |
| var element = elements[i]; |
| var type = element.getAttribute("type"); |
| var subscription = { |
| - disabled: null, |
| + disabled: true, |
| downloadStatus: null, |
| homepage: null, |
| originalTitle: element.getAttribute("title"), |
| @@ -1026,11 +1014,22 @@ |
| function onSubscriptionMessage(action, subscription) |
| { |
| + if (subscription.url in subscriptionsMap) |
| + { |
| + var knownSubscription = subscriptionsMap[subscription.url]; |
| + for (var property in subscription) |
| + { |
| + if (property == "title" && knownSubscription.recommended) |
| + knownSubscription.originalTitle = subscription.title; |
| + else |
| + knownSubscription[property] = subscription[property]; |
| + } |
| + subscription = knownSubscription; |
| + } |
| switch (action) |
| { |
| case "disabled": |
| - subscription = updateSubscription(subscription); |
| - updateLanguageCollections(subscription); |
| + updateSubscription(subscription); |
| break; |
| case "downloading": |
| case "downloadStatus": |
| @@ -1041,15 +1040,13 @@ |
| break; |
| case "added": |
| if (subscription.url in subscriptionsMap) |
| - subscription = updateSubscription(subscription); |
| + updateSubscription(subscription); |
| else |
| addSubscription(subscription); |
| - collections.filterLists.addItems(subscription); |
| - updateLanguageCollections(subscription); |
| + collections.filterLists.addItem(subscription); |
| break; |
| case "removed": |
| - var knownSubscription = subscriptionsMap[subscription.url]; |
| if (subscription.url == acceptableAdsUrl || subscription.recommended) |
| { |
| subscription.disabled = true; |
| @@ -1057,10 +1054,10 @@ |
| } |
| else |
| { |
| - collections.custom.removeItem(knownSubscription); |
| + collections.custom.removeItem(subscription); |
| delete subscriptionsMap[subscription.url]; |
| } |
| - collections.filterLists.removeItem(knownSubscription); |
| + collections.filterLists.removeItem(subscription); |
| break; |
| } |