mirror of https://github.com/rancher/ui.git
83 lines
2.0 KiB
JavaScript
83 lines
2.0 KiB
JavaScript
import { Promise as EmberPromise, resolve } from 'rsvp';
|
|
import { parseUrl } from './util';
|
|
|
|
let nextId = 1;
|
|
|
|
export function loadScript(url, id, timeout=30000) {
|
|
if ( !id ) {
|
|
id="loadScript-" + nextId;
|
|
nextId++;
|
|
}
|
|
|
|
if ( $(`#${id}`).length > 0 ) {
|
|
return resolve(null, 'Already loaded: ' + url);
|
|
}
|
|
|
|
return new EmberPromise(function(resolve,reject) {
|
|
let timer = setTimeout(function() {
|
|
reject({type: 'error', message: 'Timeout loading ' + url});
|
|
}, timeout);
|
|
|
|
let script = document.createElement('script');
|
|
script.onload = function(arg) {
|
|
clearTimeout(timer);
|
|
resolve(arg);
|
|
};
|
|
script.onerror = function(arg) {
|
|
clearTimeout(timer);
|
|
reject(arg);
|
|
}
|
|
script.src = url;
|
|
script.id = id;
|
|
document.getElementsByTagName('BODY')[0].appendChild(script);
|
|
|
|
});
|
|
}
|
|
|
|
export function loadStylesheet(url, id, timeout=30000) {
|
|
if ( !id ) {
|
|
id="loadStylesheet-" + nextId;
|
|
nextId++;
|
|
}
|
|
|
|
if ( $(`#${id}`).length > 0 ) {
|
|
return resolve(null, 'Already loaded: ' + url);
|
|
}
|
|
|
|
return new EmberPromise(function(resolve,reject) {
|
|
let timer = setTimeout(function() {
|
|
reject({type: 'error', message: 'Timeout loading ' + url});
|
|
}, timeout);
|
|
|
|
let link = document.createElement('link');
|
|
link.onload = function(arg) {
|
|
clearTimeout(timer);
|
|
resolve(arg);
|
|
};
|
|
link.onerror = function(arg) {
|
|
clearTimeout(timer);
|
|
reject(arg);
|
|
}
|
|
link.rel = 'stylesheet';
|
|
link.src = url;
|
|
link.href = url;
|
|
link.id = id;
|
|
document.getElementsByTagName('HEAD')[0].appendChild(link);
|
|
|
|
});
|
|
}
|
|
|
|
export function proxifyUrl(url, proxyBase) {
|
|
let parsed = parseUrl(url);
|
|
|
|
if ( parsed.hostname.indexOf('.') === -1 || // No dot, local name like localhost
|
|
parsed.hostname.toLowerCase().match(/\.local$/) || // your-macbook.local
|
|
parsed.origin.toLowerCase() === window.location.origin // You are here
|
|
) {
|
|
return url;
|
|
} else {
|
|
return proxyBase + '/' + url;
|
|
}
|
|
}
|
|
|