hexo-theme-sb
Version:
Clean and simple theme for Hexo blog framework
284 lines (269 loc) • 10.7 kB
JavaScript
;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* A better font loading using FontFaceObserver.
*
* @module CriticalFOFT
* @author Zach Leatherman
* @see https://www.zachleat.com/web/comprehensive-webfonts/#critical-foft
*/
/**
* @constructor
* @author Zach Leatherman
* @see https://www.zachleat.com/web/comprehensive-webfonts/#critical-foft
*/
var FontFaceObserver = void 0;
/* Font Face Observer v2.0.13 - © Bram Stein. License: BSD-3-Clause */(function () {
'use strict';
var f,
g = [];function l(a) {
g.push(a);1 == g.length && f();
}function m() {
for (; g.length;) {
g[0](), g.shift();
}
}f = function f() {
setTimeout(m);
};function n(a) {
this.a = p;this.b = void 0;this.f = [];var b = this;try {
a(function (a) {
q(b, a);
}, function (a) {
r(b, a);
});
} catch (c) {
r(b, c);
}
}var p = 2;function t(a) {
return new n(function (b, c) {
c(a);
});
}function u(a) {
return new n(function (b) {
b(a);
});
}function q(a, b) {
if (a.a == p) {
if (b == a) throw new TypeError();var c = !1;try {
var d = b && b.then;if (null != b && "object" == (typeof b === "undefined" ? "undefined" : _typeof(b)) && "function" == typeof d) {
d.call(b, function (b) {
c || q(a, b);c = !0;
}, function (b) {
c || r(a, b);c = !0;
});return;
}
} catch (e) {
c || r(a, e);return;
}a.a = 0;a.b = b;v(a);
}
}
function r(a, b) {
if (a.a == p) {
if (b == a) throw new TypeError();a.a = 1;a.b = b;v(a);
}
}function v(a) {
l(function () {
if (a.a != p) for (; a.f.length;) {
var b = a.f.shift(),
c = b[0],
d = b[1],
e = b[2],
b = b[3];try {
0 == a.a ? "function" == typeof c ? e(c.call(void 0, a.b)) : e(a.b) : 1 == a.a && ("function" == typeof d ? e(d.call(void 0, a.b)) : b(a.b));
} catch (h) {
b(h);
}
}
});
}n.prototype.g = function (a) {
return this.c(void 0, a);
};n.prototype.c = function (a, b) {
var c = this;return new n(function (d, e) {
c.f.push([a, b, d, e]);v(c);
});
};
function w(a) {
return new n(function (b, c) {
function d(c) {
return function (d) {
h[c] = d;e += 1;e == a.length && b(h);
};
}var e = 0,
h = [];0 == a.length && b(h);for (var k = 0; k < a.length; k += 1) {
u(a[k]).c(d(k), c);
}
});
}function x(a) {
return new n(function (b, c) {
for (var d = 0; d < a.length; d += 1) {
u(a[d]).c(b, c);
}
});
};window.Promise || (window.Promise = n, window.Promise.resolve = u, window.Promise.reject = t, window.Promise.race = x, window.Promise.all = w, window.Promise.prototype.then = n.prototype.c, window.Promise.prototype["catch"] = n.prototype.g);
})();
(function () {
function l(a, b) {
document.addEventListener ? a.addEventListener("scroll", b, !1) : a.attachEvent("scroll", b);
}function m(a) {
document.body ? a() : document.addEventListener ? document.addEventListener("DOMContentLoaded", function c() {
document.removeEventListener("DOMContentLoaded", c);a();
}) : document.attachEvent("onreadystatechange", function k() {
if ("interactive" == document.readyState || "complete" == document.readyState) document.detachEvent("onreadystatechange", k), a();
});
};function r(a) {
this.a = document.createElement("div");this.a.setAttribute("aria-hidden", "true");this.a.appendChild(document.createTextNode(a));this.b = document.createElement("span");this.c = document.createElement("span");this.h = document.createElement("span");this.f = document.createElement("span");this.g = -1;this.b.style.cssText = "max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.c.style.cssText = "max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";
this.f.style.cssText = "max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.h.style.cssText = "display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;";this.b.appendChild(this.h);this.c.appendChild(this.f);this.a.appendChild(this.b);this.a.appendChild(this.c);
}
function t(a, b) {
a.a.style.cssText = "max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:" + b + ";";
}function y(a) {
var b = a.a.offsetWidth,
c = b + 100;a.f.style.width = c + "px";a.c.scrollLeft = c;a.b.scrollLeft = a.b.scrollWidth + 100;return a.g !== b ? (a.g = b, !0) : !1;
}function z(a, b) {
function c() {
var a = k;y(a) && a.a.parentNode && b(a.g);
}var k = a;l(a.b, c);l(a.c, c);y(a);
};function A(a, b) {
var c = b || {};this.family = a;this.style = c.style || "normal";this.weight = c.weight || "normal";this.stretch = c.stretch || "normal";
}var B = null,
C = null,
E = null,
F = null;function G() {
if (null === C) if (J() && /Apple/.test(window.navigator.vendor)) {
var a = /AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);C = !!a && 603 > parseInt(a[1], 10);
} else C = !1;return C;
}function J() {
null === F && (F = !!document.fonts);return F;
}
function K() {
if (null === E) {
var a = document.createElement("div");try {
a.style.font = "condensed 100px sans-serif";
} catch (b) {}E = "" !== a.style.font;
}return E;
}function L(a, b) {
return [a.style, a.weight, K() ? a.stretch : "", "100px", b].join(" ");
}
A.prototype.load = function (a, b) {
var c = this,
k = a || "BESbswy",
q = 0,
D = b || 3E3,
H = new Date().getTime();return new Promise(function (a, b) {
if (J() && !G()) {
var M = new Promise(function (a, b) {
function e() {
new Date().getTime() - H >= D ? b() : document.fonts.load(L(c, '"' + c.family + '"'), k).then(function (c) {
1 <= c.length ? a() : setTimeout(e, 25);
}, function () {
b();
});
}e();
}),
N = new Promise(function (a, c) {
q = setTimeout(c, D);
});Promise.race([N, M]).then(function () {
clearTimeout(q);a(c);
}, function () {
b(c);
});
} else m(function () {
function u() {
var b;if (b = -1 != f && -1 != g || -1 != f && -1 != h || -1 != g && -1 != h) (b = f != g && f != h && g != h) || (null === B && (b = /AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent), B = !!b && (536 > parseInt(b[1], 10) || 536 === parseInt(b[1], 10) && 11 >= parseInt(b[2], 10))), b = B && (f == v && g == v && h == v || f == w && g == w && h == w || f == x && g == x && h == x)), b = !b;b && (d.parentNode && d.parentNode.removeChild(d), clearTimeout(q), a(c));
}function I() {
if (new Date().getTime() - H >= D) d.parentNode && d.parentNode.removeChild(d), b(c);else {
var a = document.hidden;if (!0 === a || void 0 === a) f = e.a.offsetWidth, g = n.a.offsetWidth, h = p.a.offsetWidth, u();q = setTimeout(I, 50);
}
}var e = new r(k),
n = new r(k),
p = new r(k),
f = -1,
g = -1,
h = -1,
v = -1,
w = -1,
x = -1,
d = document.createElement("div");d.dir = "ltr";t(e, L(c, "sans-serif"));t(n, L(c, "serif"));t(p, L(c, "monospace"));d.appendChild(e.a);d.appendChild(n.a);d.appendChild(p.a);document.body.appendChild(d);v = e.a.offsetWidth;w = n.a.offsetWidth;x = p.a.offsetWidth;I();z(e, function (a) {
f = a;u();
});t(e, L(c, '"' + c.family + '",sans-serif'));z(n, function (a) {
g = a;u();
});t(n, L(c, '"' + c.family + '",serif'));
z(p, function (a) {
h = a;u();
});t(p, L(c, '"' + c.family + '",monospace'));
});
});
};"object" === (typeof module === "undefined" ? "undefined" : _typeof(module)) ? module.exports = A : (window.FontFaceObserver = A, window.FontFaceObserver.prototype.load = A.prototype.load);
})();
/**
* @function
* @name Anonymous self-invoked function
* @description Adds classes to document when each font loads successfully.
* If fonts are already loaded, then skip loading.
*/
(function () {
if (window.sessionStorage.criticalFoftDataUriFontsLoaded1) {
document.documentElement.className += ' fonts-stage-1 fonts-stage-2';
return;
}
/**
* A subset of default font type.
*
* @const
* @name fontASubset
* @type {Object}
*/
var fontASubset = new FontFaceObserver('Vollkorn Subset', {
weight: 'normal',
style: 'normal'
});
var fontBSubset = new FontFaceObserver('Playfair Display Bold Subset', {
weight: 700,
style: 'normal'
});
/**
* A promise that adds 'fonts-stage-1' if {@link fontASubset}
* is loaded successfully.
*
* @method
* @name Promise
*/
Promise.all([fontASubset.load(), fontBSubset.load()]).then(function () {
document.documentElement.className += ' fonts-stage-1';
/**
* Default font type.
*
* @const
* @name fontA
* @type {Object}
*/
var fontA = new FontFaceObserver('Vollkorn', {
weight: 'normal',
style: 'normal'
});
var fontB = new FontFaceObserver('Playfair Display Bold', {
weight: 700,
style: 'normal'
});
console.log("Subset fonts loaded.");
/**
* A promise that adds 'fonts-stage-2' if
* {@link fontA}
* are loaded successfully.
* Also, set Critical FOFT session variable to true.
*
* @method
* @name Promise
*/
Promise.all([fontA.load(), fontB.load()]).then(function () {
document.documentElement.className += ' fonts-stage-2';
// Optimization for Repeat Views
window.sessionStorage.criticalFoftDataUriFontsLoaded1 = true;
console.log("Main fonts loaded.");
}, function () {
console.log("Main fonts not loaded.");
});
}, function () {
console.log("Subset fonts not loaded.");
});
})();