@click="showNextGame()"
)
| {{ st.tr["Next_g"] }}
- button#chatBtn.tooltip(
+ button#chatBtn(
+ :class="btnTooltipClass()"
onClick="window.doClick('modalChat')"
aria-label="Chat"
)
img(src="/images/icons/chat.svg")
#actions(v-if="game.score=='*'")
- button.tooltip(
+ button(
@click="clickDraw()"
- :class="{['draw-' + drawOffer]: true}"
+ :class="btnTooltipClass('draw')"
:aria-label="st.tr['Draw']"
)
img(src="/images/icons/draw.svg")
- button.tooltip(
+ button(
v-if="!!game.mycolor"
+ :class="btnTooltipClass()"
@click="abortGame()"
:aria-label="st.tr['Abort']"
)
img(src="/images/icons/abort.svg")
- button.tooltip(
+ button(
v-if="!!game.mycolor"
+ :class="btnTooltipClass()"
@click="resign()"
:aria-label="st.tr['Resign']"
)
img(src="/images/icons/resign.svg")
- button.tooltip(
+ button(
v-else
+ :class="btnTooltipClass('rematch')"
@click="clickRematch()"
- :class="{['rematch-' + rematchOffer]: true}"
:aria-label="st.tr['Rematch']"
)
img(src="/images/icons/rematch.svg")
#playersInfo
- p(v-if="isLargeScreen()")
+ div(v-if="isLargeScreen()")
span.name(:class="{connected: isConnected(0)}")
| {{ game.players[0].name || "@nonymous" }}
span.time(
span.time-separator(v-if="!!virtualClocks[1][1]") :
span.time-right(v-if="!!virtualClocks[1][1]")
| {{ virtualClocks[1][1] }}
- p(v-else)
+ div(v-else)
span.name(:class="{connected: isConnected(0)}")
| {{ game.players[0].name || "@nonymous" }}
span.split-names -
span.name(:class="{connected: isConnected(1)}")
| {{ game.players[1].name || "@nonymous" }}
- br
- span.time(
- v-if="game.score=='*'"
- :class="{yourturn: !!vr && vr.turn == 'w'}"
- )
- span.time-left {{ virtualClocks[0][0] }}
- span.time-separator(v-if="!!virtualClocks[0][1]") :
- span.time-right(v-if="!!virtualClocks[0][1]")
- | {{ virtualClocks[0][1] }}
- span.separator
- span.time(
- v-if="game.score=='*'"
- :class="{yourturn: !!vr && vr.turn == 'b'}"
- )
- span.time-left {{ virtualClocks[1][0] }}
- span.time-separator(v-if="!!virtualClocks[1][1]") :
- span.time-right(v-if="!!virtualClocks[1][1]")
- | {{ virtualClocks[1][1] }}
+ div(v-if="game.score=='*'")
+ span.time(:class="{yourturn: !!vr && vr.turn == 'w'}")
+ span.time-left {{ virtualClocks[0][0] }}
+ span.time-separator(v-if="!!virtualClocks[0][1]") :
+ span.time-right(v-if="!!virtualClocks[0][1]")
+ | {{ virtualClocks[0][1] }}
+ span.separator
+ span.time(:class="{yourturn: !!vr && vr.turn == 'b'}")
+ span.time-left {{ virtualClocks[1][0] }}
+ span.time-separator(v-if="!!virtualClocks[1][1]") :
+ span.time-right(v-if="!!virtualClocks[1][1]")
+ | {{ virtualClocks[1][1] }}
BaseGame(
ref="basegame"
:game="game"
.addEventListener("click", processModalClick);
}
);
- if ("ontouchstart" in window) {
- // Disable tooltips on smartphones:
- document.querySelectorAll("#aboveBoard .tooltip").forEach(elt => {
- elt.classList.remove("tooltip");
- });
- }
},
beforeDestroy: function() {
this.cleanBeforeDestroy();
this.send("losefocus");
},
isLargeScreen: function() {
- return window.innerWidth >= 500;
+ return window.innerWidth >= 768;
+ },
+ btnTooltipClass: function(thing) {
+ let append = {};
+ if (!!thing) append = { [thing + "-" + this[thing + "Offer"]]: true };
+ return (
+ Object.assign(
+ { tooltip: !("ontouchstart" in window) },
+ append
+ )
+ );
},
gotoRules: function() {
this.$router.push("/variants/" + this.game.vname);
GameStorage.update(this.gameRef, { drawOffer: "" });
}
}
- this.$refs["basegame"].play(
- movePlus.move, "received", null, true);
+ this.$refs["basegame"].play(movePlus.move, "received");
this.game.clocks[moveColIdx] = movePlus.clock;
this.processMove(
movePlus.move,
this.$router.push("/game/" + gameInfo.id);
} else {
this.rematchId = gameInfo.id;
+ document.getElementById("modalRules").checked = false;
+ document.getElementById("modalScore").checked = false;
document.getElementById("modalRematch").checked = true;
}
break;
this.game.clocks[oppIdx] = data.clock;
if (data.movesCount > L) {
// Just got last move from him
- this.$refs["basegame"].play(data.lastMove, "received", null, true);
+ this.$refs["basegame"].play(data.lastMove, "received");
this.processMove(data.lastMove);
} else {
if (!!this.clockUpdate) clearInterval(this.clockUpdate);
await import("@/variants/" + game.vname + ".js")
.then((vModule) => {
window.V = vModule[game.vname + "Rules"];
- // (AJAX) Request to get rules content (plain text, HTML)
- this.rulesContent =
- require(
- "raw-loader!@/translations/rules/" +
- game.vname + "/" +
- this.st.lang + ".pug"
- )
- // Next two lines fix a weird issue after last update (2019-11)
- .replace(/\\n/g, " ")
- .replace(/\\"/g, '"')
- .replace('module.exports = "', "")
- .replace(/"$/, "")
- .replace(/(fen:)([^:]*):/g, replaceByDiag);
this.loadGame(game, callback);
});
+ // (AJAX) Request to get rules content (plain text, HTML)
+ this.rulesContent =
+ require(
+ "raw-loader!@/translations/rules/" +
+ game.vname + "/" +
+ this.st.lang + ".pug"
+ )
+ // Next two lines fix a weird issue after last update (2019-11)
+ .replace(/\\n/g, " ")
+ .replace(/\\"/g, '"')
+ .replace('module.exports = "', "")
+ .replace(/"$/, "")
+ .replace(/(fen:)([^:]*):/g, replaceByDiag);
},
// 3 cases for loading a game:
// - from indexedDB (running or completed live game I play)
this.game.score = score;
if (!scoreMsg) scoreMsg = getScoreMessage(score);
this.game.scoreMsg = scoreMsg;
+ document.getElementById("modalRules").checked = false;
// Display result in a un-missable way:
document.getElementById("modalScore").checked = true;
this.$set(this.game, "scoreMsg", scoreMsg);
<style lang="sass" scoped>
#scoreDiv > .card, #rematchDiv > .card
- padding: 15px 0
+ padding: 10px 0
max-width: 430px
#rulesDiv > .card
padding: 5px 0
- max-width: 75%
+ max-width: 50%
max-height: 100%
+ @media screen and (max-width: 1500px)
+ max-width: 67%
@media screen and (max-width: 1024px)
max-width: 85%
@media screen and (max-width: 767px)
max-width: 100%
p.score-section
+ margin: 0
font-size: 1.3em
span.score
font-weight: bold
span.name
font-size: 1.5rem
+ @media screen and (max-width: 767px)
+ font-size: 1.2rem
padding: 0 3px
span.time
font-size: 2rem
+ @media screen and (max-width: 767px)
+ font-size: 1.5rem
display: inline-block
.time-left
margin-left: 10px
</style>
<style lang="sass">
-// TODO: next is duplicated from Rules/. Merge ? How ? ...
-
-figure.diagram-container
- margin: 15px 0 15px 0
- text-align: center
- width: 100%
- display: block
- .diagram
- display: block
- width: 50%
- min-width: 240px
- margin-left: auto
- margin-right: auto
- .diag12
- float: left
- width: 40%
- margin-left: calc(10% - 20px)
- margin-right: 40px
- @media screen and (max-width: 630px)
- float: none
- margin: 0 auto 10px auto
- .diag22
- float: left
- width: 40%
- margin-right: calc(10% - 20px)
- @media screen and (max-width: 630px)
- float: none
- margin: 0 auto
- figcaption
- display: block
- clear: both
- padding-top: 5px
- font-size: 0.8em
-
-p.boxed
- background-color: #FFCC66
- padding: 5px
-
-.bigfont
- font-size: 1.2em
-
-.bold
- font-weight: bold
-
-.stageDelimiter
- color: purple
-
-// To show (new) pieces, and/or there values...
-figure.showPieces > img
- width: 50px
-
-figure.showPieces > figcaption
- color: #6C6C6C
-
-.section-title
- padding: 0
-
-.section-title > h4
- padding: 5px
-
-ol, ul:not(.browser-default)
- padding-left: 20px
-
-ul:not(.browser-default)
- margin-top: 5px
-
-ul:not(.browser-default) > li
- list-style-type: disc
-
-table
- margin: 15px auto
-
-.italic
- font-style: italic
-
-img.img-center
- display: block
- margin: 0 auto 15px auto
+@import "@/styles/_rules.sass"
+@import "@/styles/_board_squares_img.sass"
</style>