Deferred experiments
by whelkaholism
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.js"></script>
<ul id="res"></ul>
JavaScript
if(typeof(Depends) == 'undefined')
{
Depends = {
modules: {},
defaultModule: '__DEFAULT__'
};
// =================================================================================================================================================================
Depends.LoadManager = function()
{
var _this = this;
var getScriptChain = function(module, chain, index, getoptions)
{
if(typeof(index) == 'undefined')
index = 0;
if(index == 0)
Depends.modules[module] = { loading: true, loaded: false };
$.getScript(chain[index],
function()
{
getoptions.scriptLoaded && getoptions.scriptLoaded(module, chain[index], index);
if(index == chain.length - 1)
{
window.console && console.log('Depends.load', 'Module ' + module + ' loaded');
Depends.modules[module] = { loading: false, loaded: true };
getoptions.moduleLoaded && getoptions.moduleLoaded(module);
}
else
getScriptChain(module, chain, index + 1, getoptions);
}
);
};
this.load = function(loadoptions)
{
if(!Depends.modules[loadoptions.module] && loadoptions._byName)
window.console && console.log('Depends.load', 'Module ' + loadoptions.module + ' not registered');
else if(!loadoptions || !loadoptions.module || !loadoptions.chain)
window.console && console.log('Depends.load', 'Minimum config is module and chain');
if(loadoptions.chain && loadoptions.chain.length > 0)
{
var modstatus = Depends.modules[loadoptions.module];
var getoptions = $.extend({}, loadoptions.getoptions, {
moduleLoaded:
function()
{
loadoptions.loaded && loadoptions.loaded.apply(_this, arguments);
}
});
if(!modstatus || (!modstatus.loading && !modstatus.loaded))
getScriptChain(loadoptions.module, loadoptions.chain, 0, getoptions);
else if(modstatus)
window.console && console.log('Depends.load', 'Module ' +...