<template lang="pug">
main
+ input#modalInfo.modal(type="checkbox")
+ div(role="dialog" aria-labelledby="infoMessage")
+ .card.smallpad.small-modal.text-center
+ label.modal-close(for="modalInfo")
+ h3#infoMessage.section
+ p(v-html="infoMessage")
input#modalNewgame.modal(type="checkbox")
div(role="dialog" aria-labelledby="titleFenedit")
.card.smallpad
games: [],
challenges: [],
people: [], //(all) online players
+ infoMessage: "",
newchallenge: {
fen: "",
vid: 0,
else
localStorage.removeItem("challenge");
}
- if (this.st.user.id > 0)
- {
- // Ask server for current corr games (all but mines)
- ajax(
- "/games",
- "GET",
- {uid: this.st.user.id, excluded: true},
- response => {
- this.games = this.games.concat(response.games.map(g => {
- const type = this.classifyObject(g);
- const vname = this.getVname(g.vid);
- return Object.assign({}, g, {type: type, vname: vname});
- }));
- }
- );
- // Also ask for corr challenges (open + sent to me)
- ajax(
- "/challenges",
- "GET",
- {uid: this.st.user.id},
- response => {
- // Gather all senders names, and then retrieve full identity:
- // (TODO [perf]: some might be online...)
- const uids = response.challenges.map(c => { return c.uid });
- ajax("/users",
- "GET",
- { ids: uids.join(",") },
- response2 => {
- let names = {};
- response2.users.forEach(u => {names[u.id] = u.name});
- this.challenges = this.challenges.concat(
- response.challenges.map(c => {
- // (just players names in fact)
- const from = {name: names[c.uid], id: c.uid};
- const type = this.classifyObject(c);
- const vname = this.getVname(c.vid);
- return Object.assign({}, c, {type: type, vname: vname, from: from});
- })
- )
- }
- );
- }
- );
- }
+ // Ask server for current corr games (all but mines)
+ ajax(
+ "/games",
+ "GET",
+ {uid: this.st.user.id, excluded: true},
+ response => {
+ this.games = this.games.concat(response.games.map(g => {
+ const type = this.classifyObject(g);
+ const vname = this.getVname(g.vid);
+ return Object.assign({}, g, {type: type, vname: vname});
+ }));
+ }
+ );
+ // Also ask for corr challenges (open + sent to me)
+ ajax(
+ "/challenges",
+ "GET",
+ {uid: this.st.user.id},
+ response => {
+ // Gather all senders names, and then retrieve full identity:
+ // (TODO [perf]: some might be online...)
+ const uids = response.challenges.map(c => { return c.uid });
+ ajax("/users",
+ "GET",
+ { ids: uids.join(",") },
+ response2 => {
+ let names = {};
+ response2.users.forEach(u => {names[u.id] = u.name});
+ this.challenges = this.challenges.concat(
+ response.challenges.map(c => {
+ // (just players names in fact)
+ const from = {name: names[c.uid], id: c.uid};
+ const type = this.classifyObject(c);
+ const vname = this.getVname(c.vid);
+ return Object.assign({}, c, {type: type, vname: vname, from: from});
+ })
+ )
+ }
+ );
+ }
+ );
// 0.1] Ask server for room composition:
const funcPollClients = () => {
this.st.conn.send(JSON.stringify({code:"pollclients"}));
this.startNewGame(data.gameInfo);
else
{
- // TODO: notify with game link but do not redirect
+ this.infoMessage = "New game started: " +
+ "<a href='/game/" + data.gameInfo.gameId + "'>" +
+ "/game/" + data.gameInfo.gameId + "</a>";
+ let modalBox = document.getElementById("modalInfo");
+ modalBox.checked = true;
+ setTimeout(() => { modalBox.checked = false; }, 3000);
}
break;
}
}
},
clickChallenge: function(c) {
- // In all cases, the challenge is consumed:
- ArrayFun.remove(this.challenges, ch => ch.id == c.id);
- // NOTE: deletechallenge event might be redundant (but it's easier this way)
- this.sendSomethingTo((!!c.to ? c.from : null), "deletechallenge", {cid:c.id});
const myChallenge = (c.from.sid == this.st.user.sid //live
|| (this.st.user.id > 0 && c.from.id == this.st.user.id)); //corr
if (!myChallenge)
{
+ if (c.type == "corr" && this.st.user.id <= 0)
+ return alert("Please log in to accept corr challenges");
c.accepted = true;
if (!!c.to) //c.to == this.st.user.name (connected)
{
);
}
}
+ // In (almost) all cases, the challenge is consumed:
+ ArrayFun.remove(this.challenges, ch => ch.id == c.id);
+ // NOTE: deletechallenge event might be redundant (but it's easier this way)
+ this.sendSomethingTo((!!c.to ? c.from : null), "deletechallenge", {cid:c.id});
},
// NOTE: when launching game, the challenge is already deleted
launchGame: async function(c) {