| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| 3  * Copyright (C) 2006-2015 Eyeo GmbH | 3  * Copyright (C) 2006-2015 Eyeo GmbH | 
| 4  * | 4  * | 
| 5  * Adblock Plus is free software: you can redistribute it and/or modify | 5  * Adblock Plus is free software: you can redistribute it and/or modify | 
| 6  * it under the terms of the GNU General Public License version 3 as | 6  * it under the terms of the GNU General Public License version 3 as | 
| 7  * published by the Free Software Foundation. | 7  * published by the Free Software Foundation. | 
| 8  * | 8  * | 
| 9  * Adblock Plus is distributed in the hope that it will be useful, | 9  * Adblock Plus is distributed in the hope that it will be useful, | 
| 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 23   var recommendationsMap = Object.create(null); | 23   var recommendationsMap = Object.create(null); | 
| 24   var filtersMap = Object.create(null); | 24   var filtersMap = Object.create(null); | 
| 25   var collections = Object.create(null); | 25   var collections = Object.create(null); | 
| 26 | 26 | 
| 27   function Collection(details) | 27   function Collection(details) | 
| 28   { | 28   { | 
| 29     this.details = details; | 29     this.details = details; | 
| 30     this.items = []; | 30     this.items = []; | 
| 31   } | 31   } | 
| 32 | 32 | 
|  | 33   Collection.prototype._setEmpty = function(table, text) | 
|  | 34   { | 
|  | 35     var placeholder = table.querySelector(".empty-placeholder"); | 
|  | 36     if (text && !placeholder) | 
|  | 37     { | 
|  | 38       placeholder = document.createElement("li"); | 
|  | 39       placeholder.className = "empty-placeholder"; | 
|  | 40       placeholder.textContent = ext.i18n.getMessage(text); | 
|  | 41       table.appendChild(placeholder); | 
|  | 42     } | 
|  | 43     else if (placeholder) | 
|  | 44       table.removeChild(placeholder); | 
|  | 45   } | 
|  | 46 | 
| 33   Collection.prototype.addItems = function() | 47   Collection.prototype.addItems = function() | 
| 34   { | 48   { | 
| 35     var length = Array.prototype.push.apply(this.items, arguments); | 49     var length = Array.prototype.push.apply(this.items, arguments); | 
| 36     if (length == 0) | 50     if (length == 0) | 
| 37       return; | 51       return; | 
| 38 | 52 | 
| 39     this.items.sort(function(a, b) | 53     this.items.sort(function(a, b) | 
| 40     { | 54     { | 
| 41       var aValue = (a.title || a.text || a.url).toLowerCase(); | 55       var aValue = (a.title || a.text || a.url).toLowerCase(); | 
| 42       var bValue = (b.title || b.text || b.url).toLowerCase(); | 56       var bValue = (b.title || b.text || b.url).toLowerCase(); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 58         if (text) | 72         if (text) | 
| 59           listItem.setAttribute("data-search", text.toLowerCase()); | 73           listItem.setAttribute("data-search", text.toLowerCase()); | 
| 60 | 74 | 
| 61         var control = listItem.querySelector(".control"); | 75         var control = listItem.querySelector(".control"); | 
| 62         if (control) | 76         if (control) | 
| 63         { | 77         { | 
| 64           control.addEventListener("click", this.details[j].onClick, false); | 78           control.addEventListener("click", this.details[j].onClick, false); | 
| 65           control.checked = item.disabled == false; | 79           control.checked = item.disabled == false; | 
| 66         } | 80         } | 
| 67 | 81 | 
|  | 82         this._setEmpty(table, null); | 
| 68         if (table.hasChildNodes()) | 83         if (table.hasChildNodes()) | 
| 69           table.insertBefore(listItem, table.childNodes[this.items.indexOf(item)
     ]); | 84           table.insertBefore(listItem, table.childNodes[this.items.indexOf(item)
     ]); | 
| 70         else | 85         else | 
| 71           table.appendChild(listItem); | 86           table.appendChild(listItem); | 
| 72       } | 87       } | 
| 73     } | 88     } | 
| 74     return length; | 89     return length; | 
| 75   }; | 90   }; | 
| 76 | 91 | 
| 77   Collection.prototype.removeItem = function(item) | 92   Collection.prototype.removeItem = function(item) | 
| 78   { | 93   { | 
| 79     var index = this.items.indexOf(item); | 94     var index = this.items.indexOf(item); | 
| 80     if (index == -1) | 95     if (index == -1) | 
| 81       return; | 96       return; | 
| 82 | 97 | 
| 83     this.items.splice(index, 1); | 98     this.items.splice(index, 1); | 
| 84     var access = (item.url || item.text).replace(/'/g, "\\'"); |  | 
| 85     for (var i = 0; i < this.details.length; i++) | 99     for (var i = 0; i < this.details.length; i++) | 
| 86     { | 100     { | 
| 87       var table = E(this.details[i].id); | 101       var table = E(this.details[i].id); | 
| 88       var element = table.querySelector("[data-access='" + access + "']"); | 102       var element = table.childNodes[index]; | 
| 89       element.parentElement.removeChild(element); | 103       element.parentElement.removeChild(element); | 
|  | 104       if (this.items.length == 0) | 
|  | 105         this._setEmpty(table, this.details[i].emptyText); | 
| 90     } | 106     } | 
| 91   }; | 107   }; | 
| 92 | 108 | 
| 93   Collection.prototype.clearAll = function() | 109   Collection.prototype.clearAll = function() | 
| 94   { | 110   { | 
|  | 111     this.items = []; | 
| 95     for (var i = 0; i < this.details.length; i++) | 112     for (var i = 0; i < this.details.length; i++) | 
| 96     { | 113     { | 
| 97       var table = E(this.details[i].id); | 114       var table = E(this.details[i].id); | 
| 98       var template = table.querySelector("template"); | 115       var template = table.querySelector("template"); | 
| 99       table.innerHTML = ""; | 116       table.innerHTML = ""; | 
| 100       table.appendChild(template); | 117       table.appendChild(template); | 
|  | 118       this._setEmpty(table, this.details[i].emptyText); | 
| 101     } | 119     } | 
| 102     this.items.length = 0; |  | 
| 103   }; | 120   }; | 
| 104 | 121 | 
| 105   function onToggleSubscriptionClick(e) | 122   function onToggleSubscriptionClick(e) | 
| 106   { | 123   { | 
| 107     e.preventDefault(); | 124     e.preventDefault(); | 
| 108     var subscriptionUrl = e.target.parentNode.getAttribute("data-access"); | 125     var subscriptionUrl = e.target.parentNode.getAttribute("data-access"); | 
| 109     if (!e.target.checked) | 126     if (!e.target.checked) | 
| 110     { | 127     { | 
| 111        ext.backgroundPage.sendMessage( | 128       ext.backgroundPage.sendMessage({ | 
| 112         { | 129         type: "subscriptions.remove", | 
| 113           type: "subscriptions.remove", | 130         url: subscriptionUrl | 
| 114           url: subscriptionUrl | 131       }); | 
| 115         }); |  | 
| 116     } | 132     } | 
| 117     else | 133     else | 
| 118       addEnableSubscription(subscriptionUrl); | 134       addEnableSubscription(subscriptionUrl); | 
| 119   } | 135   } | 
| 120 | 136 | 
| 121   function onAddLanguageSubscriptionClick(e) | 137   function onAddLanguageSubscriptionClick(e) | 
| 122   { | 138   { | 
| 123     e.preventDefault(); | 139     e.preventDefault(); | 
| 124     var url = this.parentNode.getAttribute("data-access"); | 140     var url = this.parentNode.getAttribute("data-access"); | 
| 125     addEnableSubscription(url); | 141     addEnableSubscription(url); | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 139   [ | 155   [ | 
| 140     { | 156     { | 
| 141       id: "recommend-list-table", | 157       id: "recommend-list-table", | 
| 142       onClick: onToggleSubscriptionClick | 158       onClick: onToggleSubscriptionClick | 
| 143     } | 159     } | 
| 144   ]); | 160   ]); | 
| 145   collections.langs = new Collection( | 161   collections.langs = new Collection( | 
| 146   [ | 162   [ | 
| 147     { | 163     { | 
| 148       id: "blocking-languages-table", | 164       id: "blocking-languages-table", | 
|  | 165       emptyText: "options_dialog_language_added_empty", | 
| 149       onClick: onToggleSubscriptionClick | 166       onClick: onToggleSubscriptionClick | 
| 150     }, | 167     }, | 
| 151     { | 168     { | 
| 152       id: "blocking-languages-dialog-table" | 169       id: "blocking-languages-dialog-table", | 
|  | 170       emptyText: "options_dialog_language_added_empty" | 
| 153     } | 171     } | 
| 154   ]); | 172   ]); | 
| 155   collections.allLangs = new Collection( | 173   collections.allLangs = new Collection( | 
| 156   [ | 174   [ | 
| 157     { | 175     { | 
| 158       id: "all-lang-table", | 176       id: "all-lang-table", | 
|  | 177       emptyText: "options_dialog_language_other_empty", | 
| 159       onClick: onAddLanguageSubscriptionClick | 178       onClick: onAddLanguageSubscriptionClick | 
| 160     } | 179     } | 
| 161   ]); | 180   ]); | 
| 162   collections.acceptableAds = new Collection( | 181   collections.acceptableAds = new Collection( | 
| 163   [ | 182   [ | 
| 164     { | 183     { | 
| 165       id: "acceptableads-table", | 184       id: "acceptableads-table", | 
| 166       onClick: onToggleSubscriptionClick | 185       onClick: onToggleSubscriptionClick | 
| 167     } | 186     } | 
| 168   ]); | 187   ]); | 
| 169   collections.custom = new Collection( | 188   collections.custom = new Collection( | 
| 170   [ | 189   [ | 
| 171     { | 190     { | 
| 172       id: "custom-list-table", | 191       id: "custom-list-table", | 
| 173       onClick: onToggleSubscriptionClick | 192       onClick: onToggleSubscriptionClick | 
| 174     } | 193     } | 
| 175   ]); | 194   ]); | 
| 176   collections.whitelist = new Collection( | 195   collections.whitelist = new Collection( | 
| 177   [ | 196   [ | 
| 178     { | 197     { | 
| 179       id: "whitelisting-table", | 198       id: "whitelisting-table", | 
|  | 199       emptyText: "options_whitelisted_empty", | 
| 180       onClick: onRemoveFilterClick | 200       onClick: onRemoveFilterClick | 
| 181     } | 201     } | 
| 182   ]); | 202   ]); | 
| 183   collections.customFilters = new Collection( | 203   collections.customFilters = new Collection( | 
| 184   [ | 204   [ | 
| 185     { | 205     { | 
| 186       id: "custom-filters-table" | 206       id: "custom-filters-table", | 
|  | 207       emptyText: "options_customFilters_empty" | 
| 187     } | 208     } | 
| 188   ]); | 209   ]); | 
| 189 | 210 | 
| 190   function updateSubscription(subscription) | 211   function updateSubscription(subscription) | 
| 191   { | 212   { | 
| 192     var subscriptionUrl = subscription.url; | 213     var subscriptionUrl = subscription.url; | 
| 193     var knownSubscription = subscriptionsMap[subscriptionUrl]; | 214     var knownSubscription = subscriptionsMap[subscriptionUrl]; | 
| 194     if (knownSubscription) | 215     if (knownSubscription) | 
| 195       knownSubscription.disabled = subscription.disabled; | 216       knownSubscription.disabled = subscription.disabled; | 
| 196     else | 217     else | 
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 356           var title = dialog.querySelector("h3").textContent; | 377           var title = dialog.querySelector("h3").textContent; | 
| 357           var url = dialog.querySelector(".url").textContent; | 378           var url = dialog.querySelector(".url").textContent; | 
| 358           addEnableSubscription(url, title); | 379           addEnableSubscription(url, title); | 
| 359           closeDialog(); | 380           closeDialog(); | 
| 360           break; | 381           break; | 
| 361         case "cancel-custom-filters": | 382         case "cancel-custom-filters": | 
| 362           E("custom-filters").classList.remove("mode-edit"); | 383           E("custom-filters").classList.remove("mode-edit"); | 
| 363           break; | 384           break; | 
| 364         case "cancel-domain-exception": | 385         case "cancel-domain-exception": | 
| 365           E("whitelisting-textbox").value = ""; | 386           E("whitelisting-textbox").value = ""; | 
|  | 387           document.querySelector("#whitelisting .controls").classList.remove("mo
     de-edit"); | 
| 366           break; | 388           break; | 
| 367         case "close-dialog": | 389         case "close-dialog": | 
| 368           closeDialog(); | 390           closeDialog(); | 
| 369           break; | 391           break; | 
| 370         case "edit-custom-filters": | 392         case "edit-custom-filters": | 
| 371           E("custom-filters").classList.add("mode-edit"); | 393           E("custom-filters").classList.add("mode-edit"); | 
| 372           editCustomFilters(); | 394           editCustomFilters(); | 
| 373           break; | 395           break; | 
|  | 396         case "edit-domain-exception": | 
|  | 397           document.querySelector("#whitelisting .controls").classList.add("mode-
     edit"); | 
|  | 398           E("whitelisting-textbox").focus(); | 
|  | 399           break; | 
| 374         case "import-subscription": | 400         case "import-subscription": | 
| 375           var url = E("blockingList-textbox").value; | 401           var url = E("blockingList-textbox").value; | 
| 376           addEnableSubscription(url); | 402           addEnableSubscription(url); | 
| 377           closeDialog(); | 403           closeDialog(); | 
| 378           break; | 404           break; | 
| 379         case "open-dialog": | 405         case "open-dialog": | 
| 380           openDialog(element.getAttribute("data-dialog")); | 406           openDialog(element.getAttribute("data-dialog")); | 
| 381           break; | 407           break; | 
| 382         case "save-custom-filters": | 408         case "save-custom-filters": | 
| 383           ext.backgroundPage.sendMessage( | 409           ext.backgroundPage.sendMessage( | 
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 594     if (domain.value) | 620     if (domain.value) | 
| 595     { | 621     { | 
| 596       ext.backgroundPage.sendMessage( | 622       ext.backgroundPage.sendMessage( | 
| 597       { | 623       { | 
| 598         type: "filters.add", | 624         type: "filters.add", | 
| 599         text: "@@||" + domain.value.toLowerCase() + "^$document" | 625         text: "@@||" + domain.value.toLowerCase() + "^$document" | 
| 600       }); | 626       }); | 
| 601     } | 627     } | 
| 602 | 628 | 
| 603     domain.value = ""; | 629     domain.value = ""; | 
|  | 630     document.querySelector("#whitelisting .controls").classList.remove("mode-edi
     t"); | 
| 604   } | 631   } | 
| 605 | 632 | 
| 606   function editCustomFilters() | 633   function editCustomFilters() | 
| 607   { | 634   { | 
| 608     var customFilterItems = collections.customFilters.items; | 635     var customFilterItems = collections.customFilters.items; | 
| 609     var filterTexts = []; | 636     var filterTexts = []; | 
| 610     for (var i = 0; i < customFilterItems.length; i++) | 637     for (var i = 0; i < customFilterItems.length; i++) | 
| 611       filterTexts.push(customFilterItems[i].text); | 638       filterTexts.push(customFilterItems[i].text); | 
| 612     E("custom-filters-raw").value = filterTexts.join("\n"); | 639     E("custom-filters-raw").value = filterTexts.join("\n"); | 
| 613   } | 640   } | 
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 790     filter: ["added", "loaded", "removed"] | 817     filter: ["added", "loaded", "removed"] | 
| 791   }); | 818   }); | 
| 792   ext.backgroundPage.sendMessage( | 819   ext.backgroundPage.sendMessage( | 
| 793   { | 820   { | 
| 794     type: "subscriptions.listen", | 821     type: "subscriptions.listen", | 
| 795     filter: ["added", "disabled", "homepage", "removed", "title"] | 822     filter: ["added", "disabled", "homepage", "removed", "title"] | 
| 796   }); | 823   }); | 
| 797 | 824 | 
| 798   window.addEventListener("DOMContentLoaded", onDOMLoaded, false); | 825   window.addEventListener("DOMContentLoaded", onDOMLoaded, false); | 
| 799 })(); | 826 })(); | 
| OLD | NEW | 
|---|