cm-chessboard 7.3.7 → 7.3.8
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/assets/chessboard.css +9 -9
- package/assets/chessboard.css.map +1 -1
- package/assets/chessboard.scss +9 -9
- package/examples/extensions/accessibility-extension.html +1 -6
- package/examples/extensions/promotion-dialog-extension.html +0 -5
- package/examples/validate-moves.html +0 -2
- package/package.json +1 -1
- package/src/cm-chessboard/extensions/accessibility/Accessibility.js +137 -113
- package/src/cm-chessboard/lib/Utils.js +6 -0
package/assets/chessboard.css
CHANGED
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
.cm-chessboard-content .list-inline-item:not(:last-child) {
|
|
23
23
|
margin-right: 1rem; }
|
|
24
24
|
|
|
25
|
-
.cm-visually-hidden {
|
|
26
|
-
width: 1px
|
|
27
|
-
height: 1px
|
|
28
|
-
padding: 0
|
|
29
|
-
margin: -1px
|
|
30
|
-
overflow: hidden
|
|
31
|
-
clip: rect(0, 0, 0, 0)
|
|
32
|
-
white-space: nowrap
|
|
33
|
-
border: 0
|
|
25
|
+
.cm-chessboard-accessibility.visually-hidden {
|
|
26
|
+
width: 1px;
|
|
27
|
+
height: 1px;
|
|
28
|
+
padding: 0;
|
|
29
|
+
margin: -1px;
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
clip: rect(0, 0, 0, 0);
|
|
32
|
+
white-space: nowrap;
|
|
33
|
+
border: 0; }
|
|
34
34
|
|
|
35
35
|
.cm-chessboard.default .board .square.white {
|
|
36
36
|
fill: #ecdab9; }
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
"_chessboard-theme.scss"
|
|
7
7
|
],
|
|
8
8
|
"names": [],
|
|
9
|
-
"mappings": "AAGA,AAIM,cAJQ,CAEZ,MAAM,AACH,cAAc,CACb,OAAO,CAAC;EACN,MAAM,EAAE,OAAO,GAChB;;AANP,AAUE,cAVY,CAUZ,OAAO,CAAC;EACN,cAAc,EAAE,IAAI,GACrB;;AAGH,AACE,sBADoB,CACpB,YAAY,CAAC;EACX,YAAY,EAAE,CAAC;EACf,UAAU,EAAE,IAAI,GACjB;;AAJH,AAME,sBANoB,CAMpB,iBAAiB,CAAC;EAChB,OAAO,EAAE,YAAY,GAKtB;EAZH,AASI,sBATkB,CAMpB,iBAAiB,CAGd,GAAK,EAAC,UAAU,EAAE;IACjB,YAAY,EAAE,IAAI,GACnB;;AAIL,AAEE,sBAFoB,CAEpB,YAAY,CAAC;EACX,YAAY,EAAE,CAAC;EACf,UAAU,EAAE,IAAI,GACjB;;AALH,AAOE,sBAPoB,CAOpB,iBAAiB,CAAC;EAChB,OAAO,EAAE,YAAY,GAKtB;EAbH,AAUI,sBAVkB,CAOpB,iBAAiB,CAGd,GAAK,EAAC,UAAU,EAAE;IACjB,YAAY,EAAE,IAAI,GACnB;;AAIL,AAAA,
|
|
9
|
+
"mappings": "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"
|
|
10
10
|
}
|
package/assets/chessboard.scss
CHANGED
|
@@ -47,15 +47,15 @@
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
.cm-visually-hidden {
|
|
51
|
-
width: 1px
|
|
52
|
-
height: 1px
|
|
53
|
-
padding: 0
|
|
54
|
-
margin: -1px
|
|
55
|
-
overflow: hidden
|
|
56
|
-
clip: rect(0, 0, 0, 0)
|
|
57
|
-
white-space: nowrap
|
|
58
|
-
border: 0
|
|
50
|
+
.cm-chessboard-accessibility.visually-hidden {
|
|
51
|
+
width: 1px;
|
|
52
|
+
height: 1px;
|
|
53
|
+
padding: 0;
|
|
54
|
+
margin: -1px;
|
|
55
|
+
overflow: hidden;
|
|
56
|
+
clip: rect(0, 0, 0, 0);
|
|
57
|
+
white-space: nowrap;
|
|
58
|
+
border: 0;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// define themes
|
|
@@ -62,12 +62,7 @@
|
|
|
62
62
|
chessboard.setOrientation(chessboard.getOrientation() === 'w' ? 'b' : 'w')
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
chessboard.enableMoveInput(
|
|
66
|
-
|
|
67
|
-
function inputHandler(event) {
|
|
68
|
-
console.log(event)
|
|
69
|
-
return true
|
|
70
|
-
}
|
|
65
|
+
chessboard.enableMoveInput(() => true)
|
|
71
66
|
|
|
72
67
|
</script>
|
|
73
68
|
</body>
|
|
@@ -48,11 +48,6 @@
|
|
|
48
48
|
}
|
|
49
49
|
return true
|
|
50
50
|
})
|
|
51
|
-
/*
|
|
52
|
-
chessboard.showPromotionDialog("c8", COLOR.white, (event) => {
|
|
53
|
-
chessboard.setPiece(event.square, event.piece, true)
|
|
54
|
-
})
|
|
55
|
-
*/
|
|
56
51
|
window.switchOrientation = function () {
|
|
57
52
|
chessboard.setOrientation(chessboard.getOrientation() === 'w' ? 'b' : 'w')
|
|
58
53
|
}
|
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
<h2>Example: Input enabled, move validation with chess.js</h2>
|
|
15
15
|
<p>Input enabled for white. <a href="https://github.com/jhlywa/chess.js">chess.js</a> does the validation and answers
|
|
16
16
|
with random moves.</p>
|
|
17
|
-
<h2 class="cm-visually-hidden">The chessboard widget</h2>
|
|
18
17
|
<div class="board board-large" id="board"></div>
|
|
19
|
-
<h2 class="cm-visually-hidden">The Sourcecode of the example</h2>
|
|
20
18
|
<div id="output"></div>
|
|
21
19
|
<!--suppress JSUnresolvedFunction -->
|
|
22
20
|
<script type="module">
|
package/package.json
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
import {Extension, EXTENSION_POINT} from "../../model/Extension.js"
|
|
7
7
|
import {COLOR, INPUT_EVENT_TYPE} from "../../Chessboard.js"
|
|
8
8
|
import {piecesTranslations, renderPieceTitle} from "../../lib/I18n.js"
|
|
9
|
+
import {Utils} from "../../lib/Utils.js"
|
|
9
10
|
|
|
10
|
-
const
|
|
11
|
+
const translations = {
|
|
11
12
|
de: {
|
|
12
13
|
chessboard: "Schachbrett",
|
|
13
14
|
pieces_lists: "Figurenlisten",
|
|
@@ -37,119 +38,57 @@ const hlTranslations = {
|
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
export class Accessibility extends Extension {
|
|
40
|
-
|
|
41
41
|
constructor(chessboard, props) {
|
|
42
42
|
super(chessboard, props)
|
|
43
43
|
this.props = {
|
|
44
44
|
brailleNotationInAlt: true, // show the braille notation of the position in the alt attribute of the SVG image
|
|
45
|
-
boardAsTable: true, // display the board additionally as HTML table
|
|
46
45
|
movePieceForm: true, // display a form to move a piece (from, to, move)
|
|
46
|
+
boardAsTable: true, // display the board additionally as HTML table
|
|
47
47
|
piecesAsList: true, // display the pieces additionally as List
|
|
48
48
|
visuallyHidden: true // hide all those extra outputs visually but keep them accessible for screen readers and braille displays
|
|
49
49
|
}
|
|
50
50
|
Object.assign(this.props, props)
|
|
51
51
|
this.lang = chessboard.props.language
|
|
52
|
-
this.
|
|
53
|
-
this.t =
|
|
54
|
-
this.
|
|
55
|
-
if
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.form = this.movePieceFormContainer.querySelector("form")
|
|
62
|
-
this.inputFrom = this.form.querySelector(".input-from")
|
|
63
|
-
this.inputTo = this.form.querySelector(".input-to")
|
|
64
|
-
this.moveButton = this.form.querySelector(".button-move")
|
|
65
|
-
if (this.props.visuallyHidden) {
|
|
66
|
-
this.movePieceFormContainer.classList.add("cm-visually-hidden")
|
|
67
|
-
}
|
|
68
|
-
this.form.addEventListener("submit", (evt) => {
|
|
69
|
-
evt.preventDefault()
|
|
70
|
-
if (this.chessboard.view.moveInputCallback({
|
|
71
|
-
chessboard: this.chessboard,
|
|
72
|
-
type: INPUT_EVENT_TYPE.validateMoveInput,
|
|
73
|
-
squareFrom: this.inputFrom.value,
|
|
74
|
-
squareTo: this.inputTo.value
|
|
75
|
-
})) {
|
|
76
|
-
this.chessboard.movePiece(this.inputFrom.value, this.inputTo.value,
|
|
77
|
-
true).then(() => {
|
|
78
|
-
this.inputFrom.value = ""
|
|
79
|
-
this.inputTo.value = ""
|
|
80
|
-
})
|
|
81
|
-
}
|
|
82
|
-
})
|
|
83
|
-
this.chessboard.context.appendChild(this.movePieceFormContainer)
|
|
84
|
-
}
|
|
85
|
-
if (this.props.boardAsTable) {
|
|
86
|
-
this.boardAsTableContainer = this.createElement(`<div><h3 id="hl_table_${this.chessboard.id}">${this.th.board_as_table}</h3><div class="table"></div></div>`)
|
|
87
|
-
this.boardAsTable = this.boardAsTableContainer.querySelector(".table")
|
|
88
|
-
this.chessboard.context.appendChild(this.boardAsTableContainer)
|
|
89
|
-
if (this.props.visuallyHidden) {
|
|
90
|
-
this.boardAsTableContainer.classList.add("cm-visually-hidden")
|
|
52
|
+
this.tPieces = piecesTranslations[this.lang]
|
|
53
|
+
this.t = translations[this.lang]
|
|
54
|
+
this.components = []
|
|
55
|
+
if(this.props.movePieceForm || this.props.boardAsTable || this.props.piecesAsList) {
|
|
56
|
+
const container = document.createElement("div")
|
|
57
|
+
container.classList.add("cm-chessboard-accessibility")
|
|
58
|
+
this.chessboard.context.appendChild(container)
|
|
59
|
+
if(this.props.visuallyHidden) {
|
|
60
|
+
container.classList.add("visually-hidden")
|
|
91
61
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
this.piecesListContainer = this.createElement(`<div><h3 id="hl_lists_${this.chessboard.id}">${this.th.pieces_lists}</h3><div class="list"></div></div>`)
|
|
95
|
-
this.piecesList = this.piecesListContainer.querySelector(".list")
|
|
96
|
-
this.chessboard.context.appendChild(this.piecesListContainer)
|
|
97
|
-
if (this.props.visuallyHidden) {
|
|
98
|
-
this.piecesListContainer.classList.add("cm-visually-hidden")
|
|
62
|
+
if (this.props.movePieceForm) {
|
|
63
|
+
this.components.push(new MovePieceForm(container, this))
|
|
99
64
|
}
|
|
100
|
-
}
|
|
101
|
-
this.registerExtensionPoint(EXTENSION_POINT.moveInput, () => {
|
|
102
|
-
this.updateFormInputs()
|
|
103
|
-
})
|
|
104
|
-
this.registerExtensionPoint(EXTENSION_POINT.moveInputToggled, () => {
|
|
105
|
-
this.updateFormInputs()
|
|
106
|
-
})
|
|
107
|
-
this.registerExtensionPoint(EXTENSION_POINT.positionChanged, () => {
|
|
108
|
-
if(this.chessboard.state) { // not destroyed
|
|
109
|
-
this.redrawPositionInAltAttribute()
|
|
110
|
-
if (this.props.boardAsTable) {
|
|
111
|
-
this.redrawBoardAsTable()
|
|
112
|
-
}
|
|
113
|
-
if (this.props.piecesAsList) {
|
|
114
|
-
this.redrawPiecesLists()
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
})
|
|
118
|
-
this.registerExtensionPoint(EXTENSION_POINT.boardChanged, () => {
|
|
119
|
-
console.log("EXTENSION_POINT.boardChanged")
|
|
120
65
|
if (this.props.boardAsTable) {
|
|
121
|
-
this.
|
|
66
|
+
this.components.push(new BoardAsTable(container, this))
|
|
67
|
+
}
|
|
68
|
+
if (this.props.piecesAsList) {
|
|
69
|
+
this.components.push(new PiecesAsList(container, this))
|
|
122
70
|
}
|
|
123
|
-
})
|
|
124
|
-
this.redrawPositionInAltAttribute()
|
|
125
|
-
if (this.props.boardAsTable) {
|
|
126
|
-
this.redrawBoardAsTable()
|
|
127
71
|
}
|
|
128
|
-
if (this.props.
|
|
129
|
-
this.
|
|
72
|
+
if (this.props.brailleNotationInAlt) {
|
|
73
|
+
this.components.push(new BrailleNotationInAlt(this))
|
|
130
74
|
}
|
|
131
75
|
}
|
|
76
|
+
}
|
|
132
77
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
} else {
|
|
140
|
-
this.inputFrom.disabled = true
|
|
141
|
-
this.inputTo.disabled = true
|
|
142
|
-
this.moveButton.disabled = true
|
|
143
|
-
}
|
|
144
|
-
}
|
|
78
|
+
class BrailleNotationInAlt {
|
|
79
|
+
constructor(extension) {
|
|
80
|
+
this.extension = extension
|
|
81
|
+
extension.registerExtensionPoint(EXTENSION_POINT.positionChanged, () => {
|
|
82
|
+
this.redraw()
|
|
83
|
+
})
|
|
145
84
|
}
|
|
146
85
|
|
|
147
|
-
|
|
148
|
-
const pieces = this.chessboard.state.position.getPieces()
|
|
149
|
-
let listW = piecesTranslations[this.lang].colors.w.toUpperCase() + ":"
|
|
150
|
-
let listB = piecesTranslations[this.lang].colors.b.toUpperCase() + ":"
|
|
86
|
+
redraw() {
|
|
87
|
+
const pieces = this.extension.chessboard.state.position.getPieces()
|
|
88
|
+
let listW = piecesTranslations[this.extension.lang].colors.w.toUpperCase() + ":"
|
|
89
|
+
let listB = piecesTranslations[this.extension.lang].colors.b.toUpperCase() + ":"
|
|
151
90
|
for (const piece of pieces) {
|
|
152
|
-
const pieceName = piece.name === "p" ? "" : piecesTranslations[this.lang].pieces[piece.name].toUpperCase()
|
|
91
|
+
const pieceName = piece.name === "p" ? "" : piecesTranslations[this.extension.lang].pieces[piece.name].toUpperCase()
|
|
153
92
|
if (piece.color === "w") {
|
|
154
93
|
listW += " " + pieceName + piece.position
|
|
155
94
|
} else {
|
|
@@ -158,28 +97,86 @@ export class Accessibility extends Extension {
|
|
|
158
97
|
}
|
|
159
98
|
const altText = `${listW}
|
|
160
99
|
${listB}`
|
|
161
|
-
this.chessboard.view.svg.setAttribute("alt", altText)
|
|
100
|
+
this.extension.chessboard.view.svg.setAttribute("alt", altText)
|
|
162
101
|
}
|
|
102
|
+
}
|
|
163
103
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
104
|
+
class MovePieceForm {
|
|
105
|
+
constructor(container, extension) {
|
|
106
|
+
this.chessboard = extension.chessboard
|
|
107
|
+
this.movePieceFormContainer = Utils.createDomElement(`
|
|
108
|
+
<div>
|
|
109
|
+
<h3 id="hl_form_${this.chessboard.id}">${extension.t.move_piece}</h3>
|
|
110
|
+
<form aria-labelledby="hl_form_${this.chessboard.id}">
|
|
111
|
+
<label for="move_piece_input_from_${this.chessboard.id}">${extension.t.from}</label>
|
|
112
|
+
<input class="input-from" type="text" size="2" id="move_piece_input_from_${this.chessboard.id}"/>
|
|
113
|
+
<label for="move_piece_input_to_${this.chessboard.id}">${extension.t.to}</label>
|
|
114
|
+
<input class="input-to" type="text" size="2" id="move_piece_input_to_${this.chessboard.id}"/>
|
|
115
|
+
<button type="submit" class="button-move">${extension.t.move}</button>
|
|
116
|
+
</form>
|
|
117
|
+
</div>`)
|
|
118
|
+
this.form = this.movePieceFormContainer.querySelector("form")
|
|
119
|
+
this.inputFrom = this.form.querySelector(".input-from")
|
|
120
|
+
this.inputTo = this.form.querySelector(".input-to")
|
|
121
|
+
this.moveButton = this.form.querySelector(".button-move")
|
|
122
|
+
if (extension.props.visuallyHidden) {
|
|
123
|
+
this.movePieceFormContainer.classList.add("visually-hidden")
|
|
124
|
+
}
|
|
125
|
+
this.form.addEventListener("submit", (evt) => {
|
|
126
|
+
evt.preventDefault()
|
|
127
|
+
if (this.chessboard.view.moveInputCallback({
|
|
128
|
+
chessboard: this.chessboard,
|
|
129
|
+
type: INPUT_EVENT_TYPE.validateMoveInput,
|
|
130
|
+
squareFrom: this.inputFrom.value,
|
|
131
|
+
squareTo: this.inputTo.value
|
|
132
|
+
})) {
|
|
133
|
+
this.chessboard.movePiece(this.inputFrom.value, this.inputTo.value,
|
|
134
|
+
true).then(() => {
|
|
135
|
+
this.inputFrom.value = ""
|
|
136
|
+
this.inputTo.value = ""
|
|
137
|
+
})
|
|
138
|
+
}
|
|
139
|
+
})
|
|
140
|
+
container.appendChild(this.movePieceFormContainer)
|
|
141
|
+
extension.registerExtensionPoint(EXTENSION_POINT.moveInputToggled, () => {
|
|
142
|
+
this.redraw()
|
|
143
|
+
})
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
redraw() {
|
|
147
|
+
if (this.inputFrom) {
|
|
148
|
+
if (this.chessboard.state.inputWhiteEnabled || this.chessboard.state.inputBlackEnabled) {
|
|
149
|
+
this.inputFrom.disabled = false
|
|
150
|
+
this.inputTo.disabled = false
|
|
151
|
+
this.moveButton.disabled = false
|
|
171
152
|
} else {
|
|
172
|
-
|
|
153
|
+
this.inputFrom.disabled = true
|
|
154
|
+
this.inputTo.disabled = true
|
|
155
|
+
this.moveButton.disabled = true
|
|
173
156
|
}
|
|
174
157
|
}
|
|
175
|
-
this.piecesList.innerHTML = `
|
|
176
|
-
<h4 id="white_${this.chessboard.id}">${this.th.pieces} ${this.t.colors_long.w}</h4>
|
|
177
|
-
<ul aria-labelledby="white_${this.chessboard.id}" class="list-inline">${listW}</ul>
|
|
178
|
-
<h4 id="black_${this.chessboard.id}">${this.th.pieces} ${this.t.colors_long.b}</h4>
|
|
179
|
-
<ul aria-labelledby="black_${this.chessboard.id}" class="list-inline">${listB}</ul>`
|
|
180
158
|
}
|
|
159
|
+
}
|
|
181
160
|
|
|
182
|
-
|
|
161
|
+
class BoardAsTable {
|
|
162
|
+
constructor(container, extension) {
|
|
163
|
+
this.extension = extension
|
|
164
|
+
this.chessboard = extension.chessboard
|
|
165
|
+
this.boardAsTableContainer = Utils.createDomElement(`<div><h3 id="hl_table_${this.chessboard.id}">${extension.t.board_as_table}</h3><div class="table"></div></div>`)
|
|
166
|
+
this.boardAsTable = this.boardAsTableContainer.querySelector(".table")
|
|
167
|
+
container.appendChild(this.boardAsTableContainer)
|
|
168
|
+
if (this.chessboard.props.visuallyHidden) {
|
|
169
|
+
this.boardAsTableContainer.classList.add("visually-hidden")
|
|
170
|
+
}
|
|
171
|
+
extension.registerExtensionPoint(EXTENSION_POINT.positionChanged, () => {
|
|
172
|
+
this.redraw()
|
|
173
|
+
})
|
|
174
|
+
extension.registerExtensionPoint(EXTENSION_POINT.boardChanged, () => {
|
|
175
|
+
this.redraw()
|
|
176
|
+
})
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
redraw() {
|
|
183
180
|
const squares = this.chessboard.state.position.squares.slice()
|
|
184
181
|
const ranks = ["a", "b", "c", "d", "e", "f", "g", "h"]
|
|
185
182
|
const files = ["8", "7", "6", "5", "4", "3", "2", "1"]
|
|
@@ -201,7 +198,7 @@ ${listB}`
|
|
|
201
198
|
if (pieceCode) {
|
|
202
199
|
color = pieceCode.charAt(0)
|
|
203
200
|
name = pieceCode.charAt(1)
|
|
204
|
-
html += `<td>${renderPieceTitle(this.lang, name, color)}</td>`
|
|
201
|
+
html += `<td>${renderPieceTitle(this.extension.lang, name, color)}</td>`
|
|
205
202
|
} else {
|
|
206
203
|
html += `<td></td>`
|
|
207
204
|
}
|
|
@@ -211,11 +208,38 @@ ${listB}`
|
|
|
211
208
|
html += "</table>"
|
|
212
209
|
this.boardAsTable.innerHTML = html
|
|
213
210
|
}
|
|
211
|
+
}
|
|
214
212
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
213
|
+
class PiecesAsList {
|
|
214
|
+
constructor(container, extension) {
|
|
215
|
+
this.extension = extension
|
|
216
|
+
this.chessboard = extension.chessboard
|
|
217
|
+
this.piecesListContainer = Utils.createDomElement(`<div><h3 id="hl_lists_${this.chessboard.id}">${extension.t.pieces_lists}</h3><div class="list"></div></div>`)
|
|
218
|
+
this.piecesList = this.piecesListContainer.querySelector(".list")
|
|
219
|
+
container.appendChild(this.piecesListContainer)
|
|
220
|
+
if (extension.props.visuallyHidden) {
|
|
221
|
+
this.piecesListContainer.classList.add("visually-hidden")
|
|
222
|
+
}
|
|
223
|
+
extension.registerExtensionPoint(EXTENSION_POINT.positionChanged, () => {
|
|
224
|
+
this.redraw()
|
|
225
|
+
})
|
|
219
226
|
}
|
|
220
227
|
|
|
228
|
+
redraw() {
|
|
229
|
+
const pieces = this.chessboard.state.position.getPieces()
|
|
230
|
+
let listW = ""
|
|
231
|
+
let listB = ""
|
|
232
|
+
for (const piece of pieces) {
|
|
233
|
+
if (piece.color === "w") {
|
|
234
|
+
listW += `<li class="list-inline-item">${renderPieceTitle(this.extension.lang, piece.name)} ${piece.position}</li>`
|
|
235
|
+
} else {
|
|
236
|
+
listB += `<li class="list-inline-item">${renderPieceTitle(this.extension.lang, piece.name)} ${piece.position}</li>`
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
this.piecesList.innerHTML = `
|
|
240
|
+
<h4 id="white_${this.chessboard.id}">${this.extension.t.pieces} ${this.extension.tPieces.colors_long.w}</h4>
|
|
241
|
+
<ul aria-labelledby="white_${this.chessboard.id}" class="list-inline">${listW}</ul>
|
|
242
|
+
<h4 id="black_${this.chessboard.id}">${this.extension.t.pieces} ${this.extension.tPieces.colors_long.b}</h4>
|
|
243
|
+
<ul aria-labelledby="black_${this.chessboard.id}" class="list-inline">${listB}</ul>`
|
|
244
|
+
}
|
|
221
245
|
}
|
|
@@ -38,6 +38,12 @@ export class Utils {
|
|
|
38
38
|
return target
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
static createDomElement(html) {
|
|
42
|
+
const template = document.createElement('template')
|
|
43
|
+
template.innerHTML = html.trim()
|
|
44
|
+
return template.content.firstChild
|
|
45
|
+
}
|
|
46
|
+
|
|
41
47
|
static createTask() {
|
|
42
48
|
let resolve, reject
|
|
43
49
|
const promise = new Promise(function (_resolve, _reject) {
|