lichartee/main.js
2024-01-28 06:57:00 +01:00

100 lines
1.9 KiB
JavaScript

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