From 2e319f762a5ebf3909c6cfac34fa293808d0bbc4 Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Fri, 6 Apr 2018 11:25:18 -0400 Subject: [PATCH] Add board labels --- assets/css/_board.scss | 54 +++++++++++++++--- assets/js/components/chess-board.js | 87 ++++++++++++++++++----------- 2 files changed, 98 insertions(+), 43 deletions(-) diff --git a/assets/css/_board.scss b/assets/css/_board.scss index 1f84f23..0ffc3a6 100644 --- a/assets/css/_board.scss +++ b/assets/css/_board.scss @@ -43,6 +43,50 @@ $board-size: 90vmin; } } +.board-rank-labels { + display: flex; + height: 90%; + left: 0; + position: absolute; + width: 5%; +} + +.board.player-is-white { + .board-rank-labels { + flex-direction: column-reverse; + } + + .board-file-labels { + flex-direction: row; + } +} + +.board.player-is-black { + .board-rank-labels { + flex-direction: column; + } + + .board-file-labels { + flex-direction: row-reverse; + } +} + +.board-file-labels { + display: flex; + height: 5%; + position: absolute; + top: 0; + width: 90%; +} + +.board-label { + align-items: center; + display: flex; + flex-grow: 1; + font-size: $board-size / 40; + justify-content: center; +} + .board-body { display: grid; grid-template-columns: repeat(8, 1fr); @@ -130,18 +174,10 @@ $board-size: 90vmin; .board-body { grid-gap: 1px; } - - .board-label { - font-size: 0.8rem; - } } @media (min-width: 768px) { .board-body { - grid-gap: 1.5px; - } - - .board-label { - font-size: 1rem; + grid-gap: 2px; } } diff --git a/assets/js/components/chess-board.js b/assets/js/components/chess-board.js index 8659f23..ac417e9 100644 --- a/assets/js/components/chess-board.js +++ b/assets/js/components/chess-board.js @@ -25,40 +25,6 @@ class ChessBoard extends React.Component { return store.getState().player; } - renderSquares() { - const board = this.getBoard(); - const { store, channel } = this.props; - - return _.map(this.ranks(), (rankId) => { - const rank = this.getBoard()[rankId]; - - return _.map(this.files(rank), (fileId) => { - return ( - - ); - }); - }); - } - - renderRanks() { - const board = this.getBoard(); - - return _.map(this.ranks(), rankId => { - return ( -
- {this.renderFiles(rankId)} -
- ); - }); - } - files(rank) { const player = this.getPlayer(); @@ -84,6 +50,28 @@ class ChessBoard extends React.Component { } } + renderSquares() { + const board = this.getBoard(); + const { store, channel } = this.props; + + return _.map(this.ranks(), (rankId) => { + const rank = this.getBoard()[rankId]; + + return _.map(this.files(rank), (fileId) => { + return ( + + ); + }); + }); + } + get boardClass() { const turn = this.getTurn(); const player = this.getPlayer(); @@ -91,9 +79,40 @@ class ChessBoard extends React.Component { return classNames("board", turn + "-to-move", "player-is-" + player); } + get rankLabels() { + return [1, 2, 3, 4, 5, 6, 7, 8]; + } + + get fileLabels() { + return ["a", "b", "c", "d", "e", "f", "g", "h"]; + } + + renderRankLabels() { + return _.map(this.rankLabels, (rankLabel) => { + return ( +
{rankLabel}
+ ); + }); + } + + renderFileLabels() { + return _.map(this.fileLabels, (fileLabel) => { + return ( +
{fileLabel}
+ ); + }); + } + render() { return (
+
+ {this.renderRankLabels()} +
+
+ {this.renderFileLabels()} +
+
{this.renderSquares()}