if (!!lm) {
if (!Array.isArray(lm)) lm = [lm];
lm.forEach(m => {
- if (V.OnBoard(m.start.x, m.start.y))
+ if (!m.start.noHighlight && V.OnBoard(m.start.x, m.start.y))
lmHighlights[m.start.x + sizeX * m.start.y] = true;
- if (V.OnBoard(m.end.x, m.end.y))
+ if (!m.end.noHighlight && V.OnBoard(m.end.x, m.end.y))
lmHighlights[m.end.x + sizeX * m.end.y] = true;
});
}
const showLight = (
this.settings.highlight &&
- ["all","highlight"].includes(V.ShowMoves)
+ ["all", "highlight"].includes(V.ShowMoves)
);
const showCheck = (
this.settings.highlight &&
- ["all","highlight","byrow"].includes(V.ShowMoves)
+ ["all", "highlight", "byrow"].includes(V.ShowMoves)
);
const orientation = !V.CanFlip ? "w" : this.orientation;
// Ensure that squares colors do not change when board is flipped
const squareId = "sq-" + ci + "-" + cj;
let elems = [];
if (showPiece(ci, cj)) {
- elems.push(
- h("img", {
- "class": {
- piece: true,
- ghost:
- !!this.selectedPiece &&
- this.selectedPiece.parentNode.id == squareId
- },
- attrs: {
- src:
- "/images/pieces/" +
- this.vr.getPpath(
- this.vr.board[ci][cj],
- // Extra args useful for some variants:
- this.userColor,
- this.score,
- this.orientation) +
- V.IMAGE_EXTENSION
- }
- })
- );
+ let pieceSpecs = {
+ "class": {
+ piece: true,
+ ghost:
+ !!this.selectedPiece &&
+ this.selectedPiece.parentNode.id == squareId
+ },
+ attrs: {
+ src:
+ "/images/pieces/" +
+ this.vr.getPpath(
+ this.vr.board[ci][cj],
+ // Extra args useful for some variants:
+ this.userColor,
+ this.score,
+ this.orientation) +
+ V.IMAGE_EXTENSION
+ }
+ };
+ if (this.arrows.length == 0)
+ pieceSpecs["style"] = { position: "absolute" };
+ elems.push(h("img", pieceSpecs));
}
if (this.settings.hints && hintSquares[ci][cj]) {
elems.push(
"class": {
board: true,
["board" + sizeY]: true,
- "light-square": lightSquare && !V.Monochrome,
- "dark-square": !lightSquare || !!V.Monochrome,
+ "light-square":
+ !V.Notoodark && lightSquare && !V.Monochrome,
+ "dark-square":
+ !V.Notoodark && (!lightSquare || !!V.Monochrome),
+ "middle-square": V.Notoodark,
[this.settings.bcolor]: true,
"in-shadow": inShadow(ci, cj),
"highlight-light": inHighlight(ci, cj) && lightSquare,
- "highlight-dark": inHighlight(ci, cj) && !lightSquare,
+ "highlight-dark":
+ inHighlight(ci, cj) && (V.Monochrome || !lightSquare),
"incheck-light":
showCheck && lightSquare && incheckSq[ci][cj],
"incheck-dark":
- showCheck && !lightSquare && incheckSq[ci][cj]
+ showCheck && !lightSquare && incheckSq[ci][cj],
+ "hover-highlight": this.vr.hoverHighlight(ci, cj)
},
attrs: {
id: getSquareId({ x: ci, y: cj })
},
[
h("img", {
+ // NOTE: class "reserve" not used currently
"class": { piece: true, reserve: true },
attrs: {
src:
".svg"
}
}),
- h("sup", { "class": { "reserve-count": true } }, [ qty ])
+ h(
+ "sup",
+ {
+ "class": { "reserve-count": true },
+ style: { top: "calc(100% + 5px)" }
+ },
+ [ qty ]
+ )
]
)
);
".svg"
}
}),
- h("sup", { "class": { "reserve-count": true } }, [ qty ])
+ h(
+ "sup",
+ {
+ "class": { "reserve-count": true },
+ style: { top: "calc(100% + 5px)" }
+ },
+ [ qty ]
+ )
]
)
);
this.coordsToXY(line[1], bPos.top, bPos.left, squareWidth);
let path =
document.createElementNS("http://www.w3.org/2000/svg", "path");
- path.classList.add("svg-line");
+ if (line[0][0] == line[1][0] || line[0][1] == line[1][1])
+ path.classList.add("svg-line");
+ else
+ // "Diagonals" are drawn with a lighter color (TODO: generalize)
+ path.classList.add("svg-diag");
path.setAttribute(
"d",
"M" + lStart.x + "," + lStart.y + " " +
const color = this.analyze ? this.vr.turn : this.userColor;
if (this.vr.canIplay(color, startSquare))
this.possibleMoves = this.vr.getPossibleMovesFrom(startSquare);
+ else return;
// For potential drag'n drop, remember start coordinates
// (to center the piece on mouse cursor)
const rect = parent.getBoundingClientRect();
// Cancel if off boardContainer
const [offsetX, offsetY] =
this.mobileBrowser
- ?
- [
- e.changedTouches[0].pageX,
- // TODO: fixing attempt for smartphones, removing window.scrollY
- e.changedTouches[0].pageY - window.scrollY
- ]
+ ? [e.changedTouches[0].clientX, e.changedTouches[0].clientY]
: [e.clientX, e.clientY];
if (
offsetX < this.containerPos.left ||
delete this.selectedPiece;
this.selectedPiece = null;
this.start = null;
+ this.possibleMoves = []; //in case of
+ this.click = "";
let selected = document.querySelector(".ghost");
if (!!selected) selected.classList.remove("ghost");
}
// Obtain the move from start and end squares
const [offsetX, offsetY] =
this.mobileBrowser
- ?
- [
- e.changedTouches[0].pageX,
- e.changedTouches[0].pageY - window.scrollY
- ]
+ ? [e.changedTouches[0].clientX, e.changedTouches[0].clientY]
: [e.clientX, e.clientY];
let landing = document.elementFromPoint(offsetX, offsetY);
// Next condition: classList.contains(piece) fails because of marks
.svg-line
stroke: black
+.svg-diag
+ stroke: grey
+
.arrow-head
fill: #5f0e78
</style>
<style lang="sass" scoped>
@import "@/styles/_board_squares_img.sass";
-// NOTE: no variants with reserve of size != 8
-.game.reserve-div
- margin-bottom: 18px
+//.game.reserve-div
+ // TODO: would be cleaner to restrict width so that it doesn't overflow
+ // Commented out because pieces would disappear over the board otherwise:
+ //overflow: hidden
.reserve-count
- padding-left: 40%
+ width: 100%
+ text-align: center
+ display: inline-block
+ position: absolute
.reserve-row
margin-bottom: 15px
display: block
img.ghost
+ // NOTE: no need to set z-index here, since opacity is low
position: absolute
opacity: 0.5
top: 0
.incheck-dark
background-color: rgba(204, 51, 0, 0.9) !important
-.light-square.lichess
- background-color: #f0d9b5;
-.dark-square.lichess
- background-color: #b58863;
-
-.light-square.chesscom
- background-color: #e5e5ca;
-.dark-square.chesscom
- background-color: #6f8f57;
-
-.light-square.chesstempo
- background-color: #dfdfdf;
-.dark-square.chesstempo
- background-color: #7287b6;
-
// TODO: no predefined highlight colors, but layers. How?
+.hover-highlight:hover
+ // TODO: color dependant on board theme, or inner border...
+ background-color: #C571E6 !important
+
.light-square.lichess.highlight-light
background-color: #cdd26a
.dark-square.lichess.highlight-dark
background-color: #9f9fff
.dark-square.chesstempo.highlight-dark
background-color: #557fff
+
+.light-square.orangecc.highlight-light
+ background-color: #fef273
+.dark-square.orangecc.highlight-dark
+ background-color: #e8c525
</style>