/// var waitSeconds = 100; var head = document.getElementsByTagName('head')[0]; // get all link tags in the page var links = document.getElementsByTagName('link'); var linkHrefs = []; for (var i = 0; i < links.length; i++) { linkHrefs.push(links[i].href); } var isWebkit = !!window.navigator.userAgent.match(/AppleWebKit\/([^ ;]*)/); var webkitLoadCheck = function(link, callback) { setTimeout(function() { for (var i = 0; i < document.styleSheets.length; i++) { var sheet = document.styleSheets[i]; if (sheet.href === link.href) { return callback(); } } webkitLoadCheck(link, callback); }, 10); }; var noop = function() {}; var loadCSS = function(url) { return new Promise(function(resolve, reject) { var link = document.createElement('link'); var timeout = setTimeout(function() { reject('Unable to load CSS'); }, waitSeconds * 1000); var _callback = function(error) { clearTimeout(timeout); link.onload = link.onerror = noop; setTimeout(function() { if (error) { reject(error); } else { resolve(''); } }, 7); }; link.type = 'text/css'; link.rel = 'stylesheet'; link.href = url; if (!isWebkit) { link.onload = function() { _callback(undefined); }; } else { webkitLoadCheck(link, _callback); } link.onerror = function(evt: any) { _callback(evt.error || new Error('Error loading CSS file.')); }; head.appendChild(link); }); }; export function fetch(load): any { if (typeof window === 'undefined') { return ''; } // dont reload styles loaded in the head for (var i = 0; i < linkHrefs.length; i++) { if (load.address === linkHrefs[i]) { return ''; } } return loadCSS(load.address); }