12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- "use strict";
- if (typeof window !== 'undefined') {
- var bust = '?_cache=' + Date.now();
- 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 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);
- };
- var link = document.createElement('link');
- link.type = 'text/css';
- link.rel = 'stylesheet';
- link.href = url + bust;
- if (!isWebkit) {
- link.onload = function () {
- _callback();
- }
- } else {
- webkitLoadCheck(link, _callback);
- }
- link.onerror = function (event) {
- _callback(event.error || new Error('Error loading CSS file.'));
- };
- head.appendChild(link);
- });
- };
- exports.fetch = function (load) {
- // 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);
- };
- }
|