56 lines
1.6 KiB
HTML
56 lines
1.6 KiB
HTML
<html>
|
|
<head>
|
|
<link rel="stylesheet" href="/style.css" />
|
|
<script src="https://unpkg.com/vue@3.0.11"></script>
|
|
<script src="https://unpkg.com/vue-router@4.0.8"></script>
|
|
<title>🧩 jigsaw.hyottoko.club</title>
|
|
</head>
|
|
<body>
|
|
<div id="app"></div>
|
|
<script type="module">
|
|
import App from "/App.vue.js"
|
|
import Index from "/views/Index.vue.js"
|
|
import NewGame from "/views/NewGame.vue.js"
|
|
import Game from "/views/Game.vue.js"
|
|
import Replay from "/views/Replay.vue.js"
|
|
import Util from './../common/Util.js'
|
|
|
|
(async () => {
|
|
const res = await fetch(`/api/conf`)
|
|
const conf = await res.json()
|
|
|
|
function initme() {
|
|
let ID = localStorage.getItem('ID')
|
|
if (!ID) {
|
|
ID = Util.uniqId()
|
|
localStorage.setItem('ID', ID)
|
|
}
|
|
return ID
|
|
}
|
|
|
|
const router = VueRouter.createRouter({
|
|
history: VueRouter.createWebHashHistory(),
|
|
routes: [
|
|
{ name: 'index', path: '/', component: Index },
|
|
{ name: 'new-game', path: '/new-game', component: NewGame },
|
|
{ name: 'game', path: '/g/:id', component: Game },
|
|
{ name: 'replay', path: '/replay/:id', component: Replay },
|
|
],
|
|
})
|
|
|
|
router.beforeEach((to, from) => {
|
|
if (from.name !== undefined) {
|
|
document.documentElement.classList.remove(`view-${from.name}`)
|
|
}
|
|
document.documentElement.classList.add(`view-${to.name}`)
|
|
})
|
|
|
|
const app = Vue.createApp(App)
|
|
app.config.globalProperties.$config = conf
|
|
app.config.globalProperties.$clientId = initme()
|
|
app.use(router)
|
|
app.mount('#app')
|
|
})()
|
|
</script>
|
|
</body>
|
|
</html>
|