From e9f6480d90d550bfe3bcfc466fea56e20f0a652b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Sun, 10 Jan 2021 17:29:01 +0200 Subject: [PATCH] Split move doing from event handling --- takhta.html | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/takhta.html b/takhta.html index 406735e..a01fbf9 100644 --- a/takhta.html +++ b/takhta.html @@ -207,6 +207,13 @@ return; } + let ret = doMove(move); + if ('error' in ret) { + alert(ret.error); + } + } + + function doMove(move) { // Piece let piece = move.slice(0, 1); let index = 0; @@ -230,8 +237,7 @@ piece = 'P'; break; default: - alert('Not a valid piece: ' + piece); - return; + return {error: 'Not a valid piece: ' + piece}; } // Start square @@ -242,8 +248,7 @@ startLetter === '' || !'abcdefgh'.includes(startLetter) || startNumber === '' || !'12345678'.includes(startNumber) ) { - alert('Not a valid coordinate: ' + startLetter + startNumber); - return; + return {error: 'Not a valid coordinate: ' + startLetter + startNumber}; } // Capturing @@ -261,8 +266,7 @@ endLetter === '' || !'abcdefgh'.includes(endLetter) || endNumber === '' || !'12345678'.includes(endNumber) ) { - alert('Not a valid coordinate: ' + endLetter + endNumber); - return; + return {error: 'Not a valid coordinate: ' + endLetter + endNumber}; } // Promotion @@ -277,16 +281,13 @@ promotion = move.slice(index, index + 1); break; case 'K': - alert('Cannot promote a piece to king'); - return; + return {error: 'Cannot promote a piece to king'}; break; case 'P': - alert('Cannot promote a piece to pawn'); - return; + return {error: 'Cannot promote a piece to pawn'}; break; default: - alert('Unrecognized piece: ' + move.slice(index, index + 1)); - return; + return {error: 'Unrecognized piece: ' + move.slice(index, index + 1)}; } index++; } @@ -303,8 +304,7 @@ // TODO: Checkmate' break; default: - alert('Unexpected contents at the end of the move: ' + move.slice(index)); - return; + return {error: 'Unexpected contents at the end of the move: ' + move.slice(index)}; } // End of parsing, start of move construction @@ -321,20 +321,17 @@ // Are we moving the piece onto itself? if (startLetter === endLetter && startNumber === endNumber) { - alert('Start and end squares of the move cannot be identical'); - return; + return {error: 'Start and end squares of the move cannot be identical'}; } // Are we moving the piece from where it is located? let startSquare = document.getElementById(startLetter + startNumber); if (startSquare.childNodes.length === 0) { - alert('No piece on square ' + startLetter + startNumber); - return; + return {error: 'No piece on square ' + startLetter + startNumber}; } if (startSquare.childNodes[0].data !== renderedPiece) { let pieceNames = {'K': 'king', 'Q': 'vizier', 'R': 'rook', 'B': 'elephant', 'N': 'horse', 'P': 'pawn'}; - alert((whiteMove ? 'White' : 'Black') + ' ' + pieceNames[piece] + ' not on square ' + startLetter + startNumber); - return; + return {error: (whiteMove ? 'White' : 'Black') + ' ' + pieceNames[piece] + ' not on square ' + startLetter + startNumber}; } // TODO: Check piece is allowed to move like that @@ -342,12 +339,10 @@ // Can the piece move to this location? let endSquare = document.getElementById(endLetter + endNumber); if (endSquare.childNodes.length !== 0 && !captures) { - alert('Square ' + endLetter + endNumber + ' is occupied, did you mean to capture?'); - return; + return {error: 'Square ' + endLetter + endNumber + ' is occupied, did you mean to capture?'}; } if (endSquare.childNodes.length === 0 && captures) { - alert('Square ' + endLetter + endNumber + ' empty even though capture was specified'); - return; + return {error: 'Square ' + endLetter + endNumber + ' empty even though capture was specified'}; } // Record our alterations to the table @@ -377,6 +372,8 @@ // Empty input field document.getElementById('move').value = ''; + + return {} } function undoMove() {