diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4ef6d2d4..fcba0ddf 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -22,4 +22,4 @@ jobs: with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BRANCH: master - FOLDER: public + FOLDER: dist diff --git a/.gitignore b/.gitignore index 56844664..b447d116 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules -/public/build +/dist package-lock.json diff --git a/package.json b/package.json index 14cc373a..9497f994 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "dependencies": { "@types/split.js": "^1.4.0", "copy-webpack-plugin": "^6.0.1", + "html-webpack-plugin": "^4.3.0", "minecraft-schemas": "^0.1.3", "split.js": "^1.5.11", "ts-loader": "^7.0.4", diff --git a/src/app/app.ts b/src/app/app.ts index 648df52f..a6a42571 100644 --- a/src/app/app.ts +++ b/src/app/app.ts @@ -21,7 +21,9 @@ const models: { 'sandbox': new DataModel(SandboxSchema) } -let model = models["loot-table"] +const modelSelector = (document.getElementById('model-selector') as HTMLInputElement) +const defaultModel = location.pathname.replace(/^\//, '') +let model = models[defaultModel] const treeViewEl = document.getElementById('tree-view')! const sourceviewEl = document.getElementById('source-view')! @@ -37,15 +39,29 @@ const views: { 'source': new SourceView(model, sourceviewEl.getElementsByTagName('textarea')[0], {indentation: 2}) } -const modelSelector = (document.getElementById('model-selector') as HTMLInputElement) -modelSelector.addEventListener('change', evt => { - model = models[modelSelector.value] +const updateModel = (newModel: string) => { + model = models[newModel] for (const v in views) { views[v].setModel(model) } + modelSelector.innerHTML = Object.keys(models) + .map(m => ``) + .join('') model.invalidate() +} +updateModel(defaultModel) + +modelSelector.addEventListener('change', evt => { + const newModel = modelSelector.value + updateModel(newModel) + history.pushState({model: newModel}, newModel, `../${newModel}`) }) +window.onpopstate = (evt: PopStateEvent) => { + const newModel = location.pathname.replace(/^\//, '') + updateModel(newModel) +} + const sourceControlsToggle = document.getElementById('source-controls-toggle')! const sourceControlsMenu = document.getElementById('source-controls-menu')! sourceControlsToggle.addEventListener('click', evt => { @@ -82,11 +98,7 @@ sourceControlsDownload.addEventListener('click', evt => { downloadAnchor.click() }) -setTimeout(() => { - window.scroll(0, 0) -}, 1000) - -fetch('build/locales-schema/en.json') +fetch('locales/schema/en.json') .then(r => r.json()) .then(l => { LOCALES.register('en', l) diff --git a/public/index.html b/src/generator.html similarity index 85% rename from public/index.html rename to src/generator.html index 512d0eb3..a1f0fd8c 100644 --- a/public/index.html +++ b/src/generator.html @@ -3,19 +3,14 @@
-