@iccube/webfontloader
Version:
Web Font Loader gives you added control when using linked fonts via @font-face.
110 lines (93 loc) • 3.29 kB
JavaScript
goog.provide('webfont.modules.Monotype');
goog.require('webfont.Font');
/**
webfont.load({
monotype: {
projectId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'//this is your Fonts.com Web fonts projectId
}
});
*/
/**
* @constructor
* @implements {webfont.FontModule}
*/
webfont.modules.Monotype = function(domHelper, configuration) {
this.domHelper_ = domHelper;
this.configuration_ = configuration;
};
/**
* name of the module through which external API is supposed to call the MonotypeFontAPI.
*
* @const
* @type {string}
*/
webfont.modules.Monotype.NAME = 'monotype';
/**
* __mti_fntLst is the name of function that exposes Monotype's font list.
* @const
*/
webfont.modules.Monotype.HOOK = '__mti_fntLst';
/**
* __MonotypeAPIScript__ is the id of script added by google API. Currently 'fonts.com' supports only one script in a page.
* This may require change in future if 'fonts.com' begins supporting multiple scripts per page.
* @const
*/
webfont.modules.Monotype.SCRIPTID = '__MonotypeAPIScript__';
/**
* __MonotypeConfiguration__ is function exposed to fonts.com. fonts.com will use this function to get webfontloader configuration
* @const
*/
webfont.modules.Monotype.CONFIGURATION = '__MonotypeConfiguration__';
goog.scope(function() {
var Monotype = webfont.modules.Monotype,
Font = webfont.Font;
Monotype.prototype.getScriptSrc = function(projectId, version) {
var api = (this.configuration_['api'] || 'https://fast.fonts.net/jsapi')
return api + '/' + projectId + '.js' + (version ? '?v=' + version : '');
};
Monotype.prototype.load = function(onReady) {
var self = this;
var projectId = self.configuration_['projectId'];
var version = self.configuration_['version'];
function checkAndLoadIfDownloaded() {
if (loadWindow[Monotype.HOOK + projectId]) {
var mti_fnts = loadWindow[Monotype.HOOK + projectId](),
fonts = [],
fntVariation;
if (mti_fnts) {
for (var i = 0; i < mti_fnts.length; i++) {
var fnt = mti_fnts[i]["fontfamily"];
//Check if font-style and font-weight is available
if (mti_fnts[i]["fontStyle"] != undefined && mti_fnts[i]["fontWeight"] != undefined) {
fntVariation = mti_fnts[i]["fontStyle"] + mti_fnts[i]["fontWeight"];
fonts.push(new Font(fnt, fntVariation));
} else {
fonts.push(new Font(fnt));
}
}
}
onReady(fonts);
} else {
setTimeout(function() {
checkAndLoadIfDownloaded();
}, 50);
}
}
if (projectId) {
var loadWindow = self.domHelper_.getLoadWindow();
var script = this.domHelper_.loadScript(self.getScriptSrc(projectId, version), function(err) {
if (err) {
onReady([]);
} else {
loadWindow[Monotype.CONFIGURATION+ projectId] = function() {
return self.configuration_;
};
checkAndLoadIfDownloaded();
}
});
script["id"] = Monotype.SCRIPTID + projectId;
} else {
onReady([]);
}
};
});