export const loadScript = function (script_name) { return new Promise(function (resolve, reject) { let script = document.createElement('script'); script.src = `${STUDIP.ASSETS_URL}${script_name}`; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); }; let mathjax_promise = null; /** This function dynamically loads JS features organized in chunks. * * @param {string} chunk The name of the chunk to load. * @param {{ silent: boolean }} options Options for loading the chunk. * Pass `{ silent: true }` to supress * error messages. * @return {Promise} */ export const loadChunk = function (chunk, { silent = false } = {}) { let promise = null; switch (chunk) { case 'code-highlight': promise = import( /* webpackChunkName: "code-highlight" */ './chunks/code-highlight' ).then(({ default: hljs }) => { return hljs; }); break; case 'courseware': promise = Promise.all([ STUDIP.loadChunk('vue'), import( /* webpackChunkName: "courseware" */ './chunks/courseware' ), ]).then(([Vue]) => Vue); break; case 'chartist': promise = import( /* webpackChunkName: "chartist" */ './chunks/chartist' ).then(({ default: Chartist }) => Chartist); break; case 'fullcalendar': promise = import( /* webpackChunkName: "fullcalendar" */ './chunks/fullcalendar' ); break; case 'tablesorter': promise = import( /* webpackChunkName: "tablesorter" */ './chunks/tablesorter' ); break; case 'mathjax': if (mathjax_promise === null) { mathjax_promise = STUDIP.loadScript('javascripts/mathjax/MathJax.js?config=TeX-AMS_HTML,default') .then(() => { (function (origPrint) { window.print = function () { window.MathJax.Hub.Queue(['Delay', window.MathJax.Callback, 700], origPrint); }; })(window.print); return window.MathJax; }) .catch(() => { throw new Error('Could not load mathjax'); }); } promise = mathjax_promise; break; case 'vue': promise = import( /* webpackChunkName: "vue.js" */ './chunks/vue' ); break; case 'wysiwyg': promise = import( /* webpackChunkName: "wysiwyg.js" */ './chunks/wysiwyg' ); break; default: promise = Promise.reject(new Error(`Unknown chunk: ${chunk}`)); } return promise.catch((error) => { if (!silent) { console.error(`Could not load chunk ${chunk}`, error); } throw error; }); };