/** * 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(); } })();