$(document).ready(function() { // read manifest $.get('manifest.json', function(manifest) { window.config = {}; var properties = manifest.properties; properties.forEach(function(p) { if (p.type === "list") { window.config[p.name] = p.value.split(/[,\n]/); } else { window.config[p.name] = p.value; } }); function loadDoc() { // load HTML and append to body canvas var document_html = manifest.html[0], document_css = manifest.stylesheet[0] $.get(document_html, function(html) { $('#canvas').append(html); function run() { // load CSS var css = $(''); $('body').append(css); // load Javascript for (var i = 0; i < manifest.javascript.length; i++) { var js = manifest.javascript[i]; var script = $(''); $('body').append(script); } } function loadData(i) { if (i < manifest.data.length) { var document_data = manifest.data[i] if (document_data.indexOf('.json') !== -1) { $.get(document_data, function(data) { window.data[document_data] = data; loadData(i+1); }) } else if (document_data.indexOf('.csv') !== -1) { d3.csv(document_data, function(data) { window.data[document_data] = data; loadData(i+1); }); } else if (document_data.indexOf('.tsv') !== -1) { d3.tsv(document_data, function(data) { window.data[document_data] = data; loadData(i+1); }); } } else { if (Object.keys(window.data).length === 1) { window.data = window.data[Object.keys(window.data)[0]]; } run(); } } window.data = {}; loadData(0); }); } if (manifest.externalLibraries && manifest.externalLibraries.length > 0) { function loadExtLib(index) { if (index < manifest.externalLibraries.length) { var lib = manifest.externalLibraries[index]; if (lib.indexOf('.js') !== -1) { $.getScript(lib, function() { index++; loadExtLib(index); }); } else if (lib.indexOf('.css') !== -1) { var css = $(''); $('body').append(css); index++; loadExtLib(index); } } else { loadDoc(); } } loadExtLib(0); } else { loadDoc(); } }); });