cm-chessboard 5.2.1 → 5.2.4

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
@@ -72,23 +72,23 @@ Below is the default configuration
72
72
 
73
73
  ```javascript
74
74
  let defaultProps = {
75
- position: "empty", // set as fen, "start" or "empty"
75
+ position: FEN.empty, // set as fen, can use FEN.start or FEN.empty
76
76
  orientation: COLOR.white, // white on bottom
77
77
  responsive: true, // resize the board automatically to the size of the context element
78
78
  animationDuration: 300, // pieces animation duration in milliseconds. Disable all animation with `0`.
79
79
  language: navigator.language.substring(0, 2).toLowerCase(), // supports "de" and "en" for now, used for pieces naming
80
80
  style: {
81
- cssClass: "default", // set the css theme of the board, try "green", "blue" or "chess-club"
82
- showCoordinates: true, // show ranks and files
83
- borderType: BORDER_TYPE.none, // "thin" thin border, "frame" wide border with coordinates in it, "none" no border
84
- aspectRatio: 1, // height/width of the board
85
- moveFromMarker: MARKER_TYPE.frame, // the marker used to mark the start square
86
- moveToMarker: MARKER_TYPE.frame, // the marker used to mark the square where the figure is moving to
81
+ cssClass: "default", // set the css theme of the board, try "green", "blue" or "chess-club"
82
+ showCoordinates: true, // show ranks and files
83
+ borderType: BORDER_TYPE.none, // "thin" thin border, "frame" wide border with coordinates in it, "none" no border
84
+ aspectRatio: 1, // height/width of the board
85
+ moveFromMarker: MARKER_TYPE.frame, // the marker used to mark the start square
86
+ moveToMarker: MARKER_TYPE.frame, // the marker used to mark the square where the figure is moving to
87
87
  },
88
88
  sprite: {
89
- url: "./assets/images/chessboard-sprite.svg", // pieces and markers are stored in a sprite file
90
- size: 40, // the sprite tiles size, defaults to 40x40px
91
- cache: true // cache the sprite
89
+ url: "./assets/images/chessboard-sprite.svg", // pieces and markers are stored in a sprite file
90
+ size: 40, // the sprite tiles size, defaults to 40x40px
91
+ cache: true // cache the sprite
92
92
  },
93
93
  extensions: [ /* {class: ExtensionClass, props: { ... }} */] // add extensions here
94
94
  }
@@ -122,8 +122,7 @@ Move a piece from `squareFrom` to `squareTo`. Returns a **Promise**, which is re
122
122
 
123
123
  ### setPosition(fen, animated = false)
124
124
 
125
- Sets the position as `fen`. Special values are "start", sets the chess start position and
126
- "empty", sets an empty board. Returns a **Promise**, which is resolved, after the animation finished.
125
+ Sets the position as `fen`. Returns a **Promise**, which is resolved, after the animation finished.
127
126
 
128
127
  [Example for **setPosition**](https://shaack.com/projekte/cm-chessboard/examples/pieces-animation.html)
129
128
 
@@ -202,26 +201,24 @@ board.enableMoveInput((event) => {
202
201
 
203
202
  The event has the following **`event.type`**:
204
203
 
205
- - **`INPUT_EVENT_TYPE.moveStart`**: User started the move input, `event.square` contains the coordinates
206
- - **`INPUT_EVENT_TYPE.moveDone`**: User finished the move input, `event.squareFrom` and `event.squareTo` contain the
207
- coordinates
208
- - **`INPUT_EVENT_TYPE.moveCanceled`**: User canceled the move with clicking again on the start square or clicking
209
- outside of the board
204
+ - **`INPUT_EVENT_TYPE.moveInputStarted`**: User started the move input, `event.square` contains the coordinates. Return true or false to validate the start square.
205
+ - **`INPUT_EVENT_TYPE.validateMoveInput`**: User finished the move input, `event.squareFrom` and `event.squareTo` contain the coordinates. Return true or false to validate the move input.
206
+ - **`INPUT_EVENT_TYPE.moveInputCanceled`**: User canceled the move with clicking again on the start square or clicking outside the board.
210
207
 
211
208
  ```javascript
212
209
  chessboard.enableMoveInput((event) => {
213
- switch (event.type) {
214
- case INPUT_EVENT_TYPE.moveStart:
215
- console.log(`moveStart: ${event.square}`)
216
- // return `true`, if input is accepted/valid, `false` aborts the interaction, the piece will not move
217
- return true
218
- case INPUT_EVENT_TYPE.moveDone:
219
- console.log(`moveDone: ${event.squareFrom}-${event.squareTo}`)
220
- // return true, if input is accepted/valid, `false` takes the move back
221
- return true
222
- case INPUT_EVENT_TYPE.moveCanceled:
223
- console.log(`moveCanceled`)
224
- }
210
+ switch (event.type) {
211
+ case INPUT_EVENT_TYPE.moveInputStarted:
212
+ console.log(`moveInputStarted: ${event.square}`)
213
+ // return `true`, if input is accepted/valid, `false` aborts the interaction, the piece will not move
214
+ return true
215
+ case INPUT_EVENT_TYPE.validateMoveInput:
216
+ console.log(`validateMoveInput: ${event.squareFrom}-${event.squareTo}`)
217
+ // return true, if input is accepted/valid, `false` takes the move back
218
+ return true
219
+ case INPUT_EVENT_TYPE.moveInputCanceled:
220
+ console.log(`moveInputCanceled`)
221
+ }
225
222
  }, COLOR.white)
226
223
  ```
227
224
 
@@ -347,11 +344,12 @@ Currently possible extension points are defined in `Extension.js`.
347
344
 
348
345
  ```js
349
346
  export const EXTENSION_POINT = {
350
- positionChanged: "positionChanged", // the positions of the pieces was changed
351
- boardChanged: "boardChanged", // the board (orientation) was changed
352
- moveInputToggled: "moveInputToggled", // move input was enabled or disabled
353
- moveInput: "moveInput", // move started, cancelled or done
354
- destroy: "destroy" // called, before the board is destroyed
347
+ positionChanged: "positionChanged", // the positions of the pieces was changed
348
+ boardChanged: "boardChanged", // the board (orientation) was changed
349
+ moveInputToggled: "moveInputToggled", // move input was enabled or disabled
350
+ moveInput: "moveInput", // move started, to validate or canceled // TODO validation not possible for now, see https://github.com/shaack/cm-chessboard/issues/82
351
+ redrawBoard: "redrawBoard", // called after redrawing the board
352
+ destroy: "destroy" // called, before the board is destroyed
355
353
  }
356
354
  ```
357
355
 
@@ -359,7 +357,7 @@ Enable extensions via the chessboard props.
359
357
 
360
358
  ```js
361
359
  const chessboard = new Chessboard(document.getElementById("board"), {
362
- position: "start",
360
+ position: FEN.start,
363
361
  extensions: // list of used extensions
364
362
  [{
365
363
  class: MyCoolChessboardExtension, // the class of the extension
@@ -397,7 +395,7 @@ example [Accessibility extension](https://shaack.com/projekte/cm-chessboard/exam
397
395
 
398
396
  ```js
399
397
  const chessboard = new Chessboard(document.getElementById("board"), {
400
- position: "start",
398
+ position: FEN.start,
401
399
  sprite: {url: "../assets/images/chessboard-sprite.svg"},
402
400
  // animationDuration: 0, // optional, set to 0 to disable animations
403
401
  style: {
@@ -31,12 +31,13 @@
31
31
  <div id="boards"></div>
32
32
  <script type="module">
33
33
  import {Chessboard} from "../src/cm-chessboard/Chessboard.js"
34
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
34
35
  const boardsDiv = document.getElementById("boards")
35
36
  const boardDiv = document.createElement("div")
36
37
  boardDiv.setAttribute("class", "board1")
37
38
  boardsDiv.appendChild(boardDiv)
38
39
  const largeBoard = new Chessboard(boardDiv, {
39
- position: "start",
40
+ position: FEN.start,
40
41
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
41
42
  })
42
43
  const chess = new Chess()
@@ -21,9 +21,10 @@
21
21
  <div class="board" id="board9"></div>
22
22
  <script type="module">
23
23
  import {Chessboard, BORDER_TYPE} from "../src/cm-chessboard/Chessboard.js"
24
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
24
25
 
25
26
  new Chessboard(document.getElementById("board1"), {
26
- position: "start",
27
+ position: FEN.start,
27
28
  style: {
28
29
  cssClass: "green",
29
30
  borderType: BORDER_TYPE.frame
@@ -31,7 +32,7 @@
31
32
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
32
33
  })
33
34
  new Chessboard(document.getElementById("board2"), {
34
- position: "start",
35
+ position: FEN.start,
35
36
  style: {
36
37
  cssClass: "chessboard-js",
37
38
  borderType: BORDER_TYPE.thin
@@ -39,7 +40,7 @@
39
40
  sprite: {url: "../assets/images/chessboard-sprite.svg", cache: false}
40
41
  })
41
42
  new Chessboard(document.getElementById("board3"), {
42
- position: "start",
43
+ position: FEN.start,
43
44
  style: {
44
45
  cssClass: "chess-club",
45
46
  borderType: BORDER_TYPE.frame
@@ -47,7 +48,7 @@
47
48
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"}
48
49
  })
49
50
  new Chessboard(document.getElementById("board4"), {
50
- position: "start",
51
+ position: FEN.start,
51
52
  style: {
52
53
  cssClass: "blue",
53
54
  borderType: BORDER_TYPE.thin,
@@ -56,14 +57,14 @@
56
57
  sprite: {url: "../assets/images/chessboard-sprite.svg", cache: false}
57
58
  })
58
59
  new Chessboard(document.getElementById("board5"), {
59
- position: "start",
60
+ position: FEN.start,
60
61
  style: {
61
62
  borderType: BORDER_TYPE.none
62
63
  },
63
64
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
64
65
  })
65
66
  new Chessboard(document.getElementById("board6"), {
66
- position: "start",
67
+ position: FEN.start,
67
68
  style: {
68
69
  cssClass: "blue",
69
70
  borderType: BORDER_TYPE.frame
@@ -71,21 +72,21 @@
71
72
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
72
73
  })
73
74
  new Chessboard(document.getElementById("board7"), {
74
- position: "start",
75
+ position: FEN.start,
75
76
  style: {
76
77
  cssClass: "green"
77
78
  },
78
79
  sprite: {url: "../assets/images/chessboard-sprite.svg", cache: false},
79
80
  })
80
81
  new Chessboard(document.getElementById("board8"), {
81
- position: "start",
82
+ position: FEN.start,
82
83
  style: {
83
84
  cssClass: "black-and-white"
84
85
  },
85
86
  sprite: {url: "../assets/images/chessboard-sprite.svg", cache: false},
86
87
  })
87
88
  new Chessboard(document.getElementById("board9"), {
88
- position: "start",
89
+ position: FEN.start,
89
90
  style: {
90
91
  cssClass: "chessboard-js",
91
92
  borderType: BORDER_TYPE.frame
@@ -14,21 +14,21 @@
14
14
  <div class="board" id="board"></div>
15
15
  <pre>
16
16
  const board = new Chessboard(document.getElementById("board"), {
17
- position: "start",
17
+ position: FEN.start,
18
18
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"}
19
19
  })
20
20
 
21
21
  board.enableMoveInput(inputHandler)
22
22
  function inputHandler(event) {
23
23
  switch (event.type) {
24
- case INPUT_EVENT_TYPE.moveStart:
25
- log(`moveStart: ${event.square}`)
24
+ case INPUT_EVENT_TYPE.moveInputStarted:
25
+ log(`moveInputStarted: ${event.square}`)
26
26
  return true
27
- case INPUT_EVENT_TYPE.moveDone:
28
- log(`moveDone: ${event.squareFrom}-${event.squareTo}`)
27
+ case INPUT_EVENT_TYPE.validateMoveInput:
28
+ log(`validateMoveInput: ${event.squareFrom}-${event.squareTo}`)
29
29
  return true
30
- case INPUT_EVENT_TYPE.moveCanceled:
31
- log(`moveCanceled`)
30
+ case INPUT_EVENT_TYPE.moveInputCanceled:
31
+ log(`moveInputCanceled`)
32
32
  }
33
33
  }
34
34
  </pre>
@@ -38,9 +38,10 @@ function inputHandler(event) {
38
38
  <div id="output" style="width: 100%; overflow: hidden"></div>
39
39
  <script type="module">
40
40
  import {INPUT_EVENT_TYPE, Chessboard} from "../src/cm-chessboard/Chessboard.js"
41
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
41
42
 
42
43
  window.board = new Chessboard(document.getElementById("board"), {
43
- position: "start",
44
+ position: FEN.start,
44
45
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"}
45
46
  })
46
47
 
@@ -48,14 +49,14 @@ function inputHandler(event) {
48
49
  function inputHandler(event) {
49
50
  console.log(event)
50
51
  switch (event.type) {
51
- case INPUT_EVENT_TYPE.moveStart:
52
- log(`moveStart: ${event.square}`)
52
+ case INPUT_EVENT_TYPE.moveInputStarted:
53
+ log(`moveInputStarted: ${event.square}`)
53
54
  return true
54
- case INPUT_EVENT_TYPE.moveDone:
55
- log(`moveDone: ${event.squareFrom}-${event.squareTo}`)
55
+ case INPUT_EVENT_TYPE.validateMoveInput:
56
+ log(`validateMoveInput: ${event.squareFrom}-${event.squareTo}`)
56
57
  return true
57
- case INPUT_EVENT_TYPE.moveCanceled:
58
- log(`moveCanceled`)
58
+ case INPUT_EVENT_TYPE.moveInputCanceled:
59
+ log(`moveInputCanceled`)
59
60
  }
60
61
  }
61
62
 
@@ -32,9 +32,10 @@
32
32
  </pre>
33
33
  <script type="module">
34
34
  import {Chessboard, MARKER_TYPE, SQUARE_SELECT_TYPE} from "../src/cm-chessboard/Chessboard.js"
35
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
35
36
 
36
37
  const board1 = new Chessboard(document.getElementById("board1"), {
37
- position: "start",
38
+ position: FEN.start,
38
39
  sprite: {url: "../assets/images/chessboard-sprite.svg", cache: false}
39
40
  })
40
41
  board1.enableSquareSelect((event) => {
@@ -45,10 +45,11 @@ await board.movePiece("d5", "f4")
45
45
  </pre>
46
46
  <script type="module">
47
47
  import {Chessboard, PIECE} from "../src/cm-chessboard/Chessboard.js"
48
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
48
49
 
49
50
  const board = new Chessboard(document.getElementById("board"),
50
51
  {
51
- position: "start",
52
+ position: FEN.start,
52
53
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
53
54
  animationDuration: 500
54
55
  })
@@ -13,15 +13,16 @@
13
13
  <div id="board"></div>
14
14
  <pre>
15
15
  new Chessboard(document.getElementById("board"), {
16
- position: "start",
16
+ position: FEN.start,
17
17
  style: {aspectRatio: 0.9}
18
18
  })
19
19
  </pre>
20
20
  <script type="module">
21
21
  import {Chessboard} from "../src/cm-chessboard/Chessboard.js"
22
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
22
23
 
23
24
  new Chessboard(document.getElementById("board"), {
24
- position: "start",
25
+ position: FEN.start,
25
26
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
26
27
  style: {
27
28
  aspectRatio: 0.9
@@ -29,4 +30,4 @@ new Chessboard(document.getElementById("board"), {
29
30
  })
30
31
  </script>
31
32
  </body>
32
- </html>
33
+ </html>
@@ -15,7 +15,7 @@
15
15
  <br style="clear: both"/>
16
16
  <pre>
17
17
  new Chessboard(document.getElementById("board1"), {
18
- position: "start"
18
+ position: FEN.start
19
19
  })
20
20
  new Chessboard(document.getElementById("board2"), {
21
21
  position: "rn2k1r1/ppp1pp1p/3p2p1/5bn1/P7/2N2B2/1PPPPP2/2BNK1RR w Gkq - 4 11",
@@ -24,9 +24,10 @@ new Chessboard(document.getElementById("board2"), {
24
24
  </pre>
25
25
  <script type="module">
26
26
  import {COLOR, Chessboard} from "../src/cm-chessboard/Chessboard.js"
27
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
27
28
 
28
29
  new Chessboard(document.getElementById("board1"), {
29
- position: "start",
30
+ position: FEN.start,
30
31
  sprite: {url: "../assets/images/chessboard-sprite-staunty.svg"},
31
32
  })
32
33
  new Chessboard(document.getElementById("board2"), {
@@ -36,4 +37,4 @@ new Chessboard(document.getElementById("board2"), {
36
37
  })
37
38
  </script>
38
39
  </body>
39
- </html>
40
+ </html>
@@ -24,13 +24,13 @@ const chess = new Chess()
24
24
  function inputHandler(event) {
25
25
  console.log("event", event)
26
26
  event.chessboard.removeMarkers(MARKER_TYPE.dot)
27
- if (event.type === INPUT_EVENT_TYPE.moveStart) {
27
+ if (event.type === INPUT_EVENT_TYPE.moveInputStarted) {
28
28
  const moves = chess.moves({square: event.square, verbose: true});
29
29
  for (const move of moves) { // draw dots on possible squares
30
30
  event.chessboard.addMarker(MARKER_TYPE.dot, move.to)
31
31
  }
32
32
  return moves.length > 0
33
- } else if (event.type === INPUT_EVENT_TYPE.moveDone) {
33
+ } else if (event.type === INPUT_EVENT_TYPE.validateMoveInput) {
34
34
  const move = {from: event.squareFrom, to: event.squareTo}
35
35
  const result = chess.move(move)
36
36
  if (result) {
@@ -74,13 +74,13 @@ board.enableMoveInput(inputHandler, COLOR.white)
74
74
  function inputHandler(event) {
75
75
  console.log("event", event)
76
76
  event.chessboard.removeMarkers(MARKER_TYPE.dot)
77
- if (event.type === INPUT_EVENT_TYPE.moveStart) {
77
+ if (event.type === INPUT_EVENT_TYPE.moveInputStarted) {
78
78
  const moves = chess.moves({square: event.square, verbose: true});
79
79
  for (const move of moves) { // draw dots on possible squares
80
80
  event.chessboard.addMarker(MARKER_TYPE.dot, move.to)
81
81
  }
82
82
  return moves.length > 0
83
- } else if (event.type === INPUT_EVENT_TYPE.moveDone) {
83
+ } else if (event.type === INPUT_EVENT_TYPE.validateMoveInput) {
84
84
  const move = {from: event.squareFrom, to: event.squareTo}
85
85
  const result = chess.move(move)
86
86
  if (result) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cm-chessboard",
3
- "version": "5.2.1",
3
+ "version": "5.2.4",
4
4
  "description": "A JavaScript chessboard which is lightweight, ES6 module based, responsive, SVG rendered and without dependencies.",
5
5
  "keywords": [
6
6
  "chess",
@@ -15,9 +15,12 @@ export const COLOR = {
15
15
  black: "b"
16
16
  }
17
17
  export const INPUT_EVENT_TYPE = {
18
- moveStart: "moveStart",
19
- moveDone: "moveDone",
20
- moveCanceled: "moveCanceled"
18
+ moveStart: "moveInputStarted", // TODO deprecated 2022-08-24, use `moveInputStarted`
19
+ moveInputStarted: "moveInputStarted",
20
+ moveDone: "validateMoveInput", // TODO deprecated 2022-08-24, use `validateMoveInput` https://github.com/shaack/cm-chessboard/issues/83
21
+ validateMoveInput: "validateMoveInput",
22
+ moveCanceled: "moveInputCanceled", // TODO deprecated 2022-08-24, use `moveInputCanceled`
23
+ moveInputCanceled: "moveInputCanceled",
21
24
  }
22
25
  export const SQUARE_SELECT_TYPE = {
23
26
  primary: "primary",
@@ -49,7 +52,7 @@ export class Chessboard {
49
52
  this.id = (Math.random() + 1).toString(36).substring(2, 8)
50
53
  this.extensions = []
51
54
  let defaultProps = {
52
- position: FEN.empty, // set as fen, can use FEN.start or FEN.empty // TODO remove those strings in favour of FEN.start and FEN.empty
55
+ position: FEN.empty, // set as fen, can use FEN.start or FEN.empty
53
56
  orientation: COLOR.white, // white on bottom
54
57
  responsive: true, // resize the board automatically to the size of the context element
55
58
  animationDuration: 300, // pieces animation duration in milliseconds. Disable all animation with `0`.
@@ -65,7 +65,7 @@ export class Accessibility extends Extension {
65
65
  evt.preventDefault()
66
66
  if (this.chessboard.view.moveInputCallback({
67
67
  chessboard: this.chessboard,
68
- type: INPUT_EVENT_TYPE.moveDone,
68
+ type: INPUT_EVENT_TYPE.validateMoveInput,
69
69
  squareFrom: this.inputFrom.value,
70
70
  squareTo: this.inputTo.value
71
71
  })) {
@@ -8,10 +8,10 @@ export const EXTENSION_POINT = {
8
8
  positionChanged: "positionChanged", // the positions of the pieces was changed
9
9
  boardChanged: "boardChanged", // the board (orientation) was changed
10
10
  moveInputToggled: "moveInputToggled", // move input was enabled or disabled
11
- moveInput: "moveInput", // move started, cancelled or done
11
+ moveInput: "moveInput", // move started, to validate or canceled // TODO validation not possible for now, see https://github.com/shaack/cm-chessboard/issues/82
12
12
  moveInputStateChanged: "moveInput", // TODO deprecated, use `moveInput`
13
- destroy: "destroy", // called, before the board is destroyed
14
- redrawBoard: "redrawBoard" // called while redrawing the board
13
+ redrawBoard: "redrawBoard", // called after redrawing the board
14
+ destroy: "destroy" // called, before the board is destroyed
15
15
  }
16
16
 
17
17
  export class Extension {
@@ -17,14 +17,14 @@ export class Position {
17
17
  this.setFen(fen)
18
18
  }
19
19
 
20
- setFen(fen = FEN_EMPTY_POSITION) {
20
+ setFen(fen = FEN.empty) {
21
21
  let fenNormalized
22
22
  if (fen === "start") {
23
23
  console.warn("setting the position with the strings 'start' or 'empty' is deprecated, use FEN.start or FEN.empty")
24
- fenNormalized = FEN_START_POSITION
24
+ fenNormalized = FEN.start
25
25
  } else if (fen === "empty" || fen === undefined) {
26
26
  console.warn("setting the position with the strings 'start' or 'empty' is deprecated, use FEN.start or FEN.empty")
27
- fenNormalized = FEN_EMPTY_POSITION
27
+ fenNormalized = FEN.empty
28
28
  } else {
29
29
  fenNormalized = fen
30
30
  }
@@ -53,9 +53,9 @@ export class ChessboardView {
53
53
  constructor(chessboard) {
54
54
  this.chessboard = chessboard
55
55
  this.moveInput = new VisualMoveInput(this,
56
- this.moveStartCallback.bind(this),
57
- this.moveDoneCallback.bind(this),
58
- this.moveCanceledCallback.bind(this)
56
+ this.moveInputStartedCallback.bind(this),
57
+ this.validateMoveInputCallback.bind(this),
58
+ this.moveInputCanceledCallback.bind(this)
59
59
  )
60
60
  if (chessboard.props.sprite.cache) {
61
61
  this.cacheSpriteToDiv("chessboardSpriteCache", this.chessboard.props.sprite.url)
@@ -391,13 +391,13 @@ export class ChessboardView {
391
391
 
392
392
  // callbacks //
393
393
 
394
- moveStartCallback(square) {
394
+ moveInputStartedCallback(square) {
395
395
  const data = {
396
396
  chessboard: this.chessboard,
397
- type: INPUT_EVENT_TYPE.moveStart,
397
+ type: INPUT_EVENT_TYPE.moveInputStarted,
398
398
  square: square
399
399
  }
400
- this.chessboard.state.invokeExtensionPoints(EXTENSION_POINT.moveInput, data)
400
+ this.chessboard.state.invokeExtensionPoints(EXTENSION_POINT.moveInput, data) // TODO use the return value of this EP
401
401
  if (this.moveInputCallback) {
402
402
  return this.moveInputCallback(data)
403
403
  } else {
@@ -405,14 +405,14 @@ export class ChessboardView {
405
405
  }
406
406
  }
407
407
 
408
- moveDoneCallback(squareFrom, squareTo) {
408
+ validateMoveInputCallback(squareFrom, squareTo) {
409
409
  const data = {
410
410
  chessboard: this.chessboard,
411
- type: INPUT_EVENT_TYPE.moveDone,
411
+ type: INPUT_EVENT_TYPE.validateMoveInput,
412
412
  squareFrom: squareFrom,
413
413
  squareTo: squareTo
414
414
  }
415
- this.chessboard.state.invokeExtensionPoints(EXTENSION_POINT.moveInput, data)
415
+ this.chessboard.state.invokeExtensionPoints(EXTENSION_POINT.moveInput, data) // TODO use the return value of this EP
416
416
  if (this.moveInputCallback) {
417
417
  return this.moveInputCallback(data)
418
418
  } else {
@@ -420,10 +420,10 @@ export class ChessboardView {
420
420
  }
421
421
  }
422
422
 
423
- moveCanceledCallback(reason, squareFrom, squareTo) {
423
+ moveInputCanceledCallback(reason, squareFrom, squareTo) {
424
424
  const data = {
425
425
  chessboard: this.chessboard,
426
- type: INPUT_EVENT_TYPE.moveCanceled,
426
+ type: INPUT_EVENT_TYPE.moveInputCanceled,
427
427
  reason: reason,
428
428
  squareFrom: squareFrom,
429
429
  squareTo: squareTo
@@ -29,23 +29,23 @@ const DRAG_THRESHOLD = 4
29
29
 
30
30
  export class VisualMoveInput {
31
31
 
32
- constructor(view, moveStartCallback, moveDoneCallback, moveCanceledCallback) {
32
+ constructor(view, moveInputStartedCallback, validateMoveInputCallback, moveInputCanceledCallback) {
33
33
  this.view = view
34
34
  this.chessboard = view.chessboard
35
- this.moveStartCallback = (square) => {
36
- const result = moveStartCallback(square)
35
+ this.moveInputStartedCallback = (square) => {
36
+ const result = moveInputStartedCallback(square)
37
37
  if(result) {
38
38
  this.chessboard.state.moveInputProcess = createTask()
39
39
  }
40
40
  return result
41
41
  }
42
- this.moveDoneCallback = (fromSquare, toSquare) => {
43
- const result = moveDoneCallback(fromSquare, toSquare)
42
+ this.validateMoveInputCallback = (fromSquare, toSquare) => {
43
+ const result = validateMoveInputCallback(fromSquare, toSquare)
44
44
  this.chessboard.state.moveInputProcess.resolve(result)
45
45
  return result
46
46
  }
47
- this.moveCanceledCallback = (reason, fromSquare, toSquare) => {
48
- moveCanceledCallback(reason, fromSquare, toSquare)
47
+ this.moveInputCanceledCallback = (reason, fromSquare, toSquare) => {
48
+ moveInputCanceledCallback(reason, fromSquare, toSquare)
49
49
  this.chessboard.state.moveInputProcess.resolve()
50
50
  }
51
51
  this.setMoveInputState(STATE.waitForInputStart)
@@ -151,7 +151,7 @@ export class VisualMoveInput {
151
151
  throw new Error("moveInputState")
152
152
  }
153
153
  this.toSquare = params.square
154
- if (this.toSquare && this.moveDoneCallback(this.fromSquare, this.toSquare)) {
154
+ if (this.toSquare && this.validateMoveInputCallback(this.fromSquare, this.toSquare)) {
155
155
  if (prevState === STATE.clickTo) {
156
156
  this.chessboard.movePiece(this.fromSquare, this.toSquare, true).then(() => {
157
157
  this.setMoveInputState(STATE.reset)
@@ -246,7 +246,7 @@ export class VisualMoveInput {
246
246
  } else if (e.type === "touchstart") {
247
247
  point = {x: e.touches[0].clientX, y: e.touches[0].clientY}
248
248
  }
249
- if (this.moveInputState === STATE.waitForInputStart && pieceName && this.moveStartCallback(square)) {
249
+ if (this.moveInputState === STATE.waitForInputStart && pieceName && this.moveInputStartedCallback(square)) {
250
250
  this.setMoveInputState(STATE.pieceClickedThreshold, {
251
251
  square: square,
252
252
  piece: pieceName,
@@ -267,8 +267,8 @@ export class VisualMoveInput {
267
267
  const startPieceName = this.chessboard.getPiece(this.fromSquare)
268
268
  const startPieceColor = startPieceName ? startPieceName.substring(0, 1) : undefined
269
269
  if (color && startPieceColor === pieceColor) {
270
- this.moveCanceledCallback(MOVE_CANCELED_REASON.clickedAnotherPiece, this.fromSquare, square)
271
- if (this.moveStartCallback(square)) {
270
+ this.moveInputCanceledCallback(MOVE_CANCELED_REASON.clickedAnotherPiece, this.fromSquare, square)
271
+ if (this.moveInputStartedCallback(square)) {
272
272
  this.setMoveInputState(STATE.pieceClickedThreshold, {
273
273
  square: square,
274
274
  piece: pieceName,
@@ -352,7 +352,7 @@ export class VisualMoveInput {
352
352
  if (this.moveInputState === STATE.clickDragTo) {
353
353
  this.chessboard.state.position.setPiece(this.fromSquare, this.movedPiece)
354
354
  this.view.setPieceVisibility(this.fromSquare)
355
- this.moveCanceledCallback(MOVE_CANCELED_REASON.draggedBack, square, square)
355
+ this.moveInputCanceledCallback(MOVE_CANCELED_REASON.draggedBack, square, square)
356
356
  this.setMoveInputState(STATE.reset)
357
357
  } else {
358
358
  this.setMoveInputState(STATE.clickTo, {square: square})
@@ -364,13 +364,13 @@ export class VisualMoveInput {
364
364
  this.setMoveInputState(STATE.clickTo, {square: square})
365
365
  } else if (this.moveInputState === STATE.secondClickThreshold) {
366
366
  this.setMoveInputState(STATE.reset)
367
- this.moveCanceledCallback(MOVE_CANCELED_REASON.secondClick, square, square)
367
+ this.moveInputCanceledCallback(MOVE_CANCELED_REASON.secondClick, square, square)
368
368
  }
369
369
  } else {
370
370
  this.view.redrawPieces()
371
371
  const moveStartSquare = this.fromSquare
372
372
  this.setMoveInputState(STATE.reset)
373
- this.moveCanceledCallback(MOVE_CANCELED_REASON.movedOutOfBoard, moveStartSquare, undefined)
373
+ this.moveInputCanceledCallback(MOVE_CANCELED_REASON.movedOutOfBoard, moveStartSquare, undefined)
374
374
  }
375
375
  } else {
376
376
  this.view.redrawPieces()
package/test/TestBoard.js CHANGED
@@ -6,6 +6,7 @@
6
6
 
7
7
  import {describe, it, assert} from "../node_modules/teevi/src/teevi.js"
8
8
  import {Chessboard} from "../src/cm-chessboard/Chessboard.js"
9
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
9
10
 
10
11
  describe("TestBoard", () => {
11
12
 
@@ -13,7 +14,7 @@ describe("TestBoard", () => {
13
14
  it("should create and immediately destroy a board without failure", () => {
14
15
  const chessboard = new Chessboard(document.getElementById("TestBoard"), {
15
16
  sprite: {url: "../assets/images/chessboard-sprite.svg"},
16
- position: "start"
17
+ position: FEN.start
17
18
  })
18
19
  chessboard.destroy()
19
20
  })
@@ -21,7 +22,7 @@ describe("TestBoard", () => {
21
22
  it("should create and destroy a board", () => {
22
23
  const chessboard = new Chessboard(document.getElementById("TestBoard"), {
23
24
  sprite: {url: "../assets/images/chessboard-sprite.svg"},
24
- position: "start"
25
+ position: FEN.start
25
26
  })
26
27
  assert.equal(chessboard.view.context.childNodes.length, 1)
27
28
  chessboard.destroy()
@@ -6,13 +6,14 @@
6
6
 
7
7
  import {describe, it, assert} from "../node_modules/teevi/src/teevi.js"
8
8
  import {PIECE, Chessboard} from "../src/cm-chessboard/Chessboard.js"
9
+ import {FEN} from "../src/cm-chessboard/model/Position.js"
9
10
 
10
11
  describe("TestChessboard", () => {
11
12
 
12
13
  it("should create and destroy a chessboard", () => {
13
14
  const chessboard = new Chessboard(document.getElementById("TestPosition"), {
14
15
  sprite: {url: "../assets/images/chessboard-sprite.svg"},
15
- position: "start"
16
+ position: FEN.start
16
17
  })
17
18
  assert.equal(chessboard.getPosition(), "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR")
18
19
  chessboard.destroy()
@@ -30,7 +31,7 @@ describe("TestChessboard", () => {
30
31
  it("should get pieces on squares", () => {
31
32
  const chessboard = new Chessboard(document.getElementById("TestPosition"), {
32
33
  sprite: {url: "../assets/images/chessboard-sprite.svg"},
33
- position: "start"
34
+ position: FEN.start
34
35
  })
35
36
  assert.equal(chessboard.getPiece("d1"), "wq")
36
37
  assert.equal(chessboard.getPiece("d8"), "bq")
@@ -40,7 +41,6 @@ describe("TestChessboard", () => {
40
41
 
41
42
  it("should set pieces on squares", () => {
42
43
  const chessboard = new Chessboard(document.getElementById("TestPosition"), {
43
- position: "empty",
44
44
  sprite: {url: "../assets/images/chessboard-sprite.svg"},
45
45
  })
46
46
  chessboard.setPiece("a1", PIECE.bk)
@@ -11,8 +11,7 @@ describe("TestMarkers", () => {
11
11
 
12
12
  it("should set and get markers", () => {
13
13
  const chessboard = new Chessboard(document.getElementById("TestMarkers"), {
14
- sprite: {url: "../assets/images/chessboard-sprite.svg"},
15
- position: "empty"
14
+ sprite: {url: "../assets/images/chessboard-sprite.svg"}
16
15
  })
17
16
  chessboard.addMarker(MARKER_TYPE.square, "e5")
18
17
  chessboard.addMarker(MARKER_TYPE.frame, "b6")