)
.card.text-center
label.modal-close(for="modalInfo")
- p
- span {{ st.tr["Rematch in progress:"] }}
- a(
- :href="'#/game/' + rematchId"
- onClick="document.getElementById('modalInfo').checked=false"
- )
- | {{ "#/game/" + rematchId }}
+ a(
+ :href="'#/game/' + rematchId"
+ onClick="document.getElementById('modalInfo').checked=false"
+ )
+ | {{ st.tr["Rematch in progress"] }}
input#modalChat.modal(
type="checkbox"
- @click="resetChatColor()"
+ @click="toggleChat()"
)
div#chatWrap(
role="dialog"
ref="chatcomp"
:players="game.players"
:pastChats="game.chats"
- :newChat="newChat"
@mychat="processChat"
@chatcleared="clearChat"
)
lastate: undefined, //used if opponent send lastate before game is ready
repeat: {}, //detect position repetition
curDiag: "", //for corr moves confirmation
- newChat: "",
conn: null,
roomInitialized: false,
// If newmove has wrong index: ask fullgame again:
this.lastateAsked = false;
this.rematchOffer = "";
this.lastate = undefined;
- this.newChat = "";
this.roomInitialized = false;
this.askGameTime = 0;
this.gameIsLoading = false;
)
||
(
- player.id &&
+ !!player.id &&
Object.values(this.people).some(p =>
p.id == player.id && p.focus)
)
if (!!oppsid && !!this.people[oppsid]) return oppsid;
return null;
},
- resetChatColor: function() {
- // TODO: this is called twice, once on opening an once on closing
+ toggleChat: function() {
+ if (document.getElementById("modalChat").checked)
+ // Entering chat
+ document.getElementById("inputChat").focus();
+ // TODO: next line is only required when exiting chat,
+ // but the event for now isn't well detected.
document.getElementById("chatBtn").classList.remove("somethingnew");
},
processChat: function(chat) {
break;
}
case "newchat":
- this.newChat = data.data;
+ this.$refs["chatcomp"].newChat(data.data);
if (!document.getElementById("modalChat").checked)
document.getElementById("chatBtn").classList.add("somethingnew");
break;
cadence: this.game.cadence
};
const notifyNewGame = () => {
- let oppsid = this.getOppsid(); //may be null
+ const oppsid = this.getOppsid(); //may be null
this.send("rnewgame", { data: gameInfo, oppsid: oppsid });
+ // To main Hall if corr game:
+ if (this.game.type == "corr")
+ this.send("newgame", { data: gameInfo });
// Also to MyGames page:
this.notifyMyGames("newgame", gameInfo);
};
const mycolor = [undefined, "w", "b"][myIdx + 1]; //undefined for observers
if (!game.chats) game.chats = []; //live games don't have chat history
if (gtype == "corr") {
- if (game.players[0].color == "b") {
- // Adopt the same convention for live and corr games: [0] = white
- [game.players[0], game.players[1]] = [
- game.players[1],
- game.players[0]
- ];
- }
// NOTE: clocks in seconds, initime in milliseconds
game.moves.sort((m1, m2) => m1.idx - m2.idx); //in case of
game.clocks = [tc.mainTime, tc.mainTime];
const L = game.moves.length;
if (game.score == "*") {
// Set clocks + initime
- game.initime = [0, 0];
+ game.initime = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER];
if (L >= 1) game.initime[L % 2] = game.moves[L-1].played;
// NOTE: game.clocks shouldn't be computed right now:
// job will be done in re_setClocks() called soon below.
game.moves = game.moves.map(m => m.squares);
}
if (gtype == "live" && game.clocks[0] < 0) {
- // Game is unstarted
+ // Game is unstarted. clocks and initime are ignored until move 2
game.clocks = [tc.mainTime, tc.mainTime];
- if (game.score == "*") {
- game.initime[0] = Date.now();
- if (myIdx >= 0) {
- // I play in this live game; corr games don't have clocks+initime
- GameStorage.update(game.id, {
- clocks: game.clocks,
- initime: game.initime
- });
- }
+ game.initime = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER];
+ if (myIdx >= 0) {
+ // I play in this live game
+ GameStorage.update(game.id, {
+ clocks: game.clocks,
+ initime: game.initime
+ });
}
}
// TODO: merge next 2 "if" conditions
oppsid: myIdx < 0 ? undefined : game.players[1 - myIdx].sid,
oppid: myIdx < 0 ? undefined : game.players[1 - myIdx].id
},
- game,
+ game
);
this.$refs["basegame"].re_setVariables(this.game);
if (!this.gameIsLoading) {
g.moves.forEach(m => {
m.squares = JSON.parse(m.squares);
});
- g.players = [{ id: g.white }, { id: g.black }];
- delete g["white"];
- delete g["black"];
afterRetrieval(g);
}
}
if (this.game.type == "live") {
if (!!data.clock) this.game.clocks[colorIdx] = data.clock;
else this.game.clocks[colorIdx] += addTime;
- }
- // In corr games, just reset clock to mainTime:
- else {
+ } else {
+ // In corr games, just reset clock to mainTime:
this.game.clocks[colorIdx] = extractTime(this.game.cadence).mainTime;
}
// NOTE: opponent's initime is reset after "gotmove" is received
fen: this.game.fen,
move: {
squares: filtered_move,
- played: Date.now(),
idx: origMovescount
},
// Code "n" for "None" to force reset (otherwise it's ignored)