packages/kirki-framework/module-webfonts/src/assets/scripts/vendor-typekit/src/core/webfont.js
goog.provide('webfont.WebFont');
goog.require('webfont.DomHelper');
goog.require('webfont.EventDispatcher');
goog.require('webfont.FontWatcher');
goog.require('webfont.FontModuleLoader');
/**
* @param {Window} mainWindow The main application window containing
* webfontloader.js.
* @constructor
*/
webfont.WebFont = function(mainWindow) {
this.mainWindow_ = mainWindow;
this.fontModuleLoader_ = new webfont.FontModuleLoader();
this.moduleLoading_ = 0;
this.events_ = true;
this.classes_ = true;
};
goog.scope(function () {
var WebFont = webfont.WebFont,
DomHelper = webfont.DomHelper,
EventDispatcher = webfont.EventDispatcher,
FontWatcher = webfont.FontWatcher;
/**
* @param {string} name
* @param {webfont.FontModuleFactory} factory
*/
WebFont.prototype.addModule = function(name, factory) {
this.fontModuleLoader_.addModuleFactory(name, factory);
};
/**
* @param {Object} configuration
*/
WebFont.prototype.load = function(configuration) {
var context = configuration['context'] || this.mainWindow_;
this.domHelper_ = new DomHelper(this.mainWindow_, context);
this.events_ = configuration['events'] !== false;
this.classes_ = configuration['classes'] !== false;
var eventDispatcher = new EventDispatcher(
this.domHelper_,
configuration
);
this.load_(eventDispatcher, configuration);
};
/**
* @param {webfont.EventDispatcher} eventDispatcher
* @param {webfont.FontWatcher} fontWatcher
* @param {Array.<webfont.Font>} fonts
* @param {webfont.FontTestStrings=} opt_fontTestStrings
* @param {Object.<string, boolean>=} opt_metricCompatibleFonts
*/
WebFont.prototype.onModuleReady_ = function(eventDispatcher, fontWatcher, fonts, opt_fontTestStrings, opt_metricCompatibleFonts) {
var allModulesLoaded = --this.moduleLoading_ == 0;
if (this.classes_ || this.events_) {
setTimeout(function () {
fontWatcher.watchFonts(fonts, opt_fontTestStrings || null, opt_metricCompatibleFonts || null, allModulesLoaded);
}, 0);
}
};
/**
* @param {webfont.EventDispatcher} eventDispatcher
* @param {Object} configuration
*/
WebFont.prototype.load_ = function(eventDispatcher, configuration) {
var modules = [],
timeout = configuration['timeout'],
self = this;
// Immediately dispatch the loading event before initializing the modules
// so we know for sure that the loading event is synchronous.
eventDispatcher.dispatchLoading();
modules = this.fontModuleLoader_.getModules(configuration, this.domHelper_);
var fontWatcher = new webfont.FontWatcher(this.domHelper_, eventDispatcher, timeout);
this.moduleLoading_ = modules.length;
for (var i = 0, len = modules.length; i < len; i++) {
var module = modules[i];
module.load(function (fonts, opt_fontTestStrings, opt_metricCompatibleFonts) {
self.onModuleReady_(eventDispatcher, fontWatcher, fonts, opt_fontTestStrings, opt_metricCompatibleFonts);
});
}
};
});