ui/lib/shared/addon/utils/load-script.js

90 lines
2.1 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 ) {// eslint-disable-line
return resolve(null, `Already loaded: ${ url }`);
}
return new EmberPromise(((resolve, reject) => {
let timer = setTimeout(() => {
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) {
script.remove();
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 ) { // eslint-disable-line
return resolve(null, `Already loaded: ${ url }`);
}
return new EmberPromise(((resolve, reject) => {
let timer = setTimeout(() => {
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) {
link.remove();
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 }`;
}
}