goog.provide('webfont.FontModuleLoader'); goog.provide('webfont.FontModuleFactory');

/** @typedef {function(Object, webfont.DomHelper): webfont.FontModule} */ webfont.FontModuleFactory;

/**

* @constructor
*/

webfont.FontModuleLoader = function() {

/**
 * @type {Object.<string, webfont.FontModuleFactory>}
 */
this.modules_ = {};

};

goog.scope(function () {

var FontModuleLoader = webfont.FontModuleLoader;

/**
 * @param {string} name
 * @param {webfont.FontModuleFactory} factory
 */
FontModuleLoader.prototype.addModuleFactory = function(name, factory) {
  this.modules_[name] = factory;
};

/**
 * @param {Object} configuration
 * @param {webfont.DomHelper} domHelper
 * @return {Array.<webfont.FontModule>}
 */
FontModuleLoader.prototype.getModules = function(configuration, domHelper) {
  var modules = [];

  for (var key in configuration) {
    if (configuration.hasOwnProperty(key)) {
      var moduleFactory = this.modules_[key];

      if (moduleFactory) {
        modules.push(moduleFactory(configuration[key], domHelper));
      }
    }
  }
  return modules;
};

});