@qooxdoo/framework
Version:
The JS Framework for Coders
118 lines (93 loc) • 3 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2011 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
************************************************************************ */
/**
* Requests web fonts from {@link qx.bom.webfonts.Manager} and fires events
* when their loading status is known.
*/
qx.Class.define("qx.bom.webfonts.WebFont", {
extend : qx.bom.Font,
/*
*****************************************************************************
EVENTS
*****************************************************************************
*/
events :
{
/**
* Fired when the status of a web font has been determined. The event data
* is a map with the keys "family" (the font-family name) and "valid"
* (Boolean).
*/
"changeStatus" : "qx.event.type.Data"
},
/*
*****************************************************************************
PROPERTIES
*****************************************************************************
*/
properties :
{
/**
* The source of the webfont.
*/
sources :
{
nullable : true,
apply : "_applySources"
}
},
/*
*****************************************************************************
MEMBERS
*****************************************************************************
*/
members :
{
__families : null,
// property apply
_applySources : function(value, old) {
var families = [];
for (var i=0, l=value.length; i<l; i++) {
var familyName = this._quoteFontFamily(value[i].family);
families.push(familyName);
var sourcesList = value[i];
sourcesList.comparisonString = this.getComparisonString();
sourcesList.version = this.getVersion();
qx.bom.webfonts.Manager.getInstance().require(familyName, sourcesList, this._onWebFontChangeStatus, this);
}
this.setFamily(families.concat(this.getFamily()));
},
/**
* Propagates web font status changes
*
* @param ev {qx.event.type.Data} "changeStatus"
*/
_onWebFontChangeStatus : function(ev)
{
var result = ev.getData();
this.fireDataEvent("changeStatus", result);
if (qx.core.Environment.get("qx.debug")) {
if (result.valid === false) {
this.warn("WebFont " + result.family + " was not applied, perhaps the source file could not be loaded.");
}
}
},
/**
* Makes sure font-family names containing spaces are properly quoted
*
* @param familyName {String} A font-family CSS value
* @return {String} The quoted family name
*/
_quoteFontFamily : function(familyName)
{
return familyName.replace(/["']/g, "");
}
}
});