From 39683946a7a91557a0eecfa82e68cfb6420761c4 Mon Sep 17 00:00:00 2001 From: Ayo Date: Fri, 3 Apr 2026 11:23:55 +0200 Subject: [PATCH] feat: expose hooks for events `levelChanged` & `gameDone` --- app/main.js | 9 ++++++--- lib/mnswpr.js | 17 +++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/main.js b/app/main.js index 51d96a5..8f1d804 100644 --- a/app/main.js +++ b/app/main.js @@ -1,9 +1,12 @@ -import MineSweeper from '../lib/mnswpr.js' +import mnswpr from '../lib/mnswpr.js' import * as pkg from '../package.json' const version = import.meta.env.MODE === 'development' ? 'dev' : pkg.version -const mnswpr = new MineSweeper('app', version) -mnswpr.initialize() \ No newline at end of file +const game = new mnswpr('app', version, { + levelChanged: () => console.log('[hook]: level reset'), + gameDone: (game) => console.log('[hook] game done', game) +}) +game.initialize() \ No newline at end of file diff --git a/lib/mnswpr.js b/lib/mnswpr.js index d44da76..d1a1746 100644 --- a/lib/mnswpr.js +++ b/lib/mnswpr.js @@ -20,8 +20,12 @@ const PC_BUSY_DELAY = 500 * Create Minesweeper game board * @param {String} appId * @param {String} version + * @param {{ + * levelChanged: () => {}, + * gameDone: (game: any) => {} + * }} hooks */ -const Minesweeper = function(appId, version) { +const Minesweeper = function(appId, version, hooks) { const _this = this const storageService = new StorageService() const timerService = new TimerService() @@ -86,7 +90,7 @@ const Minesweeper = function(appId, version) { appElement.append(headingElement, gameBoard) appElement.append(initializeSourceLink()) } - generateGrid() + generateGrid(true) } function initializeSourceLink() { @@ -171,11 +175,11 @@ const Minesweeper = function(appId, version) { function updateSetting(key) { setting = levels[key] storageService.saveToLocal('setting', setting) - generateGrid() + generateGrid(true) } - function generateGrid() { + function generateGrid(initial = false) { firstClick = true grid.innerHTML = '' grid.oncontextmenu = () => false @@ -212,7 +216,8 @@ const Minesweeper = function(appId, version) { * TODO: add hook afterGridGenerated * - for initializing the leaderboard */ - console.log('[hook]: after grid generated') + if (initial) + hooks.levelChanged() timerService.initialize(timerDisplay) @@ -479,7 +484,7 @@ const Minesweeper = function(appId, version) { * TODO: add hook after gameSession send back `game` * - for sending the game score to the db */ - console.log('[hook]: after game session', game) + hooks.gameDone(game) }