From 65eac13082658ee13cc9ce7769fe24c93877e936 Mon Sep 17 00:00:00 2001 From: Misode Date: Wed, 3 Jun 2020 21:39:15 +0200 Subject: [PATCH] Use html plugin + handle URLs --- .github/workflows/deploy.yml | 2 +- .gitignore | 2 +- package.json | 1 + src/app/app.ts | 30 +++++++++++++------ public/index.html => src/generator.html | 14 +++------ src/home.html | 13 +++++++++ {public => src}/styles/global.css | 0 {public => src}/styles/nodes.css | 0 webpack.config.js | 38 ++++++++++++++++++++++--- 9 files changed, 75 insertions(+), 25 deletions(-) rename public/index.html => src/generator.html (85%) create mode 100644 src/home.html rename {public => src}/styles/global.css (100%) rename {public => src}/styles/nodes.css (100%) 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 @@ - Minecraft Generators - - + <%= htmlWebpackPlugin.options.title %> + +
- +
@@ -42,6 +37,5 @@
- diff --git a/src/home.html b/src/home.html new file mode 100644 index 00000000..a208fcd7 --- /dev/null +++ b/src/home.html @@ -0,0 +1,13 @@ + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+
+ + diff --git a/public/styles/global.css b/src/styles/global.css similarity index 100% rename from public/styles/global.css rename to src/styles/global.css diff --git a/public/styles/nodes.css b/src/styles/nodes.css similarity index 100% rename from public/styles/nodes.css rename to src/styles/nodes.css diff --git a/webpack.config.js b/webpack.config.js index 59e8786b..57f16dfa 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,11 +1,12 @@ const CopyWebpackPlugin = require('copy-webpack-plugin') +const HtmlWebpackPlugin = require('html-webpack-plugin') module.exports = (env, argv) => ({ entry: './src/app/app.ts', output: { - path: __dirname + '/public', + path: __dirname + '/dist', publicPath: argv.mode === 'production' ? '/dev/' : '/', - filename: 'build/bundle.js' + filename: 'js/bundle.js' }, resolve: { extensions: ['.ts', '.js'] @@ -20,13 +21,42 @@ module.exports = (env, argv) => ({ patterns: [ { from: 'src/locales', - to: 'build/locales' + to: 'locales/app' }, { from: 'node_modules/minecraft-schemas/src/locales', - to: 'build/locales-schema' + to: 'locales/schema' + }, + { + from: 'src/styles', + to: 'styles' } ] + }), + new HtmlWebpackPlugin({ + title: 'Minecraft Generators', + filename: 'index.html', + template: 'src/home.html' + }), + new HtmlWebpackPlugin({ + title: 'Loot Table Generator Minecraft', + filename: 'loot-table/index.html', + template: 'src/generator.html' + }), + new HtmlWebpackPlugin({ + title: 'Predicate Generator Minecraft', + filename: 'predicate/index.html', + template: 'src/generator.html' + }), + new HtmlWebpackPlugin({ + title: 'Advancement Generator Minecraft', + filename: 'advancement/index.html', + template: 'src/generator.html' + }), + new HtmlWebpackPlugin({ + title: 'Sandbox Generator Minecraft', + filename: 'sandbox/index.html', + template: 'src/generator.html' }) ] })