};
},
render(h) {
- const [sizeX,sizeY] = VariantRules.size;
- const smallScreen = (screen.width <= 420);
+ const [sizeX,sizeY] = [V.size.x,V.size.y];
+ const smallScreen = (window.innerWidth <= 420);
// Precompute hints squares to facilitate rendering
let hintSquares = doubleArray(sizeX, sizeY, false);
this.possibleMoves.forEach(m => { hintSquares[m.end.x][m.end.y] = true; });
}),
h('div',
{
- attrs: { "role": "dialog", "aria-labelledby": "modal-eog" },
+ attrs: { "role": "dialog", "aria-labelledby": "eogMessage" },
},
[
h('div',
),
h('h3',
{
+ attrs: { "id": "eogMessage" },
"class": { "section": true },
domProps: { innerHTML: eogMessage },
}
}),
h('div',
{
- attrs: { "role": "dialog", "aria-labelledby": "modal-newgame" },
+ attrs: { "role": "dialog", "aria-labelledby": "newGameTxt" },
},
[
h('div',
),
h('h3',
{
+ attrs: { "id": "newGameTxt" },
"class": { "section": true },
domProps: { innerHTML: "New game" },
}
}),
h('div',
{
- attrs: { "role": "dialog", "aria-labelledby": "modal-fenedit" },
+ attrs: { "role": "dialog", "aria-labelledby": "titleFenedit" },
},
[
h('div',
),
h('h3',
{
+ attrs: { "id": "titleFenedit" },
"class": { "section": true },
domProps: { innerHTML: "Position + flags (FEN):" },
}
}),
h('div',
{
- attrs: { "role": "dialog", "aria-labelledby": "modal-settings" },
+ attrs: { "role": "dialog", "aria-labelledby": "settingsTitle" },
},
[
h('div',
),
h('h3',
{
+ attrs: { "id": "settingsTitle" },
"class": { "section": true },
domProps: { innerHTML: "Preferences" },
}
created: function() {
const url = socketUrl;
const continuation = (localStorage.getItem("variant") === variant);
- this.myid = continuation ? localStorage.getItem("myid") : getRandString();
+ this.myid = (continuation ? localStorage.getItem("myid") : getRandString());
if (!continuation)
{
// HACK: play a small silent sound to allow "new game" sound later
const data = JSON.parse(msg.data);
switch (data.code)
{
+ case "duplicate":
+ // We opened another tab on the same game
+ this.mode = "idle";
+ this.vr = null;
+ alert("Already playing a game in this variant on another tab!");
+ break;
case "newgame": //opponent found
// oppid: opponent socket ID
this.newGame("human", data.fen, data.color, data.oppid);
{
const storageVariant = localStorage.getItem("variant");
if (!!storageVariant && storageVariant !== variant)
- {
- alert("Finish your " + storageVariant + " game first!");
- return;
- }
+ return alert("Finish your " + storageVariant + " game first!");
// Send game request and wait..
localStorage["newgame"] = variant;
this.seek = true;
document.getElementById("modal-newgame").checked = false;
}
this.oppid = oppId;
- this.oppConnected = true;
+ this.oppConnected = !continuation;
this.mycolor = color;
this.seek = false;
if (!!moves && moves.length > 0) //imply continuation
const compMove = this.vr.getComputerMove();
// (first move) HACK: avoid selecting elements before they appear on page:
const delay = Math.max(500-(Date.now()-timeStart), 0);
- setTimeout(() => this.play(compMove, "animate"), delay);
+ setTimeout(() => {
+ if (this.mode == "computer") //Warning: mode could have changed!
+ this.play(compMove, "animate")
+ }, delay);
},
// Get the identifier of a HTML table cell from its numeric coordinates o.x,o.y.
getSquareId: function(o) {