function plugin_start(div, entry, editable) { if(typeof plugin_init !== 'undefined') plugin_init(div, entry, editable); if(typeof plugin_render !== 'undefined') plugin_render(div, entry); } function plugin_load(config, div, entry, editable) { $("#load-pre-status").text("Loading..."); var status_span = $('#load-status'); var len_deps = config.dependencies && config.dependencies.length || 0; var len_globals = config.globals && Object.keys(config.globals).length || 0; var progress = 0; var num_progress = len_deps + len_globals; status_span.after(" / " + num_progress); status_span.text("0"); var check = function() { status_span.text(progress + 1 + ""); if (++progress >= num_progress) { // has to be >= for num_progress = 0 status_span.parent().empty(); $.ajax({dataType: "script", cache: true, url: config.javascript, success: function() { plugin_start(div, entry, editable); }}); } } config.dependencies.forEach(function(script) { $.ajax({ dataType: "script", cache: true, url: script, success: check }); }); Object.keys(config.globals).forEach(function(global_name) { $.get(config.globals[global_name], function(data) { window[global_name] = data; check(); }); }); config.css.forEach(function(css_url) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = css_url; link.media = 'all'; $('head').append(link); }); // always adding a style element for to use for convenience $('head').append($('')); if(num_progress == 0) check(); }