| 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-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 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 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 379 ]); | 379 ]); |
| 380 collections.filterLists = new Collection( | 380 collections.filterLists = new Collection( |
| 381 [ | 381 [ |
| 382 { | 382 { |
| 383 id: "all-filter-lists-table", | 383 id: "all-filter-lists-table", |
| 384 onClick: toggleDisableSubscription, | 384 onClick: toggleDisableSubscription, |
| 385 useOriginalTitle: true | 385 useOriginalTitle: true |
| 386 } | 386 } |
| 387 ]); | 387 ]); |
| 388 | 388 |
| 389 function observeSubscription(subscription) | 389 function updateLanguageCollections(subscription) |
| 390 { | 390 { |
| 391 function onObjectChanged(change) | 391 var recommendation = recommendationsMap[subscription.url]; |
| 392 |
| 393 if (recommendation && recommendation.type == "ads") |
| 392 { | 394 { |
| 393 for (var i = 0; i < change.length; i++) | 395 if (subscription.disabled) |
| 394 { | 396 { |
| 395 if (change[i].name == "disabled") | 397 collections.allLangs.addItems(subscription); |
| 396 { | 398 collections.langs.removeItem(subscription); |
| 397 var recommendation = recommendationsMap[subscription.url]; | |
| 398 if (recommendation && recommendation.type == "ads") | |
| 399 { | |
| 400 if (subscription.disabled == false) | |
| 401 { | |
| 402 collections.allLangs.removeItem(subscription); | |
| 403 collections.langs.addItems(subscription); | |
| 404 } | |
| 405 else | |
| 406 { | |
| 407 collections.allLangs.addItems(subscription); | |
| 408 collections.langs.removeItem(subscription); | |
| 409 } | |
| 410 } | |
| 411 } | |
| 412 } | 399 } |
| 400 else |
| 401 { |
| 402 collections.allLangs.removeItem(subscription); |
| 403 collections.langs.addItems(subscription); |
| 404 } |
| 405 } |
| 406 } |
| 413 | 407 |
| 414 for (var name in collections) | 408 function addSubscription(subscription) |
| 415 collections[name].updateItem(subscription); | 409 { |
| 410 var collection; |
| 411 if (subscription.url in recommendationsMap) |
| 412 { |
| 413 var recommendation = recommendationsMap[subscription.url]; |
| 414 if (recommendation.type != "ads") |
| 415 collection = collections.popular; |
| 416 else if (subscription.disabled == false) |
| 417 collection = collections.langs; |
| 418 else |
| 419 collection = collections.allLangs; |
| 416 } | 420 } |
| 421 else if (subscription.url == acceptableAdsUrl) |
| 422 collection = collections.acceptableAds; |
| 423 else |
| 424 collection = collections.custom; |
| 417 | 425 |
| 418 if (!Object.observe) | 426 collection.addItems(subscription); |
| 419 { | 427 subscriptionsMap[subscription.url] = subscription; |
| 420 Object.keys(subscription).forEach(function(property) | |
| 421 { | |
| 422 var value = subscription[property]; | |
| 423 Object.defineProperty(subscription, property, | |
| 424 { | |
| 425 get: function() | |
| 426 { | |
| 427 return value; | |
| 428 }, | |
| 429 set: function(newValue) | |
| 430 { | |
| 431 if (value != newValue) | |
| 432 { | |
| 433 value = newValue; | |
| 434 onObjectChanged([{name: property}]); | |
| 435 } | |
| 436 } | |
| 437 }); | |
| 438 }); | |
| 439 } | |
| 440 else | |
| 441 { | |
| 442 Object.observe(subscription, onObjectChanged); | |
| 443 } | |
| 444 } | 428 } |
| 445 | 429 |
| 446 function updateSubscription(subscription) | 430 function updateSubscription(subscription) |
| 447 { | 431 { |
| 448 var subscriptionUrl = subscription.url; | 432 var knownSubscription = subscriptionsMap[subscription.url]; |
| 449 var knownSubscription = subscriptionsMap[subscriptionUrl]; | 433 for (var property in subscription) |
| 450 if (knownSubscription) | |
| 451 { | 434 { |
| 452 for (var property in subscription) | 435 if (property == "title" && subscription.url in recommendationsMap) |
| 453 { | 436 knownSubscription.originalTitle = subscription.title; |
| 454 if (property == "title" && subscriptionUrl in recommendationsMap) | 437 else |
| 455 knownSubscription.originalTitle = subscription.title; | 438 knownSubscription[property] = subscription[property]; |
| 456 else | |
| 457 knownSubscription[property] = subscription[property]; | |
| 458 } | |
| 459 } | 439 } |
| 460 else | |
| 461 { | |
| 462 observeSubscription(subscription); | |
| 463 | 440 |
| 464 var collection; | 441 for (var name in collections) |
| 465 if (subscriptionUrl in recommendationsMap) | 442 collections[name].updateItem(knownSubscription); |
| 466 { | |
| 467 var recommendation = recommendationsMap[subscriptionUrl]; | |
| 468 if (recommendation.type != "ads") | |
| 469 collection = collections.popular; | |
| 470 else if (subscription.disabled == false) | |
| 471 collection = collections.langs; | |
| 472 else | |
| 473 collection = collections.allLangs; | |
| 474 } | |
| 475 else if (subscriptionUrl == acceptableAdsUrl) | |
| 476 collection = collections.acceptableAds; | |
| 477 else | |
| 478 collection = collections.custom; | |
| 479 | 443 |
| 480 collection.addItems(subscription); | 444 return knownSubscription; |
| 481 subscriptionsMap[subscriptionUrl] = subscription; | |
| 482 } | |
| 483 } | 445 } |
| 484 | 446 |
| 485 function updateFilter(filter) | 447 function updateFilter(filter) |
| 486 { | 448 { |
| 487 var match = filter.text.match(/^@@\|\|([^\/:]+)\^\$document$/); | 449 var match = filter.text.match(/^@@\|\|([^\/:]+)\^\$document$/); |
| 488 if (match && !filtersMap[filter.text]) | 450 if (match && !filtersMap[filter.text]) |
| 489 { | 451 { |
| 490 filter.title = match[1]; | 452 filter.title = match[1]; |
| 491 collections.whitelist.addItems(filter); | 453 collections.whitelist.addItems(filter); |
| 492 } | 454 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 prefix = prefix.replace(/\W/g, "_"); | 487 prefix = prefix.replace(/\W/g, "_"); |
| 526 subscription.title = getMessage("options_language_" + prefix); | 488 subscription.title = getMessage("options_language_" + prefix); |
| 527 } | 489 } |
| 528 else | 490 else |
| 529 { | 491 { |
| 530 var type = recommendation.type.replace(/\W/g, "_"); | 492 var type = recommendation.type.replace(/\W/g, "_"); |
| 531 subscription.title = getMessage("common_feature_" + type + "_title")
; | 493 subscription.title = getMessage("common_feature_" + type + "_title")
; |
| 532 } | 494 } |
| 533 | 495 |
| 534 recommendationsMap[subscription.url] = recommendation; | 496 recommendationsMap[subscription.url] = recommendation; |
| 535 updateSubscription(subscription); | 497 addSubscription(subscription); |
| 536 } | 498 } |
| 537 }); | 499 }); |
| 538 } | 500 } |
| 539 | 501 |
| 540 function findParentData(element, dataName, returnElement) | 502 function findParentData(element, dataName, returnElement) |
| 541 { | 503 { |
| 542 while (element) | 504 while (element) |
| 543 { | 505 { |
| 544 if (element.hasAttribute("data-" + dataName)) | 506 if (element.hasAttribute("data-" + dataName)) |
| 545 return returnElement ? element : element.getAttribute("data-" + dataName
); | 507 return returnElement ? element : element.getAttribute("data-" + dataName
); |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 868 }); | 830 }); |
| 869 loadRecommendations(); | 831 loadRecommendations(); |
| 870 ext.backgroundPage.sendMessage( | 832 ext.backgroundPage.sendMessage( |
| 871 { | 833 { |
| 872 type: "prefs.get", | 834 type: "prefs.get", |
| 873 key: "subscriptions_exceptionsurl" | 835 key: "subscriptions_exceptionsurl" |
| 874 }, | 836 }, |
| 875 function(url) | 837 function(url) |
| 876 { | 838 { |
| 877 acceptableAdsUrl = url; | 839 acceptableAdsUrl = url; |
| 878 updateSubscription({ | 840 addSubscription({ |
| 879 url: acceptableAdsUrl, | 841 url: acceptableAdsUrl, |
| 880 disabled: true | 842 disabled: true |
| 881 }); | 843 }); |
| 882 | 844 |
| 883 // Load user subscriptions | 845 // Load user subscriptions |
| 884 ext.backgroundPage.sendMessage( | 846 ext.backgroundPage.sendMessage( |
| 885 { | 847 { |
| 886 type: "subscriptions.get", | 848 type: "subscriptions.get", |
| 887 downloadable: true | 849 downloadable: true |
| 888 }, | 850 }, |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 958 delete filtersMap[filter.text]; | 920 delete filtersMap[filter.text]; |
| 959 updateShareLink(); | 921 updateShareLink(); |
| 960 break; | 922 break; |
| 961 } | 923 } |
| 962 } | 924 } |
| 963 | 925 |
| 964 function onSubscriptionMessage(action, subscription) | 926 function onSubscriptionMessage(action, subscription) |
| 965 { | 927 { |
| 966 switch (action) | 928 switch (action) |
| 967 { | 929 { |
| 930 case "disabled": |
| 931 subscription = updateSubscription(subscription); |
| 932 updateLanguageCollections(subscription); |
| 933 break; |
| 934 case "downloading": |
| 935 case "downloadStatus": |
| 936 case "homepage": |
| 937 case "lastDownload": |
| 938 case "title": |
| 939 updateSubscription(subscription); |
| 940 break; |
| 968 case "added": | 941 case "added": |
| 969 updateSubscription(subscription); | 942 if (subscription.url in subscriptionsMap) |
| 970 updateShareLink(); | 943 subscription = updateSubscription(subscription); |
| 944 else |
| 945 addSubscription(subscription); |
| 971 | 946 |
| 972 var knownSubscription = subscriptionsMap[subscription.url]; | 947 collections.filterLists.addItems(subscription); |
| 973 if (knownSubscription) | 948 updateLanguageCollections(subscription); |
| 974 collections.filterLists.addItems(knownSubscription); | |
| 975 else | |
| 976 collections.filterLists.addItems(subscription); | |
| 977 break; | |
| 978 case "disabled": | |
| 979 updateSubscription(subscription); | |
| 980 updateShareLink(); | |
| 981 break; | 949 break; |
| 982 case "removed": | 950 case "removed": |
| 983 var knownSubscription = subscriptionsMap[subscription.url]; | 951 var knownSubscription = subscriptionsMap[subscription.url]; |
| 984 if (subscription.url == acceptableAdsUrl) | 952 |
| 953 if (subscription.url == acceptableAdsUrl || |
| 954 subscription.url in recommendationsMap) |
| 985 { | 955 { |
| 986 subscription.disabled = true; | 956 subscription.disabled = true; |
| 987 updateSubscription(subscription); | 957 onSubscriptionMessage("disabled", subscription); |
| 988 } | 958 } |
| 989 else | 959 else |
| 990 { | 960 { |
| 991 if (subscription.url in recommendationsMap) | 961 collections.custom.removeItem(knownSubscription); |
| 992 knownSubscription.disabled = true; | 962 delete subscriptionsMap[subscription.url]; |
| 993 else | |
| 994 { | |
| 995 collections.custom.removeItem(knownSubscription); | |
| 996 delete subscriptionsMap[subscription.url]; | |
| 997 } | |
| 998 } | 963 } |
| 999 updateShareLink(); | |
| 1000 collections.filterLists.removeItem(knownSubscription); | 964 collections.filterLists.removeItem(knownSubscription); |
| 1001 break; | 965 break; |
| 1002 default: | |
| 1003 updateSubscription(subscription); | |
| 1004 break; | |
| 1005 } | 966 } |
| 967 |
| 968 updateShareLink(); |
| 1006 } | 969 } |
| 1007 | 970 |
| 1008 function hidePref(key, value) | 971 function hidePref(key, value) |
| 1009 { | 972 { |
| 1010 var element = document.querySelector("[data-pref='" + key + "']"); | 973 var element = document.querySelector("[data-pref='" + key + "']"); |
| 1011 if (element) | 974 if (element) |
| 1012 element.setAttribute("aria-hidden", value); | 975 element.setAttribute("aria-hidden", value); |
| 1013 } | 976 } |
| 1014 | 977 |
| 1015 function getPref(key, callback) | 978 function getPref(key, callback) |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1154 }); | 1117 }); |
| 1155 ext.backgroundPage.sendMessage( | 1118 ext.backgroundPage.sendMessage( |
| 1156 { | 1119 { |
| 1157 type: "subscriptions.listen", | 1120 type: "subscriptions.listen", |
| 1158 filter: ["added", "disabled", "homepage", "lastDownload", "removed", | 1121 filter: ["added", "disabled", "homepage", "lastDownload", "removed", |
| 1159 "title", "downloadStatus", "downloading"] | 1122 "title", "downloadStatus", "downloading"] |
| 1160 }); | 1123 }); |
| 1161 | 1124 |
| 1162 window.addEventListener("DOMContentLoaded", onDOMLoaded, false); | 1125 window.addEventListener("DOMContentLoaded", onDOMLoaded, false); |
| 1163 })(); | 1126 })(); |
| OLD | NEW |