remove twig for index page

This commit is contained in:
Zutatensuppe 2021-05-01 08:51:52 +02:00
parent 9e3a6721c9
commit 93708f0cf0
3 changed files with 35 additions and 42 deletions

View file

@ -8,16 +8,7 @@
<div id="app"></div> <div id="app"></div>
<script type="module"> <script type="module">
import Index from "/views/Index.vue.js" import Index from "/views/Index.vue.js"
new Vue({ new Vue({ el: '#app', render: (h) => h(Index) })
el: '#app',
render: (h) => h(Index, {
props: {
gamesRunning: {{ gamesRunning|json_encode|raw }},
gamesFinished: {{ gamesFinished|json_encode|raw }},
images: {{ images|json_encode|raw }},
},
}),
})
</script> </script>
</body> </body>
</html> </html>

View file

@ -10,11 +10,6 @@ export default {
GameTeaser, GameTeaser,
ImageTeaser, ImageTeaser,
}, },
props: {
gamesRunning: Array,
gamesFinished: Array,
images: Array,
},
template: ` template: `
<div id="app"> <div id="app">
<h1>Running games</h1> <h1>Running games</h1>
@ -72,8 +67,19 @@ export default {
tiles: 1000, tiles: 1000,
image: '', image: '',
scoreMode: GameCommon.SCORE_MODE_ANY, scoreMode: GameCommon.SCORE_MODE_ANY,
gamesRunning: [],
gamesFinished: [],
images: [],
} }
}, },
async created() {
const res = await fetch('/api/index-data')
const json = await res.json()
this.gamesRunning = json.gamesRunning
this.gamesFinished = json.gamesFinished
this.images = json.images
},
methods: { methods: {
time(start, end) { time(start, end) {
const icon = end ? '🏁' : '⏳' const icon = end ? '🏁' : '⏳'

View file

@ -37,8 +37,6 @@ const storage = multer.diskStorage({
}) })
const upload = multer({storage}).single('file'); const upload = multer({storage}).single('file');
const statics = express.static(PUBLIC_DIR)
const render = async (template, data) => { const render = async (template, data) => {
const loader = new twing.TwingLoaderFilesystem(TEMPLATE_DIR) const loader = new twing.TwingLoaderFilesystem(TEMPLATE_DIR)
const env = new twing.TwingEnvironment(loader) const env = new twing.TwingEnvironment(loader)
@ -59,6 +57,28 @@ app.use('/replay/:gid', async (req, res, next) => {
})) }))
}) })
app.get('/api/index-data', (req, res) => {
const ts = Time.timestamp()
const games = [
...Game.getAllGames().map(game => ({
id: game.id,
hasReplay: GameLog.exists(game.id),
started: Game.getStartTs(game.id),
finished: Game.getFinishTs(game.id),
tilesFinished: Game.getFinishedTileCount(game.id),
tilesTotal: Game.getTileCount(game.id),
players: Game.getActivePlayers(game.id, ts).length,
imageUrl: Game.getImageUrl(game.id),
})),
]
res.send({
gamesRunning: games.filter(g => !g.finished),
gamesFinished: games.filter(g => !!g.finished),
images: Images.allImages(),
})
})
app.post('/upload', (req, res) => { app.post('/upload', (req, res) => {
upload(req, res, async (err) => { upload(req, res, async (err) => {
if (err) { if (err) {
@ -100,31 +120,7 @@ app.post('/newgame', bodyParser.json(), async (req, res) => {
app.use('/common/', express.static(COMMON_DIR)) app.use('/common/', express.static(COMMON_DIR))
app.use('/uploads/', express.static(UPLOAD_DIR)) app.use('/uploads/', express.static(UPLOAD_DIR))
app.use('/', async (req, res, next) => { app.use('/', express.static(PUBLIC_DIR))
if (req.path === '/') {
const ts = Time.timestamp()
const games = [
...Game.getAllGames().map(game => ({
id: game.id,
hasReplay: GameLog.exists(game.id),
started: Game.getStartTs(game.id),
finished: Game.getFinishTs(game.id),
tilesFinished: Game.getFinishedTileCount(game.id),
tilesTotal: Game.getTileCount(game.id),
players: Game.getActivePlayers(game.id, ts).length,
imageUrl: Game.getImageUrl(game.id),
})),
]
res.send(await render('index.html.twig', {
gamesRunning: games.filter(g => !g.finished),
gamesFinished: games.filter(g => !!g.finished),
images: Images.allImages(),
}))
} else {
statics(req, res, next)
}
})
const wss = new WebSocketServer(config.ws); const wss = new WebSocketServer(config.ws);