cm-chessboard 3.14.2 → 3.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -10
- package/{styles → assets/styles}/_cm-chessboard-theme.scss +0 -0
- package/{styles → assets/styles}/cm-chessboard.css +6 -6
- package/assets/styles/cm-chessboard.css.map +10 -0
- package/{styles → assets/styles}/cm-chessboard.scss +8 -7
- package/examples/destroy-many-boards.html +1 -1
- package/examples/different-styles.html +1 -1
- package/examples/enable-input.html +2 -1
- package/examples/input-callbacks.html +1 -1
- package/examples/many-boards.html +1 -1
- package/examples/pieces-animation.html +12 -3
- package/examples/responsive-board.html +1 -1
- package/examples/simple-boards.html +1 -1
- package/examples/validate-moves.html +9 -4
- package/index.html +1 -1
- package/package.json +1 -1
- package/src/cm-chessboard/Chessboard.js +37 -6
- package/src/cm-chessboard/ChessboardMoveInput.js +14 -13
- package/src/cm-chessboard/ChessboardState.js +2 -2
- package/src/cm-chessboard/ChessboardView.js +3 -2
- package/test/TestMarkers.js +10 -12
- package/test/TestPosition.js +3 -6
- package/test/index.html +1 -1
- package/styles/cm-chessboard.css.map +0 -10
package/README.md
CHANGED
|
@@ -44,7 +44,7 @@ dependencies.
|
|
|
44
44
|
|
|
45
45
|
Preconditions for using cm-chessboard in a web page:
|
|
46
46
|
|
|
47
|
-
1. **include the css:** `styles/cm-chessboard.css`
|
|
47
|
+
1. **include the css:** `assets/styles/cm-chessboard.css`
|
|
48
48
|
2. **import the ES6 module:** `import {Chessboard} from "PATH/TO/src/cm-chessboard/Chessboard.js"`
|
|
49
49
|
|
|
50
50
|
Example, showing a FEN:
|
|
@@ -75,7 +75,8 @@ props = {
|
|
|
75
75
|
showCoordinates: true, // show ranks and files
|
|
76
76
|
borderType: BORDER_TYPE.thin, // thin: thin border, frame: wide border with coordinates in it, none: no border
|
|
77
77
|
aspectRatio: 1, // height/width. Set to `undefined`, if you want to define it only in the css.
|
|
78
|
-
|
|
78
|
+
moveFromMarker: MARKER_TYPE.frame, // the marker used to mark the start square
|
|
79
|
+
moveToMarker: MARKER_TYPE.frame // the marker used to mark the square where the figure is moving to
|
|
79
80
|
},
|
|
80
81
|
responsive: true, // resizes the board based on element size
|
|
81
82
|
animationDuration: 300, // pieces animation duration in milliseconds
|
|
@@ -105,12 +106,18 @@ Sets a piece on a square. Example: `board.setPiece("e4", PIECE.blackKnight)` or
|
|
|
105
106
|
|
|
106
107
|
Returns the piece on a square or `undefined` if the square is empty.
|
|
107
108
|
|
|
109
|
+
### movePiece(squareFrom, squareTo, animated = true)
|
|
110
|
+
|
|
111
|
+
Move a piece from `squareFrom` to `squareTo`. Returns a **Promise**, which is resolved, when the animation finished.
|
|
112
|
+
|
|
113
|
+
[Example for **movePiece**](https://shaack.com/projekte/cm-chessboard/examples/pieces-animation.html)
|
|
114
|
+
|
|
108
115
|
### setPosition(fen, animated = true)
|
|
109
116
|
|
|
110
117
|
Sets the position as `fen`. Special values are `"start"`, sets the chess start position and
|
|
111
118
|
`"empty"`, sets an empty board. When `animated` is set `false`, the new position will be shown instant.
|
|
112
119
|
|
|
113
|
-
Returns a **Promise
|
|
120
|
+
Returns a **Promise**, which is resolved, when the animation finished.
|
|
114
121
|
|
|
115
122
|
[Example for **setPosition**](https://shaack.com/projekte/cm-chessboard/examples/pieces-animation.html)
|
|
116
123
|
|
|
@@ -261,7 +268,7 @@ Example: The markerCircle is defined in the SVG like this.
|
|
|
261
268
|
It's a circle with the radius 18 and its center at 20/20.
|
|
262
269
|
|
|
263
270
|
Important is the id "markerCircle". You can set the marker
|
|
264
|
-
with `board.addMarker("e4", {class: "
|
|
271
|
+
with `board.addMarker("e4", {class: "markerSquare", slice: "markerSquare"})`
|
|
265
272
|
"emphasize" is the css class, which defines the color and opacity of the marker. "slice" is the id of the marker in the SVG. This is
|
|
266
273
|
also demonstrated in the [mark squares example](https://shaack.com/projekte/cm-chessboard/examples/input-callbacks.html)
|
|
267
274
|
.
|
|
@@ -269,17 +276,17 @@ also demonstrated in the [mark squares example](https://shaack.com/projekte/cm-c
|
|
|
269
276
|
The color and stroke-width of the marker is defined in the css (or scss). You could also define your marker completely
|
|
270
277
|
in the sprite, but then that is not so flexible.
|
|
271
278
|
|
|
272
|
-
These are the css styles of the markers "
|
|
279
|
+
These are the css styles of the markers "markerSquare" and "markerCircleRed".
|
|
273
280
|
|
|
274
281
|
```css
|
|
275
|
-
marker.
|
|
282
|
+
marker.markerSquare {
|
|
276
283
|
fill: black;
|
|
277
|
-
opacity: 0.
|
|
284
|
+
opacity: 0.11;
|
|
278
285
|
}
|
|
279
|
-
marker.
|
|
280
|
-
stroke: #
|
|
286
|
+
marker.markerCircleRed {
|
|
287
|
+
stroke: #aa0000;
|
|
281
288
|
stroke-width: 3px;
|
|
282
|
-
opacity: 0.
|
|
289
|
+
opacity: 0.4;
|
|
283
290
|
}
|
|
284
291
|
```
|
|
285
292
|
|
|
File without changes
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
.cm-chessboard .board.input-enabled .square {
|
|
2
2
|
cursor: pointer; }
|
|
3
3
|
|
|
4
|
-
.cm-chessboard .markers .marker.markerFrame {
|
|
4
|
+
.cm-chessboard .markers .marker.markerFrame, .cm-chessboard .markers .marker.marker-frame {
|
|
5
5
|
stroke: black;
|
|
6
6
|
stroke-width: 1.8px;
|
|
7
7
|
opacity: 0.5; }
|
|
8
8
|
|
|
9
|
-
.cm-chessboard .markers .marker.markerFrameRed {
|
|
9
|
+
.cm-chessboard .markers .marker.markerFrameRed, .cm-chessboard .markers .marker.marker-frame-red {
|
|
10
10
|
stroke: #aa0000;
|
|
11
11
|
stroke-width: 1.8px;
|
|
12
12
|
opacity: 0.4; }
|
|
13
13
|
|
|
14
|
-
.cm-chessboard .markers .marker.markerSquare {
|
|
14
|
+
.cm-chessboard .markers .marker.markerSquare, .cm-chessboard .markers .marker.marker-square {
|
|
15
15
|
fill: black;
|
|
16
16
|
opacity: 0.11; }
|
|
17
17
|
|
|
18
|
-
.cm-chessboard .markers .marker.markerDot {
|
|
18
|
+
.cm-chessboard .markers .marker.markerDot, .cm-chessboard .markers .marker.marker-dot {
|
|
19
19
|
fill: black;
|
|
20
20
|
opacity: 0.3; }
|
|
21
21
|
|
|
22
|
-
.cm-chessboard .markers .marker.markerCircle {
|
|
22
|
+
.cm-chessboard .markers .marker.markerCircle, .cm-chessboard .markers .marker.marker-circle {
|
|
23
23
|
stroke: #000055;
|
|
24
24
|
stroke-width: 3px;
|
|
25
25
|
opacity: 0.4; }
|
|
26
26
|
|
|
27
|
-
.cm-chessboard .markers .marker.markerCircleRed {
|
|
27
|
+
.cm-chessboard .markers .marker.markerCircleRed, .cm-chessboard .markers .marker.marker-circle-red {
|
|
28
28
|
stroke: #aa0000;
|
|
29
29
|
stroke-width: 3px;
|
|
30
30
|
opacity: 0.4; }
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"file": "cm-chessboard.css",
|
|
4
|
+
"sources": [
|
|
5
|
+
"cm-chessboard.scss",
|
|
6
|
+
"_cm-chessboard-theme.scss"
|
|
7
|
+
],
|
|
8
|
+
"names": [],
|
|
9
|
+
"mappings": "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"
|
|
10
|
+
}
|
|
@@ -11,38 +11,39 @@
|
|
|
11
11
|
}
|
|
12
12
|
.markers {
|
|
13
13
|
.marker {
|
|
14
|
-
|
|
14
|
+
// use the second, the hyphens syntax
|
|
15
|
+
&.markerFrame, &.marker-frame {
|
|
15
16
|
stroke: black;
|
|
16
17
|
stroke-width: 1.8px;
|
|
17
18
|
opacity: 0.5;
|
|
18
19
|
}
|
|
19
|
-
&.markerFrameRed {
|
|
20
|
+
&.markerFrameRed, &.marker-frame-red {
|
|
20
21
|
stroke: #aa0000;
|
|
21
22
|
stroke-width: 1.8px;
|
|
22
23
|
opacity: 0.4;
|
|
23
24
|
}
|
|
24
|
-
&.markerSquare {
|
|
25
|
+
&.markerSquare, &.marker-square {
|
|
25
26
|
fill: black;
|
|
26
27
|
opacity: 0.11;
|
|
27
28
|
}
|
|
28
|
-
&.markerDot {
|
|
29
|
+
&.markerDot, &.marker-dot {
|
|
29
30
|
fill: black;
|
|
30
31
|
opacity: 0.3;
|
|
31
32
|
}
|
|
32
|
-
&.markerCircle {
|
|
33
|
+
&.markerCircle, &.marker-circle {
|
|
33
34
|
stroke: #000055;
|
|
34
35
|
stroke-width: 3px;
|
|
35
36
|
opacity: 0.4;
|
|
36
37
|
}
|
|
37
|
-
&.markerCircleRed {
|
|
38
|
+
&.markerCircleRed, &.marker-circle-red {
|
|
38
39
|
stroke: #aa0000;
|
|
39
40
|
stroke-width: 3px;
|
|
40
41
|
opacity: 0.4;
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
|
-
|
|
45
45
|
.pieces, .markers {
|
|
46
|
+
// important for the proper function
|
|
46
47
|
pointer-events: none;
|
|
47
48
|
}
|
|
48
49
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
<!--suppress CssUnusedSymbol -->
|
|
10
10
|
<style type="text/css">
|
|
11
11
|
div.board {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<h1><a href="../">cm-chessboard</a></h1>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<h1><a href="../">cm-chessboard</a></h1>
|
|
@@ -45,6 +45,7 @@ function inputHandler(event) {
|
|
|
45
45
|
})
|
|
46
46
|
window.board.enableMoveInput(inputHandler)
|
|
47
47
|
function inputHandler(event) {
|
|
48
|
+
console.log(event)
|
|
48
49
|
switch (event.type) {
|
|
49
50
|
case INPUT_EVENT_TYPE.moveStart:
|
|
50
51
|
log(`moveStart: ${event.square}`)
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<h1><a href="../">cm-chessboard</a></h1>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/chess.js/0.10.2/chess.js"></script>
|
|
10
10
|
<!--suppress CssUnusedSymbol -->
|
|
11
11
|
<style type="text/css">
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<h1><a href="../">cm-chessboard</a></h1>
|
|
@@ -18,9 +18,12 @@
|
|
|
18
18
|
<button onclick="setPosition('rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR')">Position 1</button>
|
|
19
19
|
<button onclick="setPosition('rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R')">Position 2</button>
|
|
20
20
|
<button onclick="setPosition('rn2k1r1/ppp1pp1p/3p2p1/5bn1/P7/2N2B2/1PPPPP2/2BNK1RR')">Position 3</button>
|
|
21
|
-
<button onclick="switchOrientation()">Switch Orientation
|
|
22
|
-
</button>
|
|
21
|
+
<button onclick="switchOrientation()">Switch Orientation</button>
|
|
23
22
|
<pre><button onclick="window.board.setPosition('rn2k1r1/ppp1pp1p/3p2p1/5bn1/P7/2N2B2/1PPPPP2/2BNK1RR')">Position 3</button></pre>
|
|
23
|
+
<br/>
|
|
24
|
+
Move piece from: <input id="moveFrom" type="text" size="2" value="e2"/> to: <input id="moveTo" type="text" size="2" value="e4"/>
|
|
25
|
+
<button onclick="movePiece()">Do move</button>
|
|
26
|
+
<pre>board.movePiece(squareFrom, squareTo)</pre>
|
|
24
27
|
<script type="module">
|
|
25
28
|
import {Chessboard} from "../src/cm-chessboard/Chessboard.js"
|
|
26
29
|
|
|
@@ -40,6 +43,12 @@
|
|
|
40
43
|
window.switchOrientation = () => {
|
|
41
44
|
board.setOrientation(board.getOrientation() === 'w' ? 'b' : 'w')
|
|
42
45
|
}
|
|
46
|
+
window.movePiece = () => {
|
|
47
|
+
const squareFrom = document.getElementById("moveFrom").value
|
|
48
|
+
const squareTo = document.getElementById("moveTo").value
|
|
49
|
+
console.log("movePiece", squareFrom, squareTo)
|
|
50
|
+
board.movePiece(squareFrom, squareTo)
|
|
51
|
+
}
|
|
43
52
|
</script>
|
|
44
53
|
</body>
|
|
45
54
|
</html>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<h1><a href="../">cm-chessboard</a></h1>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<h1><a href="../">cm-chessboard</a></h1>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
6
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
7
|
<link rel="stylesheet" href="styles/examples.css"/>
|
|
8
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
9
9
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/chess.js/0.10.2/chess.js"></script>
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
@@ -22,8 +22,10 @@ const chess = new Chess()
|
|
|
22
22
|
function inputHandler(event) {
|
|
23
23
|
console.log("event", event)
|
|
24
24
|
event.chessboard.removeMarkers(undefined, MARKER_TYPE.dot)
|
|
25
|
+
event.chessboard.removeMarkers(undefined, MARKER_TYPE.square)
|
|
25
26
|
if (event.type === INPUT_EVENT_TYPE.moveStart) {
|
|
26
27
|
const moves = chess.moves({square: event.square, verbose: true});
|
|
28
|
+
event.chessboard.addMarker(event.square, MARKER_TYPE.square)
|
|
27
29
|
for (const move of moves) {
|
|
28
30
|
event.chessboard.addMarker(move.to, MARKER_TYPE.dot)
|
|
29
31
|
}
|
|
@@ -32,6 +34,7 @@ function inputHandler(event) {
|
|
|
32
34
|
const move = {from: event.squareFrom, to: event.squareTo}
|
|
33
35
|
const result = chess.move(move)
|
|
34
36
|
if (result) {
|
|
37
|
+
event.chessboard.removeMarkers(undefined, MARKER_TYPE.square)
|
|
35
38
|
event.chessboard.disableMoveInput()
|
|
36
39
|
event.chessboard.setPosition(chess.fen())
|
|
37
40
|
const possibleMoves = chess.moves({verbose: true})
|
|
@@ -54,7 +57,7 @@ function inputHandler(event) {
|
|
|
54
57
|
const board = new Chessboard(document.getElementById("board"), {
|
|
55
58
|
position: chess.fen(),
|
|
56
59
|
sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
|
|
57
|
-
style: {
|
|
60
|
+
style: {moveFromMarker: undefined, moveToMarker: undefined}, // disable standard markers
|
|
58
61
|
orientation: COLOR.white
|
|
59
62
|
})
|
|
60
63
|
board.enableMoveInput(inputHandler, COLOR.white)
|
|
@@ -69,9 +72,11 @@ board.enableMoveInput(inputHandler, COLOR.white)
|
|
|
69
72
|
function inputHandler(event) {
|
|
70
73
|
console.log("event", event)
|
|
71
74
|
event.chessboard.removeMarkers(undefined, MARKER_TYPE.dot)
|
|
75
|
+
event.chessboard.removeMarkers(undefined, MARKER_TYPE.square)
|
|
72
76
|
if (event.type === INPUT_EVENT_TYPE.moveStart) {
|
|
73
77
|
const moves = chess.moves({square: event.square, verbose: true});
|
|
74
|
-
|
|
78
|
+
event.chessboard.addMarker(event.square, MARKER_TYPE.square)
|
|
79
|
+
for (const move of moves) { // draw dots on possible moves
|
|
75
80
|
event.chessboard.addMarker(move.to, MARKER_TYPE.dot)
|
|
76
81
|
}
|
|
77
82
|
return moves.length > 0
|
|
@@ -101,7 +106,7 @@ board.enableMoveInput(inputHandler, COLOR.white)
|
|
|
101
106
|
const board = new Chessboard(document.getElementById("board"), {
|
|
102
107
|
position: chess.fen(),
|
|
103
108
|
sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
|
|
104
|
-
style: {
|
|
109
|
+
style: {moveFromMarker: undefined, moveToMarker: undefined}, // disable standard markers
|
|
105
110
|
orientation: COLOR.white
|
|
106
111
|
})
|
|
107
112
|
board.enableMoveInput(inputHandler, COLOR.white)
|
package/index.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<title>cm-chessboard</title>
|
|
6
|
-
<link rel="stylesheet" href="
|
|
6
|
+
<link rel="stylesheet" href="assets/styles/cm-chessboard.css"/>
|
|
7
7
|
<link rel="stylesheet" href="examples/styles/examples.css"/>
|
|
8
8
|
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
9
9
|
</head>
|
package/package.json
CHANGED
|
@@ -26,10 +26,10 @@ export const BORDER_TYPE = {
|
|
|
26
26
|
frame: "frame" // wide border with coordinates in it
|
|
27
27
|
}
|
|
28
28
|
export const MARKER_TYPE = {
|
|
29
|
-
frame: {class: "
|
|
30
|
-
square: {class: "
|
|
31
|
-
dot: {class: "
|
|
32
|
-
circle: {class: "
|
|
29
|
+
frame: {class: "marker-frame", slice: "markerFrame"},
|
|
30
|
+
square: {class: "marker-square", slice: "markerSquare"},
|
|
31
|
+
dot: {class: "marker-dot", slice: "markerDot"},
|
|
32
|
+
circle: {class: "marker-circle", slice: "markerCircle"}
|
|
33
33
|
}
|
|
34
34
|
export const PIECE = {
|
|
35
35
|
wp: "wp", wb: "wb", wn: "wn", wr: "wr", wq: "wq", wk: "wk",
|
|
@@ -53,8 +53,10 @@ export class Chessboard {
|
|
|
53
53
|
showCoordinates: true, // show ranks and files
|
|
54
54
|
borderType: BORDER_TYPE.thin, // thin: thin border, frame: wide border with coordinates in it, none: no border
|
|
55
55
|
aspectRatio: 1, // height/width. Set to `undefined`, if you want to define it only in the css.
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
moveFromMarker: MARKER_TYPE.frame, // the marker used to mark the start square
|
|
57
|
+
moveToMarker: MARKER_TYPE.frame, // the marker used to mark the square where the figure is moving to
|
|
58
|
+
moveMarker: MARKER_TYPE.frame, // deprecated => moveFromMarker // TODO remove in future
|
|
59
|
+
hoverMarker: MARKER_TYPE.frame // deprecated => moveToMarker // TODO remove in future
|
|
58
60
|
},
|
|
59
61
|
responsive: true, // resizes the board based on element size
|
|
60
62
|
animationDuration: 300, // pieces animation duration in milliseconds
|
|
@@ -75,6 +77,14 @@ export class Chessboard {
|
|
|
75
77
|
if (props.style) {
|
|
76
78
|
Object.assign(this.props.style, props.style)
|
|
77
79
|
}
|
|
80
|
+
if(this.props.style.moveMarker !== MARKER_TYPE.frame) { // TODO remove in future
|
|
81
|
+
console.warn("this.props.style.moveMarker is deprecated, use this.props.style.moveFromMarker")
|
|
82
|
+
this.props.style.moveFromMarker = this.props.style.moveMarker
|
|
83
|
+
}
|
|
84
|
+
if(this.props.style.hoverMarker !== MARKER_TYPE.frame) { // TODO remove in future
|
|
85
|
+
console.warn("this.props.style.hoverMarker is deprecated, use this.props.style.moveToMarker")
|
|
86
|
+
this.props.style.moveToMarker = this.props.style.hoverMarker
|
|
87
|
+
}
|
|
78
88
|
if (this.props.style.aspectRatio) {
|
|
79
89
|
this.element.style.height = (this.element.offsetWidth * this.props.style.aspectRatio) + "px"
|
|
80
90
|
}
|
|
@@ -104,6 +114,27 @@ export class Chessboard {
|
|
|
104
114
|
return this.state.squares[this.state.squareToIndex(square)]
|
|
105
115
|
}
|
|
106
116
|
|
|
117
|
+
movePiece(squareFrom, squareTo, animated = true) {
|
|
118
|
+
return new Promise((resolve, reject) => {
|
|
119
|
+
const prevSquares = this.state.squares.slice(0) // clone
|
|
120
|
+
const pieceFrom = this.getPiece(squareFrom)
|
|
121
|
+
if(!pieceFrom) {
|
|
122
|
+
reject("no piece on square " + squareFrom)
|
|
123
|
+
return
|
|
124
|
+
}
|
|
125
|
+
this.state.squares[this.state.squareToIndex(squareFrom)] = undefined
|
|
126
|
+
this.state.squares[this.state.squareToIndex(squareTo)] = pieceFrom
|
|
127
|
+
if (animated) {
|
|
128
|
+
this.view.animatePieces(prevSquares, this.state.squares, () => {
|
|
129
|
+
resolve()
|
|
130
|
+
})
|
|
131
|
+
} else {
|
|
132
|
+
this.view.drawPieces(this.state.squares)
|
|
133
|
+
resolve()
|
|
134
|
+
}
|
|
135
|
+
})
|
|
136
|
+
}
|
|
137
|
+
|
|
107
138
|
setPosition(fen, animated = true) {
|
|
108
139
|
return new Promise((resolve) => {
|
|
109
140
|
if (fen === "start") {
|
|
@@ -21,7 +21,7 @@ export const MOVE_CANCELED_REASON = {
|
|
|
21
21
|
secondClick: "secondClick",
|
|
22
22
|
movedOutOfBoard: "movedOutOfBoard",
|
|
23
23
|
draggedBack: "draggedBack",
|
|
24
|
-
|
|
24
|
+
clickedAnotherPiece: "clickedAnotherPiece"
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
const DRAG_THRESHOLD = 4
|
|
@@ -254,7 +254,7 @@ export class ChessboardMoveInput {
|
|
|
254
254
|
const startPieceName = this.chessboard.getPiece(SQUARE_COORDINATES[this.startIndex])
|
|
255
255
|
const startPieceColor = startPieceName ? startPieceName.substr(0, 1) : undefined
|
|
256
256
|
if (color && startPieceColor === pieceColor) { // https://github.com/shaack/cm-chessboard/issues/40
|
|
257
|
-
this.moveCanceledCallback(MOVE_CANCELED_REASON.
|
|
257
|
+
this.moveCanceledCallback(MOVE_CANCELED_REASON.clickedAnotherPiece, this.startIndex, index)
|
|
258
258
|
if (this.moveStartCallback(index)) {
|
|
259
259
|
this.setMoveInputState(STATE.pieceClickedThreshold, {
|
|
260
260
|
index: index,
|
|
@@ -339,7 +339,7 @@ export class ChessboardMoveInput {
|
|
|
339
339
|
if (this.moveInputState === STATE.clickDragTo) {
|
|
340
340
|
this.chessboard.state.setPiece(this.startIndex, this.movedPiece)
|
|
341
341
|
this.view.setPieceVisibility(this.startIndex)
|
|
342
|
-
this.moveCanceledCallback(MOVE_CANCELED_REASON.draggedBack, index)
|
|
342
|
+
this.moveCanceledCallback(MOVE_CANCELED_REASON.draggedBack, index, index)
|
|
343
343
|
this.setMoveInputState(STATE.reset)
|
|
344
344
|
} else {
|
|
345
345
|
this.setMoveInputState(STATE.clickTo, {index: index})
|
|
@@ -351,12 +351,13 @@ export class ChessboardMoveInput {
|
|
|
351
351
|
this.setMoveInputState(STATE.clickTo, {index: index})
|
|
352
352
|
} else if (this.moveInputState === STATE.secondClickThreshold) {
|
|
353
353
|
this.setMoveInputState(STATE.reset)
|
|
354
|
-
this.moveCanceledCallback(MOVE_CANCELED_REASON.secondClick, index)
|
|
354
|
+
this.moveCanceledCallback(MOVE_CANCELED_REASON.secondClick, index, index)
|
|
355
355
|
}
|
|
356
356
|
} else {
|
|
357
357
|
this.view.drawPieces()
|
|
358
|
+
const moveStartIndex = this.startIndex
|
|
358
359
|
this.setMoveInputState(STATE.reset)
|
|
359
|
-
this.moveCanceledCallback(MOVE_CANCELED_REASON.movedOutOfBoard, undefined)
|
|
360
|
+
this.moveCanceledCallback(MOVE_CANCELED_REASON.movedOutOfBoard, moveStartIndex, undefined)
|
|
360
361
|
}
|
|
361
362
|
} else {
|
|
362
363
|
this.view.drawPieces()
|
|
@@ -365,20 +366,20 @@ export class ChessboardMoveInput {
|
|
|
365
366
|
}
|
|
366
367
|
|
|
367
368
|
updateStartEndMarkers() {
|
|
368
|
-
if(this.chessboard.props.style.
|
|
369
|
-
this.chessboard.state.removeMarkers(undefined, this.chessboard.props.style.
|
|
369
|
+
if(this.chessboard.props.style.moveFromMarker) {
|
|
370
|
+
this.chessboard.state.removeMarkers(undefined, this.chessboard.props.style.moveFromMarker)
|
|
370
371
|
}
|
|
371
|
-
if(this.chessboard.props.style.
|
|
372
|
-
this.chessboard.state.removeMarkers(undefined, this.chessboard.props.style.
|
|
372
|
+
if(this.chessboard.props.style.moveToMarker) {
|
|
373
|
+
this.chessboard.state.removeMarkers(undefined, this.chessboard.props.style.moveToMarker)
|
|
373
374
|
}
|
|
374
|
-
if (this.chessboard.props.style.
|
|
375
|
+
if (this.chessboard.props.style.moveFromMarker) {
|
|
375
376
|
if (this.startIndex) {
|
|
376
|
-
this.chessboard.state.addMarker(this.startIndex, this.chessboard.props.style.
|
|
377
|
+
this.chessboard.state.addMarker(this.startIndex, this.chessboard.props.style.moveFromMarker)
|
|
377
378
|
}
|
|
378
379
|
}
|
|
379
|
-
if (this.chessboard.props.style.
|
|
380
|
+
if (this.chessboard.props.style.moveToMarker) {
|
|
380
381
|
if (this.endIndex) {
|
|
381
|
-
this.chessboard.state.addMarker(this.endIndex, this.chessboard.props.style.
|
|
382
|
+
this.chessboard.state.addMarker(this.endIndex, this.chessboard.props.style.moveToMarker)
|
|
382
383
|
}
|
|
383
384
|
}
|
|
384
385
|
this.view.drawMarkers()
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
export class ChessboardState {
|
|
8
8
|
|
|
9
9
|
constructor() {
|
|
10
|
-
this.squares = new Array(64).fill(
|
|
10
|
+
this.squares = new Array(64).fill(null)
|
|
11
11
|
this.orientation = undefined
|
|
12
12
|
this.markers = []
|
|
13
13
|
this.inputWhiteEnabled = false
|
|
@@ -59,7 +59,7 @@ export class ChessboardState {
|
|
|
59
59
|
})
|
|
60
60
|
for (let c = 0; c < 8; c++) {
|
|
61
61
|
const char = row.substr(c, 1)
|
|
62
|
-
let piece =
|
|
62
|
+
let piece = null
|
|
63
63
|
if (char !== '-') {
|
|
64
64
|
if (char.toUpperCase() === char) {
|
|
65
65
|
piece = `w${char.toLowerCase()}`
|
|
@@ -406,13 +406,14 @@ export class ChessboardView {
|
|
|
406
406
|
}
|
|
407
407
|
}
|
|
408
408
|
|
|
409
|
-
moveCanceledCallback(reason,
|
|
409
|
+
moveCanceledCallback(reason, fromIndex, toIndex) {
|
|
410
410
|
if (this.moveInputCallback) {
|
|
411
411
|
this.moveInputCallback({
|
|
412
412
|
chessboard: this.chessboard,
|
|
413
413
|
type: INPUT_EVENT_TYPE.moveCanceled,
|
|
414
414
|
reason: reason,
|
|
415
|
-
|
|
415
|
+
squareFrom: SQUARE_COORDINATES[fromIndex],
|
|
416
|
+
squareTo: toIndex ? SQUARE_COORDINATES[toIndex] : undefined
|
|
416
417
|
})
|
|
417
418
|
}
|
|
418
419
|
}
|
package/test/TestMarkers.js
CHANGED
|
@@ -17,18 +17,16 @@ describe("TestMarkers", () => {
|
|
|
17
17
|
chessboard.addMarker("e5", MARKER_TYPE.square)
|
|
18
18
|
chessboard.addMarker("b6", MARKER_TYPE.frame)
|
|
19
19
|
chessboard.addMarker("h6", MARKER_TYPE.frame)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
chessboard.destroy()
|
|
31
|
-
}, 100)
|
|
20
|
+
assert.equals(chessboard.getMarkers().length,3)
|
|
21
|
+
const markersE5 = chessboard.getMarkers("e5")
|
|
22
|
+
assert.equals(markersE5.length, 1)
|
|
23
|
+
assert.equals(markersE5[0].square, "e5")
|
|
24
|
+
assert.equals(markersE5[0].type.slice, "markerSquare")
|
|
25
|
+
assert.equals(chessboard.getMarkers(undefined, MARKER_TYPE.square).length, 1)
|
|
26
|
+
assert.equals(chessboard.getMarkers("a4").length, 0)
|
|
27
|
+
assert.equals(chessboard.getMarkers(undefined, MARKER_TYPE.frame).length, 2)
|
|
28
|
+
assert.equals(chessboard.getMarkers("b6", MARKER_TYPE.frame).length, 1)
|
|
29
|
+
chessboard.destroy()
|
|
32
30
|
})
|
|
33
31
|
|
|
34
32
|
})
|
package/test/TestPosition.js
CHANGED
|
@@ -13,10 +13,9 @@ describe("TestPosition", () => {
|
|
|
13
13
|
const chessboard = new Chessboard(document.getElementById("TestPosition"), {
|
|
14
14
|
sprite: {url: "../assets/images/chessboard-sprite.svg"},
|
|
15
15
|
position: "start"
|
|
16
|
-
}, () => {
|
|
17
|
-
assert.equals(chessboard.getPosition(), "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR")
|
|
18
|
-
chessboard.destroy()
|
|
19
16
|
})
|
|
17
|
+
assert.equals(chessboard.getPosition(), "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR")
|
|
18
|
+
chessboard.destroy()
|
|
20
19
|
})
|
|
21
20
|
|
|
22
21
|
it("should set and get the position", () => {
|
|
@@ -48,9 +47,7 @@ describe("TestPosition", () => {
|
|
|
48
47
|
assert.equals(chessboard.getPiece("a1"), "bk")
|
|
49
48
|
chessboard.setPiece("e5", PIECE.wk)
|
|
50
49
|
assert.equals(chessboard.getPiece("e5"), "wk")
|
|
51
|
-
|
|
52
|
-
chessboard.destroy()
|
|
53
|
-
}, 100)
|
|
50
|
+
chessboard.destroy()
|
|
54
51
|
})
|
|
55
52
|
|
|
56
53
|
})
|
package/test/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<title>Test cm-chessboard</title>
|
|
6
6
|
<link rel="stylesheet" href="../examples/styles/examples.css"/>
|
|
7
|
-
<link rel="stylesheet" href="../styles/cm-chessboard.css"/>
|
|
7
|
+
<link rel="stylesheet" href="../assets/styles/cm-chessboard.css"/>
|
|
8
8
|
<style type="text/css">
|
|
9
9
|
.board {
|
|
10
10
|
position: absolute;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"file": "cm-chessboard.css",
|
|
4
|
-
"sources": [
|
|
5
|
-
"cm-chessboard.scss",
|
|
6
|
-
"_cm-chessboard-theme.scss"
|
|
7
|
-
],
|
|
8
|
-
"names": [],
|
|
9
|
-
"mappings": "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"
|
|
10
|
-
}
|