63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
/**
|
|
* Loads challenge-floor.section.html into #challenge-floor-module, then boots render scripts.
|
|
*/
|
|
(function () {
|
|
var MODULE_URL = '/pages/modules/challenge-floor.section.html';
|
|
var PROGRAM_DATA_URL = '/assets/js/challenge-floor-program-data.js';
|
|
var RENDER_URL = '/assets/js/challenge-floor-render.js';
|
|
|
|
function loadScript(src) {
|
|
return new Promise(function (resolve, reject) {
|
|
if (document.querySelector('script[src="' + src + '"]')) {
|
|
resolve();
|
|
return;
|
|
}
|
|
var script = document.createElement('script');
|
|
script.src = src;
|
|
script.onload = resolve;
|
|
script.onerror = function () {
|
|
reject(new Error('Failed to load ' + src));
|
|
};
|
|
document.body.appendChild(script);
|
|
});
|
|
}
|
|
|
|
function bootChallengeFloor() {
|
|
window.CHALLENGE_FLOOR_BOOT = window.CHALLENGE_FLOOR_BOOT || {};
|
|
if (!window.CHALLENGE_FLOOR_BOOT.assetBase) {
|
|
window.CHALLENGE_FLOOR_BOOT.assetBase = '../assets/images/challenge/';
|
|
}
|
|
|
|
return loadScript(PROGRAM_DATA_URL).then(function () {
|
|
return loadScript(RENDER_URL);
|
|
});
|
|
}
|
|
|
|
function loadChallengeFloorModule() {
|
|
var container = document.getElementById('challenge-floor-module');
|
|
if (!container) return;
|
|
|
|
fetch(MODULE_URL, { credentials: 'same-origin' })
|
|
.then(function (res) {
|
|
if (!res.ok) throw new Error('Failed to load ' + MODULE_URL);
|
|
return res.text();
|
|
})
|
|
.then(function (html) {
|
|
container.innerHTML = html;
|
|
return bootChallengeFloor();
|
|
})
|
|
.then(function () {
|
|
document.dispatchEvent(new CustomEvent('aifo:challenge-floor-ready'));
|
|
})
|
|
.catch(function (err) {
|
|
console.error('[challenge-floor-module.js]', err);
|
|
});
|
|
}
|
|
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', loadChallengeFloorModule);
|
|
} else {
|
|
loadChallengeFloorModule();
|
|
}
|
|
})();
|