|
|
|
@ -1,8 +1,6 @@
|
|
|
|
|
/**
|
|
|
|
|
* abp.ResourceLoader can be used to load scripts when needed.
|
|
|
|
|
* It ensures that every script is only loaded once.
|
|
|
|
|
*
|
|
|
|
|
* TODO: Add a loadStyle method
|
|
|
|
|
* abp.ResourceLoader can be used to load a script/style file from a URL on demand.
|
|
|
|
|
* It ensures that a script/style is only loaded once.
|
|
|
|
|
*/
|
|
|
|
|
var abp = abp || {};
|
|
|
|
|
(function ($) {
|
|
|
|
@ -15,7 +13,8 @@ var abp = abp || {};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* UrlInfo class */
|
|
|
|
|
function UrlInfo() {
|
|
|
|
|
function UrlInfo(url) {
|
|
|
|
|
this.url = url;
|
|
|
|
|
this.state = UrlStates.LOADING;
|
|
|
|
|
this.loadCallbacks = [];
|
|
|
|
|
this.failCallbacks = [];
|
|
|
|
@ -60,29 +59,66 @@ var abp = abp || {};
|
|
|
|
|
|
|
|
|
|
var _urlInfos = {};
|
|
|
|
|
|
|
|
|
|
var _loadScript = function (url, loadCallback, failCallback) {
|
|
|
|
|
function getCacheKey(url) {
|
|
|
|
|
return url;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function appendTimeToUrl(url) {
|
|
|
|
|
|
|
|
|
|
if (url.indexOf('?') < 0) {
|
|
|
|
|
url += '?';
|
|
|
|
|
} else {
|
|
|
|
|
url += '&';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
url += '_=' + new Date().getTime();
|
|
|
|
|
|
|
|
|
|
return url;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var urlInfo = _urlInfos[url];
|
|
|
|
|
var _loadFromUrl = function (url, loadCallback, failCallback, serverLoader) {
|
|
|
|
|
|
|
|
|
|
var cacheKey = getCacheKey(url);
|
|
|
|
|
|
|
|
|
|
var urlInfo = _urlInfos[cacheKey];
|
|
|
|
|
|
|
|
|
|
if (urlInfo) {
|
|
|
|
|
urlInfo.handleCallbacks(loadCallback, failCallback);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_urlInfos[url] = urlInfo = new UrlInfo();
|
|
|
|
|
_urlInfos[cacheKey] = urlInfo = new UrlInfo(url);
|
|
|
|
|
urlInfo.addCallbacks(loadCallback, failCallback);
|
|
|
|
|
|
|
|
|
|
$.getScript(url)
|
|
|
|
|
.done(function (script, textStatus) {
|
|
|
|
|
urlInfo.succeed();
|
|
|
|
|
})
|
|
|
|
|
.fail(function (jqxhr, settings, exception) {
|
|
|
|
|
urlInfo.failed();
|
|
|
|
|
});
|
|
|
|
|
serverLoader(urlInfo);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var _loadScript = function (url, loadCallback, failCallback) {
|
|
|
|
|
_loadFromUrl(url, loadCallback, failCallback, function(urlInfo) {
|
|
|
|
|
$.getScript(url)
|
|
|
|
|
.done(function () {
|
|
|
|
|
urlInfo.succeed();
|
|
|
|
|
})
|
|
|
|
|
.fail(function () {
|
|
|
|
|
urlInfo.failed();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var _loadStyle = function (url) {
|
|
|
|
|
_loadFromUrl(url, undefined, undefined, function (urlInfo) {
|
|
|
|
|
|
|
|
|
|
$('<link/>', {
|
|
|
|
|
rel: 'stylesheet',
|
|
|
|
|
type: 'text/css',
|
|
|
|
|
href: appendTimeToUrl(url)
|
|
|
|
|
}).appendTo('head');
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
loadScript: _loadScript
|
|
|
|
|
loadScript: _loadScript,
|
|
|
|
|
loadStyle: _loadStyle
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|