| Index: lib/api.js | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/lib/api.js | 
| @@ -0,0 +1,131 @@ | 
| +/* | 
| + * This file is part of the Adblock Plus extension, | 
| + * Copyright (C) 2006-2012 Eyeo GmbH | 
| + * | 
| + * Adblock Plus is free software: you can redistribute it and/or modify | 
| + * it under the terms of the GNU General Public License version 3 as | 
| + * published by the Free Software Foundation. | 
| + * | 
| + * Adblock Plus is distributed in the hope that it will be useful, | 
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| + * GNU General Public License for more details. | 
| + * | 
| + * You should have received a copy of the GNU General Public License | 
| + * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 
| + */ | 
| + | 
| +var API = (function() | 
| +{ | 
| + var Filter = require("filterClasses").Filter; | 
| + var Subscription = require("subscriptionClasses").Subscription; | 
| + var SpecialSubscription = require("subscriptionClasses").SpecialSubscription; | 
| + var FilterStorage = require("filterStorage").FilterStorage; | 
| + var defaultMatcher = require("matcher").defaultMatcher; | 
| + var ElemHide = require("elemHide").ElemHide; | 
| + var Synchronizer = require("synchronizer").Synchronizer; | 
| + | 
| + return { | 
| + getFilterFromText: function(text) | 
| + { | 
| + text = Filter.normalize(text); | 
| + if (!text) | 
| + throw "Attempted to create a filter from empty text"; | 
| + return Filter.fromText(text); | 
| + }, | 
| + | 
| + isListedFilter: function(filter) | 
| + { | 
| + return filter.subscriptions.some(function(s) | 
| + { | 
| + return (s instanceof SpecialSubscription && !s.disabled); | 
| + }); | 
| + }, | 
| + | 
| + addFilterToList: function(filter) | 
| + { | 
| + FilterStorage.addFilter(filter); | 
| + }, | 
| + | 
| + removeFilterFromList: function(filter) | 
| + { | 
| + FilterStorage.removeFilter(filter); | 
| + }, | 
| + | 
| + getListedFilters: function() | 
| + { | 
| + var filters = {}; | 
| + for (var i = 0; i < FilterStorage.subscriptions.length; i++) | 
| + { | 
| + var subscription = FilterStorage.subscriptions[i]; | 
| + if (subscription instanceof SpecialSubscription) | 
| + { | 
| + for (var j = 0; j < subscription.filters.length; j++) | 
| + { | 
| + var filter = subscription.filters[j]; | 
| + if (!(filter.text in filters)) | 
| + filters[filter.text] = filter; | 
| + } | 
| + } | 
| + } | 
| + return Object.keys(filters).map(function(k) | 
| + { | 
| + return filters[k]; | 
| + }); | 
| + }, | 
| + | 
| + getSubscriptionFromUrl: function(url) | 
| + { | 
| + return Subscription.fromURL(url); | 
| + }, | 
| + | 
| + isListedSubscription: function(subscription) | 
| + { | 
| + return subscription.url in FilterStorage.knownSubscriptions; | 
| + }, | 
| + | 
| + addSubscriptionToList: function(subscription) | 
| + { | 
| + FilterStorage.addSubscription(subscription); | 
| + | 
| + // TODO, this currently crashes due to errors reported on a thread | 
| + //if (!subscription.lastDownload) | 
| + // Synchronizer.execute(subscription); | 
| + }, | 
| + | 
| + removeSubscriptionFromList: function(subscription) | 
| + { | 
| + FilterStorage.removeSubscription(subscription); | 
| + }, | 
| + | 
| + updateSubscription: function(subscription) | 
| + { | 
| + Synchronizer.execute(subscription); | 
| + }, | 
| + | 
| + isSubscriptionUpdating: function(subscription) | 
| + { | 
| + return Synchronizer.isExecuting(subscription.url); | 
| + }, | 
| + | 
| + getListedSubscriptions: function() | 
| + { | 
| + return FilterStorage.subscriptions.filter(function(s) | 
| + { | 
| + return !(s instanceof SpecialSubscription) | 
| + }); | 
| + }, | 
| + | 
| + checkFilterMatch: function(url, contentType, documentUrl) | 
| + { | 
| + // TODO: set thirdParty properly | 
| + var thirdParty = false; | 
| + return defaultMatcher.matchesAny(url, contentType, documentUrl, thirdParty); | 
| + }, | 
| + | 
| + getElementHidingSelectors: function(domain) | 
| + { | 
| + return ElemHide.getSelectorsForDomain(domain, false); | 
| + } | 
| + }; | 
| +})(); |