From daa559738bab0c2c90317ccb4464136f01d661f8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20N=C3=A9grier?= Date: Tue, 12 May 2020 00:07:50 +0200 Subject: [PATCH] Adding history support Arriving on a new map now changes the URL. All URLs starting with _ are automatically redirected to index.html by the web server --- front/dist/.htaccess | 23 +++++++++++++++++++++++ front/dist/index.html | 1 + front/src/Phaser/Game/GameScene.ts | 9 +++++++++ front/webpack.config.js | 7 +++++++ 4 files changed, 40 insertions(+) create mode 100644 front/dist/.htaccess diff --git a/front/dist/.htaccess b/front/dist/.htaccess new file mode 100644 index 0000000..eb3c6a4 --- /dev/null +++ b/front/dist/.htaccess @@ -0,0 +1,23 @@ +DirectoryIndex index.html + +# By default, Apache does not evaluate symbolic links if you did not enable this +# feature in your server configuration. Uncomment the following line if you +# install assets as symlinks or if you experience problems related to symlinks +# when compiling LESS/Sass/CoffeScript assets. +# Options FollowSymlinks + +# Disabling MultiViews prevents unwanted negotiation, e.g. "/index" should not resolve +# to the front controller "/index.php" but be rewritten to "/index.php/index". + + Options -MultiViews + + +RewriteEngine On + +RewriteBase / + +# If the requested filename exists, simply serve it. +# We only want to let Apache serve files and not directories. +# Rewrite all other queries starting with _ to index.ts. +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule "^_/" "/index.ts" [L] diff --git a/front/dist/index.html b/front/dist/index.html index 85aced1..51d5270 100644 --- a/front/dist/index.html +++ b/front/dist/index.html @@ -5,6 +5,7 @@ + Document diff --git a/front/src/Phaser/Game/GameScene.ts b/front/src/Phaser/Game/GameScene.ts index bc6b746..d00ad60 100644 --- a/front/src/Phaser/Game/GameScene.ts +++ b/front/src/Phaser/Game/GameScene.ts @@ -151,6 +151,15 @@ export class GameScene extends Phaser.Scene implements GameSceneInterface, Creat context.strokeStyle = '#ffffff'; context.stroke(); this.circleTexture.refresh(); + + // Let's alter browser history + let url = new URL(this.MapUrlFile); + let path = '/_/'+url.host+url.pathname; + if (url.hash) { + // FIXME: entry should be dictated by a property passed to init() + path += '#'+url.hash; + } + window.history.pushState({}, null, path); } private getExitSceneUrl(layer: ITiledMapLayer): string|undefined { diff --git a/front/webpack.config.js b/front/webpack.config.js index ff16480..d1bccd6 100644 --- a/front/webpack.config.js +++ b/front/webpack.config.js @@ -8,6 +8,12 @@ module.exports = { contentBase: './dist', host: '0.0.0.0', disableHostCheck: true, + historyApiFallback: { + rewrites: [ + { from: /^_\/.*$/, to: '/index.html' } + ], + disableDotRule: true + }, }, module: { rules: [ @@ -24,6 +30,7 @@ module.exports = { output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), + publicPath: '/' }, plugins: [ new webpack.ProvidePlugin({ -- 2.25.1