56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
/*! onloadCSS. (onload callback for loadCSS) [c]2017 Filament Group, Inc. MIT License */
|
||
/* global navigator */
|
||
/* exported onloadCSS */
|
||
function onloadCSS(ss, options ) {
|
||
options = options || {};
|
||
let f = function (si) {
|
||
return new Promise((resolve, reject) => {
|
||
let called, success = false;
|
||
function newcbs() {
|
||
if (!called) {
|
||
called = true;
|
||
resolve(true);
|
||
}
|
||
} function newcbe() {
|
||
if (!called && callback) {
|
||
called = true;
|
||
resolve(false);
|
||
}
|
||
}
|
||
if (ss.addEventListener) {
|
||
si.addEventListener('load', newcb);
|
||
} else if (ss.attachEvent) {
|
||
si.attachEvent('onload', newcb);
|
||
}
|
||
|
||
// This code is for browsers that don’t support onload
|
||
// No support for onload (it'll bind but never fire):
|
||
// * Android 4.3 (Samsung Galaxy S4, Browserstack)
|
||
// * Android 4.2 Browser (Samsung Galaxy SIII Mini GT-I8200L)
|
||
// * Android 2.3 (Pantech Burst P9070)
|
||
|
||
// Weak inference targets Android < 4.4
|
||
if ('isApplicationInstalled' in navigator && 'onloadcssdefined' in ss) {
|
||
si.onloadcssdefined(newcb);
|
||
}
|
||
});
|
||
};
|
||
let fin = async function (success) {
|
||
if (success === true && typeof options.success === 'function') {
|
||
options.success();
|
||
} else if (success === true && typeof options.success === 'object' && options.success instanceof Promise) {
|
||
await options.success();
|
||
}
|
||
options.complete()
|
||
}
|
||
if (Array.isArray(ss)) {
|
||
let total = ss.length;
|
||
Promise.all(ss.map(f)).then(function (resolveValues) {
|
||
var ok = resolveValues.reduce((sum, x) => sum + (x === true ? 1 : 0));
|
||
fin(total === ok);
|
||
});
|
||
} else {
|
||
f(ss);
|
||
}
|
||
}
|