Browse Source

abp.resource-loader.js update

pull/272/head
Halil İbrahim Kalkan 9 years ago
parent
commit
8d387b3c0c
  1. 68
      npm/packs/jquery/src/abp.resource-loader.js

68
npm/packs/jquery/src/abp.resource-loader.js

@ -1,8 +1,6 @@
/** /**
* abp.ResourceLoader can be used to load scripts when needed. * abp.ResourceLoader can be used to load a script/style file from a URL on demand.
* It ensures that every script is only loaded once. * It ensures that a script/style is only loaded once.
*
* TODO: Add a loadStyle method
*/ */
var abp = abp || {}; var abp = abp || {};
(function ($) { (function ($) {
@ -15,7 +13,8 @@ var abp = abp || {};
}; };
/* UrlInfo class */ /* UrlInfo class */
function UrlInfo() { function UrlInfo(url) {
this.url = url;
this.state = UrlStates.LOADING; this.state = UrlStates.LOADING;
this.loadCallbacks = []; this.loadCallbacks = [];
this.failCallbacks = []; this.failCallbacks = [];
@ -60,29 +59,66 @@ var abp = abp || {};
var _urlInfos = {}; 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) { if (urlInfo) {
urlInfo.handleCallbacks(loadCallback, failCallback); urlInfo.handleCallbacks(loadCallback, failCallback);
return; return;
} }
_urlInfos[url] = urlInfo = new UrlInfo(); _urlInfos[cacheKey] = urlInfo = new UrlInfo(url);
urlInfo.addCallbacks(loadCallback, failCallback); urlInfo.addCallbacks(loadCallback, failCallback);
$.getScript(url) serverLoader(urlInfo);
.done(function (script, textStatus) { };
urlInfo.succeed();
}) var _loadScript = function (url, loadCallback, failCallback) {
.fail(function (jqxhr, settings, exception) { _loadFromUrl(url, loadCallback, failCallback, function(urlInfo) {
urlInfo.failed(); $.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 { return {
loadScript: _loadScript loadScript: _loadScript,
loadStyle: _loadStyle
} }
})(); })();

Loading…
Cancel
Save