diff --git a/src/app/app.ts b/src/app/app.ts index 58522bd1..39b7bd64 100644 --- a/src/app/app.ts +++ b/src/app/app.ts @@ -23,14 +23,26 @@ const addChecked = (el: HTMLElement) => { }, 2000) } +const languages: { [key: string]: string } = { + 'en': 'English', + 'pt': 'Português', + 'ru': 'Русский', + 'zh-CN': '简体中文' +} + Promise.all([ fetch('../locales/schema/en.json').then(r => r.json()), fetch('../locales/app/en.json').then(r => r.json()) ]).then(responses => { LOCALES.register('en', {...responses[0], ...responses[1]}) - LOCALES.language = 'en' + const selectedModel = document.getElementById('selected-model')! const modelSelector = (document.getElementById('model-selector') as HTMLInputElement) + const modelSelectorMenu = document.getElementById('model-selector-menu')! + const languageSelector = document.getElementById('language-selector')! + const languageSelectorMenu = document.getElementById('language-selector-menu')! + const themeSelector = document.getElementById('theme-selector')! + const githubLink = document.getElementById('github-link')! const treeViewEl = document.getElementById('tree-view')! const sourceViewEl = document.getElementById('source-view')! const sourceViewOutput = (document.getElementById('source-view-output') as HTMLTextAreaElement) @@ -58,28 +70,77 @@ Promise.all([ for (const v in views) { views[v].setModel(models[selected]) } - modelSelector.innerHTML = Object.keys(models) - .map(m => ``) - .join('') + selectedModel.textContent = locale(`generator.${selected}`) models[selected].invalidate() } - updateModel(selected) + + const updateLanguage = (key: string) => { + LOCALES.language = key + + document.querySelectorAll('[data-i18n]').forEach(el => { + el.textContent = locale(el.attributes.getNamedItem('data-i18n')!.value) + }) + updateModel(selected) + } + updateLanguage('en') Split([treeViewEl, sourceViewEl], { sizes: [66, 34] }) + + modelSelectorMenu.innerHTML = '' + Object.keys(models).forEach(m => { + modelSelectorMenu.insertAdjacentHTML('beforeend', + `
${locale(`generator.${m}`)}
`) + modelSelectorMenu.lastChild?.addEventListener('click', evt => { + updateModel(m) + history.pushState({model: m}, m, `../${m}`) + modelSelectorMenu.style.visibility = 'hidden' + }) + }) - modelSelector.addEventListener('change', evt => { - const newModel = modelSelector.value - updateModel(newModel) - history.pushState({model: newModel}, newModel, `../${newModel}`) + modelSelector.addEventListener('click', evt => { + modelSelectorMenu.style.visibility = 'visible' + document.body.addEventListener('click', evt => { + modelSelectorMenu.style.visibility = 'hidden' + }, { capture: true, once: true }) }) window.onpopstate = (evt: PopStateEvent) => { updateModel(modelFromPath(location.pathname)) } + languageSelectorMenu.innerHTML = '' + Object.keys(languages).forEach(key => { + languageSelectorMenu.insertAdjacentHTML('beforeend', + `
${languages[key]}
`) + languageSelectorMenu.lastChild?.addEventListener('click', evt => { + updateLanguage(key) + languageSelectorMenu.style.visibility = 'hidden' + }) + }) + + languageSelector.addEventListener('click', evt => { + languageSelectorMenu.style.visibility = 'visible' + document.body.addEventListener('click', evt => { + languageSelectorMenu.style.visibility = 'hidden' + }, { capture: true, once: true }) + }) + + themeSelector.addEventListener('click', evt => { + Array.from(themeSelector.children).forEach(el => { + if (el.classList.contains('inactive')) { + el.classList.remove('inactive') + } else { + el.classList.add('inactive') + } + }) + }) + + githubLink.addEventListener('click', evt => { + location.href = 'https://github.com/misode/misode.github.io' + }) + sourceControlsToggle.addEventListener('click', evt => { sourceControlsMenu.style.visibility = 'visible' document.body.addEventListener('click', evt => { @@ -102,9 +163,5 @@ Promise.all([ downloadAnchor.click() }) - document.querySelectorAll('[data-i18n]').forEach(el => { - el.textContent = locale(el.attributes.getNamedItem('data-i18n')!.value) - }) - document.body.style.visibility = 'initial' }) diff --git a/src/generator.html b/src/generator.html index 86d712b1..74135733 100644 --- a/src/generator.html +++ b/src/generator.html @@ -10,7 +10,26 @@
- +
+

Loot Table Generator

+ +
+
@@ -22,7 +41,7 @@
-
+