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

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;
}
}