@iccube/webfontloader
Version:
Web Font Loader gives you added control when using linked fonts via @font-face.
67 lines (57 loc) • 2.11 kB
JavaScript
goog.provide('webfont.modules.Fontdeck');
goog.require('webfont.Font');
/**
* @constructor
* @implements {webfont.FontModule}
*/
webfont.modules.Fontdeck = function(domHelper, configuration) {
this.domHelper_ = domHelper;
this.configuration_ = configuration;
this.fonts_ = [];
};
/**
* @const
* @type {string}
*/
webfont.modules.Fontdeck.NAME = 'fontdeck';
webfont.modules.Fontdeck.HOOK = '__webfontfontdeckmodule__';
webfont.modules.Fontdeck.API = 'https://f.fontdeck.com/s/css/js/';
goog.scope(function () {
var Fontdeck = webfont.modules.Fontdeck,
Font = webfont.Font,
FontVariationDescription = webfont.FontVariationDescription;
Fontdeck.prototype.getScriptSrc = function(projectId) {
// For empty iframes, fall back to main window's hostname.
var hostname = this.domHelper_.getHostName();
var api = this.configuration_['api'] || webfont.modules.Fontdeck.API;
return api + hostname + '/' + projectId + '.js';
};
Fontdeck.prototype.load = function(onReady) {
var projectId = this.configuration_['id'];
var loadWindow = this.domHelper_.getLoadWindow();
var self = this;
if (projectId) {
// Provide data to Fontdeck for processing.
if (!loadWindow[webfont.modules.Fontdeck.HOOK]) {
loadWindow[webfont.modules.Fontdeck.HOOK] = {};
}
// Fontdeck will call this function to indicate support status
// and what fonts are provided.
loadWindow[webfont.modules.Fontdeck.HOOK][projectId] = function(fontdeckSupports, data) {
for (var i = 0, j = data['fonts'].length; i<j; ++i) {
var font = data['fonts'][i];
self.fonts_.push(new Font(font['name'], Font.parseCssVariation('font-weight:' + font['weight'] + ';font-style:' + font['style'])));
}
onReady(self.fonts_);
};
// Call the Fontdeck API.
this.domHelper_.loadScript(this.getScriptSrc(projectId), function (err) {
if (err) {
onReady([]);
}
});
} else {
onReady([]);
}
};
});