|
|
@@ -0,0 +1,78 @@
|
|
|
+///<reference path="../../headers/common.d.ts" />
|
|
|
+
|
|
|
+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);
|
|
|
+}
|
|
|
+
|