/* * GLOBAL VARIABLE! * list of loaded scripts (only itself at start) **/ var __scripts = [ 'main.js' ]; var __lang = undefined; async function load_lang() { let language = navigator.language.slice(0,2).toLowerCase(); if (!(['en', 'fr'].includes(language))) { language === 'en'; } __lang = await fetch('./lang/'+language+'.json') .then((response) => response.json()) .then((json) => { return json }); console.info(_('success_load')); } /* i18n small function */ function _(content, replacements = {}) { if (typeof __lang !== 'undefined') { if (content in __lang) { content = __lang[content]; } } if (Object.keys(replacements).length) { let tokens = content.split(/({[^}\\]*})/g); Object.keys(replacements).forEach((name) => { if (tokens.includes('{'+name+'}')) { Object.keys(tokens).forEach((key) => { if ('{'+name+'}' === tokens[key]) { tokens[key] = replacements[name]; } }); } }); content = tokens.join(''); } return content; } /* include other scripts to the html file */ async function include(src, script_list) { /* DOM operations */ let script = document.createElement('script'); script.setAttribute('src' , src ); document.getElementsByTagName('head')[0].appendChild(script); /* check if the element is added to the DOM */ let script_loaded = new Promise( (resolve, reject) => { if (script !== undefined) { script.addEventListener('load', () => { resolve(0); }); } else { reject(_('err_include', {src: src})) } } ); script_list.push(src); // the script is considered as loaded return script_loaded.then( () => { console.info(_( 'script_load', { script: src, } , )); return script_list }, (error) => { throw error; } ); } async function launch() { await load_lang(); __scripts = await include('./lichartee.js', __scripts); __scripts = await include('./test.js', __scripts); } launch()