| 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); | 
| +    } | 
| +  }; | 
| +})(); | 
|  |