67 lines
2.0 KiB
JavaScript
67 lines
2.0 KiB
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([]);
|
|
}
|
|
};
|
|
});
|