vue-poster-editor
Version:
A poster editor based on Vue.js
113 lines (80 loc) • 2.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _noop2 = require('lodash/noop');
var _noop3 = _interopRequireDefault(_noop2);
var _assign2 = require('lodash/assign');
var _assign3 = _interopRequireDefault(_assign2);
var _jquery = require('jquery');
var _jquery2 = _interopRequireDefault(_jquery);
var _bluebird = require('bluebird');
var _bluebird2 = _interopRequireDefault(_bluebird);
var _fontfaceobserver = require('fontfaceobserver');
var _fontfaceobserver2 = _interopRequireDefault(_fontfaceobserver);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var FontFace = window.FontFace;
if (!document.fonts || !document.fonts.load) {
FontFace = window.FontFace = function (name, url, descriptors) {
this.name = name;
this.url = url;
(0, _assign3.default)(this, {
style: 'normal',
weight: 'normal'
}, descriptors);
var _dfd = this._dfd = {};
_dfd.promise = new _bluebird2.default(function (resolve, reject) {
_dfd.resolve = resolve;
_dfd.reject = reject;
});
};
(0, _assign3.default)(FontFace.prototype, {
toCSS: function toCSS() {
var css = '@font-face {\n';
css += 'font-family: ' + this.name + ';\n';
css += 'src: ' + this.url + ';';
css += 'font-weight: ' + this.weight + ';';
css += 'font-style: ' + this.style + ';';
css += '}';
return css;
},
load: function load() {
return this._dfd.promise;
}
});
var fonts = document.fonts = {
ready: _bluebird2.default.resolve(),
check: _noop3.default,
_fonts: [],
size: 0,
loadTimeout: 1000,
add: function add(fontFace) {
var style = fonts.style;
if (!style) {
style = fonts.style = (0, _jquery2.default)('<style />').appendTo('head');
}
if (!(fontFace instanceof FontFace)) {
throw new TypeError('Only support FontFace');
}
fonts._fonts.push(fontFace);
fonts.size = fonts._fonts.length;
var dfd = fontFace._dfd;
new _fontfaceobserver2.default(fontFace.name).load('BESbswy', fonts.loadTimeout).then(dfd.resolve, function (font) {
dfd.resolve(font);
});
var cssText = style.html();
cssText += '\n';
cssText += fontFace.toCSS();
style.html(cssText);
return fonts;
},
load: function load() {
var promises = fonts._fonts.map(function (font) {
return font.load();
});
return _bluebird2.default.all(promises);
}
};
};
exports.default = FontFace;
module.exports = exports['default'];