cm-chessboard 7.7.7 → 7.7.10
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/examples/destroy-many-boards.html +12 -5
- package/examples/extensions/persistence-extension.html +27 -0
- package/examples/styles/examples.css +0 -2
- package/examples/styles/examples.css.map +1 -1
- package/examples/styles/examples.scss +0 -4
- package/index.html +4 -1
- package/package.json +1 -1
- package/src/extensions/persistence/Persistence.js +31 -0
- package/src/lib/Svg.js +6 -2
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</head>
|
|
27
27
|
<body>
|
|
28
28
|
<h1><a href="../">cm-chessboard</a></h1>
|
|
29
|
-
<h2>Stress Test: Create and destroy 5,000
|
|
29
|
+
<h2>Stress Test: Create and destroy 5,000 boards // <span id="counter"></span></h2>
|
|
30
30
|
<div id="boards"></div>
|
|
31
31
|
<script type="module">
|
|
32
32
|
import {Chessboard} from "../src/Chessboard.js"
|
|
@@ -43,8 +43,11 @@
|
|
|
43
43
|
style: {pieces: {file: "pieces/staunty.svg"}}
|
|
44
44
|
})
|
|
45
45
|
const chess = new Chess()
|
|
46
|
+
let count = 0;
|
|
46
47
|
for (let i = 0; i < 5000; i++) {
|
|
47
48
|
setTimeout(() => {
|
|
49
|
+
count++
|
|
50
|
+
document.getElementById("counter").innerText = "" + count
|
|
48
51
|
const boardDiv = document.createElement("div")
|
|
49
52
|
boardDiv.setAttribute("class", "board")
|
|
50
53
|
boardsDiv.appendChild(boardDiv)
|
|
@@ -61,11 +64,15 @@
|
|
|
61
64
|
}, 10000)
|
|
62
65
|
}, i * 100)
|
|
63
66
|
}
|
|
67
|
+
|
|
64
68
|
function makeRandomMove() {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
chess.
|
|
69
|
+
if(chess.game_over()) {
|
|
70
|
+
chess.reset()
|
|
71
|
+
}
|
|
72
|
+
const possibleMoves = chess.moves()
|
|
73
|
+
if (possibleMoves.length === 0) return
|
|
74
|
+
const randomIndex = Math.floor(Math.random() * possibleMoves.length)
|
|
75
|
+
chess.move(possibleMoves[randomIndex])
|
|
69
76
|
}
|
|
70
77
|
|
|
71
78
|
</script>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>cm-chessboard</title>
|
|
6
|
+
<meta name="viewport" content="width=device-width, user-scalable=yes, initial-scale=1.0"/>
|
|
7
|
+
<link rel="stylesheet" href="../styles/examples.css"/>
|
|
8
|
+
<link rel="stylesheet" href="../../assets/chessboard.css"/>
|
|
9
|
+
<link rel="stylesheet" href="../../assets/extensions/markers/markers.css"/>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<h1><a href="../../">cm-chessboard</a></h1>
|
|
13
|
+
<h2>Example: Persistence Extension</h2>
|
|
14
|
+
<p>This extension stores the board position in localStorage and automatically loads the board on creation.</p>
|
|
15
|
+
<div class="board" id="board"></div>
|
|
16
|
+
<script type="module">
|
|
17
|
+
import {Chessboard, FEN} from "../../src/Chessboard.js"
|
|
18
|
+
import {Persistence} from "../../src/extensions/persistence/Persistence.js"
|
|
19
|
+
|
|
20
|
+
const board = new Chessboard(document.getElementById("board"), {
|
|
21
|
+
assetsUrl: "../../assets/",
|
|
22
|
+
extensions: [{class: Persistence, props: {initialPosition: FEN.start}}]
|
|
23
|
+
})
|
|
24
|
+
board.enableMoveInput(() => true)
|
|
25
|
+
</script>
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
"examples.scss"
|
|
6
6
|
],
|
|
7
7
|
"names": [],
|
|
8
|
-
"mappings": "AASA,AAAA,IAAI,CAAC;EACH,KAAK,EAPG,IAAI;EAQZ,gBAAgB,EATL,IAAI;EAUf,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,4BAA4B;EACzC,WAAW,EAAE,GAAG;EAChB,SAAS,EATC,IAAI,
|
|
8
|
+
"mappings": "AASA,AAAA,IAAI,CAAC;EACH,KAAK,EAPG,IAAI;EAQZ,gBAAgB,EATL,IAAI;EAUf,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,4BAA4B;EACzC,WAAW,EAAE,GAAG;EAChB,SAAS,EATC,IAAI,GAUf;;AAED,AAAA,CAAC,CAAC;EACA,KAAK,EApBA,OAAO,GA6Bb;EAVD,AAGE,CAHD,CAGG,OAAO,CAAC;IACR,KAAK,EAAE,OAAO,GACf;EALH,AAOE,CAPD,CAOG,KAAK,CAAC;IACN,KAAK,EA1BI,OAAO,GA2BjB;;AAGH,AAAA,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;EACP,UAAU,EAAE,CAAC;EACb,SAAS,EAAE,MAAgB;EAC3B,KAAK,EA9BE,OAAO,GA+Bf;;AAED,AAAA,EAAE,CAAC;EACD,aAAa,EAAE,IAAI,GACpB;;AAED,AAAA,EAAE,CAAC;EACD,aAAa,EAAE,IAAI;EACnB,SAAS,EAAE,MAAgB;EAC3B,KAAK,EAxCE,OAAO,GAyCf;;AAED,AAAA,GAAG,CAAC;EACF,WAAW,EAAE,wBAAwB;EACrC,SAAS,EAAE,GAAG;EACd,gBAAgB,EA7CA,IAAI;EA8CpB,KAAK,EA7CA,IAAI;EA8CT,OAAO,EAAE,GAAG;EACZ,QAAQ,EAAE,IAAI,GACf;;AAED,AAAA,GAAG,AAAA,MAAM,CAAC;EACR,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,KAAK;EAChB,KAAK,EAAE,kBAAkB;EACzB,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,IAAI,GAOpB;EAZD,AAME,GANC,AAAA,MAAM,AAMN,YAAY,CAAC;IACZ,SAAS,EAAE,KAAK,GACjB;EARH,AASE,GATC,AAAA,MAAM,AASN,YAAY,CAAC;IACZ,SAAS,EAAE,KAAK,GACjB;;AAGH,AAAA,SAAS,EAAE,KAAK,CAAC;EACf,OAAO,EAAE,EAAE;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK,GACf;;AAED,AAAA,MAAM,CAAC;EACL,OAAO,EAAE,QAAQ;EACjB,SAAS,EAAE,GAAG;EACd,YAAY,EAAE,IAAI;EAClB,aAAa,EAAE,IAAI;EACnB,gBAAgB,EAAE,IAAI;EACtB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,GAAG;EAClB,MAAM,EAAE,OAAO,GAKhB;EAdD,AAWE,MAXI,CAWF,KAAK,CAAC;IACN,gBAAgB,EAAE,IAAI,GACvB;;AAGH,AAAA,KAAK,CAAA,AAAA,IAAC,CAAD,IAAC,AAAA,EAAW;EACf,SAAS,EAAE,GAAG;EACd,OAAO,EAAE,GAAG;EACZ,aAAa,EAAE,GAAG;EAClB,MAAM,EAAE,IAAI,GACb;;AAED,AAAA,EAAE,CAAC;EACD,OAAO,EAAE,OAAO,GAEjB;;AAED,AAAA,gBAAgB,CAAC;EACf,SAAS,EAAE,KAAK,GACjB"
|
|
9
9
|
}
|
package/index.html
CHANGED
|
@@ -48,8 +48,11 @@ It works, it is cool and it is easy to use. 👍</p>
|
|
|
48
48
|
const interval = setInterval(() => {
|
|
49
49
|
makeRandomMove()
|
|
50
50
|
board.setPosition(chess.fen(), true)
|
|
51
|
-
},
|
|
51
|
+
}, 500)
|
|
52
52
|
function makeRandomMove() {
|
|
53
|
+
if(chess.game_over()) {
|
|
54
|
+
chess.reset()
|
|
55
|
+
}
|
|
53
56
|
const possibleMoves = chess.moves()
|
|
54
57
|
if (possibleMoves.length === 0) {
|
|
55
58
|
clearInterval(interval)
|
package/package.json
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Author and copyright: Stefan Haack (https://shaack.com)
|
|
3
|
+
* Repository: https://github.com/shaack/cm-chessboard
|
|
4
|
+
* License: MIT, see file 'LICENSE'
|
|
5
|
+
*/
|
|
6
|
+
import {Extension, EXTENSION_POINT} from "../../model/Extension.js";
|
|
7
|
+
|
|
8
|
+
export class Persistence extends Extension {
|
|
9
|
+
constructor(chessboard, props) {
|
|
10
|
+
super(chessboard)
|
|
11
|
+
console.warn("The Persistence extension is work in progress, don't use it in production.")
|
|
12
|
+
this.props = props
|
|
13
|
+
this.registerExtensionPoint(EXTENSION_POINT.positionChanged, this.savePosition.bind(this))
|
|
14
|
+
chessboard.initialized.then(() => {
|
|
15
|
+
this.loadPosition()
|
|
16
|
+
})
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
savePosition() {
|
|
20
|
+
localStorage.setItem("chessboard", JSON.stringify(this.chessboard.getPosition()))
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
loadPosition() {
|
|
24
|
+
const position = localStorage.getItem("chessboard")
|
|
25
|
+
if (position) {
|
|
26
|
+
this.chessboard.setPosition(JSON.parse(position))
|
|
27
|
+
} else {
|
|
28
|
+
this.chessboard.setPosition(this.props.initialPosition)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
package/src/lib/Svg.js
CHANGED
|
@@ -24,7 +24,7 @@ export class Svg {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
* Add an Element to
|
|
27
|
+
* Add an Element to an SVG DOM
|
|
28
28
|
* @param parent
|
|
29
29
|
* @param name
|
|
30
30
|
* @param attributes
|
|
@@ -50,10 +50,14 @@ export class Svg {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
|
-
* Remove an
|
|
53
|
+
* Remove an element from an SVG DOM
|
|
54
54
|
* @param element
|
|
55
55
|
*/
|
|
56
56
|
static removeElement(element) {
|
|
57
|
+
if(!element) {
|
|
58
|
+
console.warn("removeElement, element is", element)
|
|
59
|
+
return
|
|
60
|
+
}
|
|
57
61
|
if (element.parentNode) {
|
|
58
62
|
element.parentNode.removeChild(element)
|
|
59
63
|
} else {
|