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() {