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 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
- moveMarker: MARKER_TYPE.frame // the marker used for moves
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** which will be resolved, after the Animation has finished.
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: "emphasize", slice: "markerSquare"})`
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 "emphasize" and "danger".
279
+ These are the css styles of the markers "markerSquare" and "markerCircleRed".
273
280
 
274
281
  ```css
275
- marker.emphasize {
282
+ marker.markerSquare {
276
283
  fill: black;
277
- opacity: 0.4;
284
+ opacity: 0.11;
278
285
  }
279
- marker.danger {
280
- stroke: #cc0000;
286
+ marker.markerCircleRed {
287
+ stroke: #aa0000;
281
288
  stroke-width: 3px;
282
- opacity: 0.5;
289
+ opacity: 0.4;
283
290
  }
284
291
  ```
285
292
 
@@ -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
- &.markerFrame {
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>&lt;button onclick="window.board.setPosition('rn2k1r1/ppp1pp1p/3p2p1/5bn1/P7/2N2B2/1PPPPP2/2BNK1RR')"&gt;Position 3&lt;/button&gt;</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: {moveMarker: MARKER_TYPE.square, hoverMarker: undefined},
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
- for (const move of moves) {
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: {moveMarker: MARKER_TYPE.square, hoverMarker: undefined},
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="./styles/cm-chessboard.css"/>
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cm-chessboard",
3
- "version": "3.14.2",
3
+ "version": "3.16.0",
4
4
  "description": "A JavaScript chessboard which is lightweight, ES6 module based, responsive, SVG rendered and without dependencies.",
5
5
  "keywords": [
6
6
  "chess",
@@ -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: "markerFrame", slice: "markerFrame"},
30
- square: {class: "markerSquare", slice: "markerSquare"},
31
- dot: {class: "markerDot", slice: "markerDot"},
32
- circle: {class: "markerCircle", slice: "markerCircle"}
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
- moveMarker: MARKER_TYPE.frame, // the marker used for moves
57
- hoverMarker: MARKER_TYPE.frame // the marker used for hovering, when moving
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
- clickedAnother: "clickedAnother"
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.clickedAnother, index)
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.moveMarker) {
369
- this.chessboard.state.removeMarkers(undefined, this.chessboard.props.style.moveMarker)
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.hoverMarker) {
372
- this.chessboard.state.removeMarkers(undefined, this.chessboard.props.style.hoverMarker)
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.moveMarker) {
375
+ if (this.chessboard.props.style.moveFromMarker) {
375
376
  if (this.startIndex) {
376
- this.chessboard.state.addMarker(this.startIndex, this.chessboard.props.style.moveMarker)
377
+ this.chessboard.state.addMarker(this.startIndex, this.chessboard.props.style.moveFromMarker)
377
378
  }
378
379
  }
379
- if (this.chessboard.props.style.hoverMarker) {
380
+ if (this.chessboard.props.style.moveToMarker) {
380
381
  if (this.endIndex) {
381
- this.chessboard.state.addMarker(this.endIndex, this.chessboard.props.style.hoverMarker)
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(undefined)
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 = undefined
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, index) {
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
- square: index ? SQUARE_COORDINATES[index] : undefined
415
+ squareFrom: SQUARE_COORDINATES[fromIndex],
416
+ squareTo: toIndex ? SQUARE_COORDINATES[toIndex] : undefined
416
417
  })
417
418
  }
418
419
  }
@@ -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
- setTimeout(() => {
21
- assert.equals(chessboard.getMarkers().length,3)
22
- const markersE5 = chessboard.getMarkers("e5")
23
- assert.equals(markersE5.length, 1)
24
- assert.equals(markersE5[0].square, "e5")
25
- assert.equals(markersE5[0].type.slice, "markerSquare")
26
- assert.equals(chessboard.getMarkers(undefined, MARKER_TYPE.square).length, 1)
27
- assert.equals(chessboard.getMarkers("a4").length, 0)
28
- assert.equals(chessboard.getMarkers(undefined, MARKER_TYPE.frame).length, 2)
29
- assert.equals(chessboard.getMarkers("b6", MARKER_TYPE.frame).length, 1)
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
  })
@@ -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
- setTimeout(() => {
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
- }