ukelli-ui
Version:
Base on React's UI lib. Make frontend's dev simpler and faster.
72 lines (71 loc) • 2.23 kB
JavaScript
/* eslint-disable no-param-reassign */
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
import { Call } from 'basic-helper';
/**
* 加载外部资源
*/
export function LoadStuff(params) {
var src = params.src, onload = params.onload, type = params.type;
return new Promise(function (resolve, reject) {
var reloadTimes = 0;
var loadUrl = src;
function load(element) {
if (reloadTimes > 2)
return;
reloadTimes++;
element.onload = function () {
var arg = [];
for (var _i = 0; _i < arguments.length; _i++) {
arg[_i] = arguments[_i];
}
Call.apply(void 0, __spreadArrays([onload], arg));
resolve.apply(void 0, arg);
};
/** 如果加载失败,尝试继续加载 */
element.onerror = function () { return load(element); };
document.body.appendChild(element);
}
switch (type) {
case 'css':
var link = document.createElement('link');
link.rel = 'stylesheet';
link.href = loadUrl;
load(link);
break;
case 'script':
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = loadUrl;
load(script);
break;
}
});
}
/**
* 加载 link
*
* @param {object} options { src: string, onload: func }
*/
export function LoadLink(options) {
var _options = Object.assign({}, options, {
type: 'css'
});
return LoadStuff(_options);
}
/**
* 加载 script
*
* @param {object} options { src: string, onload: func }
*/
export function LoadScript(options) {
var _options = Object.assign({}, options, {
type: 'script'
});
return LoadStuff(_options);
}