Created
December 1, 2016 13:29
-
-
Save hikalkan/90567b8e6c0f7b4608d2fff7a0f2ebec to your computer and use it in GitHub Desktop.
Load scripts dynamically.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var app = app || {}; | |
(function ($) { | |
/* UrlStates enum */ | |
var UrlStates = { | |
LOADING: 'LOADING', | |
LOADED: 'LOADED', | |
FAILED: 'FAILED' | |
}; | |
/* UrlInfo class */ | |
function UrlInfo() { | |
this.state = UrlStates.LOADING; | |
this.loadCallbacks = []; | |
this.failCallbacks = []; | |
} | |
UrlInfo.prototype.succeed = function () { | |
this.state = UrlStates.LOADED; | |
for (var i = 0; i < this.loadCallbacks.length; i++) { | |
this.loadCallbacks[i](); | |
} | |
}; | |
UrlInfo.prototype.failed = function () { | |
this.state = UrlStates.FAILED; | |
for (var i = 0; i < this.failCallbacks.length; i++) { | |
this.failCallbacks[i](); | |
} | |
}; | |
UrlInfo.prototype.handleCallbacks = function (loadCallback, failCallback) { | |
switch (this.state) { | |
case UrlStates.LOADED: | |
loadCallback && loadCallback(); | |
break; | |
case UrlStates.FAILED: | |
failCallback && failCallback(); | |
break; | |
case UrlStates.LOADING: | |
this.addCallbacks(loadCallback, failCallback); | |
break; | |
} | |
}; | |
UrlInfo.prototype.addCallbacks = function (loadCallback, failCallback) { | |
loadCallback && this.loadCallbacks.push(loadCallback); | |
failCallback && this.failCallbacks.push(failCallback); | |
}; | |
/* ResourceLoader API */ | |
app.ResourceLoader = (function () { | |
var _urlInfos = {}; | |
var _loadScript = function (url, loadCallback, failCallback) { | |
var urlInfo = _urlInfos[url]; | |
if (urlInfo) { | |
urlInfo.handleCallbacks(loadCallback, failCallback); | |
return; | |
} | |
_urlInfos[url] = urlInfo = new UrlInfo(); | |
urlInfo.addCallbacks(loadCallback, failCallback); | |
$.getScript(url) | |
.done(function (script, textStatus) { | |
urlInfo.succeed(); | |
}) | |
.fail(function (jqxhr, settings, exception) { | |
urlInfo.failed(); | |
}); | |
}; | |
return { | |
loadScript: _loadScript | |
} | |
})(); | |
})(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage:
We can optionally pass loadCallback and failCallback parameters.