X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FMoveList.vue;h=48f082f4cd0b8bb372a008abca6fc81b3fed0feb;hb=8477e53d8e78606e4c4e4bf91c77b1011aab583c;hp=30ed2338f01c520e37b8269f24a46cd3b25c2d0b;hpb=df647c70b4148894c7d87fc499df5a9050347aec;p=vchess.git diff --git a/client/src/components/MoveList.vue b/client/src/components/MoveList.vue index 30ed2338..48f082f4 100644 --- a/client/src/components/MoveList.vue +++ b/client/src/components/MoveList.vue @@ -4,58 +4,6 @@ export default { name: "my-move-list", props: ["moves", "cursor", "score", "message", "firstNum"], render(h) { - if (this.moves.length == 0) return h("div"); - let tableContent = []; - let moveCounter = 0; - let tableRow = undefined; - let moveCells = undefined; - let curCellContent = ""; - let firstIndex = 0; - for (let i = 0; i < this.moves.length; i++) { - if (this.moves[i].color == "w") { - if (i == 0 || (i > 0 && this.moves[i - 1].color == "b")) { - if (tableRow) { - tableRow.children = moveCells; - tableContent.push(tableRow); - } - moveCells = [ - h("td", { domProps: { innerHTML: ++moveCounter + "." } }) - ]; - tableRow = h("tr", {}); - curCellContent = ""; - firstIndex = i; - } - } - // Next condition is fine because even if the first move is black, - // there will be the "..." which count as white move. - else if (this.moves[i].color == "b" && this.moves[i - 1].color == "w") - firstIndex = i; - curCellContent += this.moves[i].notation; - if ( - i < this.moves.length - 1 && - this.moves[i + 1].color == this.moves[i].color - ) - curCellContent += ","; - //color change - else { - moveCells.push( - h("td", { - domProps: { innerHTML: curCellContent }, - on: { click: () => this.gotoMove(i) }, - class: { - "highlight-lm": this.cursor >= firstIndex && this.cursor <= i - } - }) - ); - curCellContent = ""; - } - } - // Complete last row, which might not be full: - if (moveCells.length - 1 == 1) { - moveCells.push(h("td", { domProps: { innerHTML: "" } })); - } - tableRow.children = moveCells; - tableContent.push(tableRow); let rootElements = []; if (!!this.score && this.score != "*") { const scoreDiv = h( @@ -70,37 +18,90 @@ export default { ); rootElements.push(scoreDiv); } - rootElements.push( - h( - "table", - { - class: { - "moves-list": true + if (this.moves.length > 0) { + let tableContent = []; + let moveCounter = 0; + let tableRow = undefined; + let moveCells = undefined; + let curCellContent = ""; + let firstIndex = 0; + for (let i = 0; i < this.moves.length; i++) { + if (this.moves[i].color == "w") { + if (i == 0 || (i > 0 && this.moves[i - 1].color == "b")) { + if (tableRow) { + tableRow.children = moveCells; + tableContent.push(tableRow); + } + moveCells = [ + h( + "div", + { + "class": {td: true}, + domProps: { innerHTML: ++moveCounter + "." } + } + ) + ]; + tableRow = h("div", {"class": {tr: true}}); + curCellContent = ""; + firstIndex = i; } - }, - tableContent - ) - ); + } + // Next condition is fine because even if the first move is black, + // there will be the "..." which count as white move. + else if (this.moves[i].color == "b" && this.moves[i - 1].color == "w") + firstIndex = i; + curCellContent += this.moves[i].notation; + if ( + i < this.moves.length - 1 && + this.moves[i + 1].color == this.moves[i].color + ) + curCellContent += ","; + else { + // Color change + moveCells.push( + h( + "div", + { + "class": { + td: true, + "highlight-lm": this.cursor >= firstIndex && this.cursor <= i + }, + domProps: { innerHTML: curCellContent }, + on: { click: () => this.gotoMove(i) } + } + ) + ); + curCellContent = ""; + } + } + // Complete last row, which might not be full: + if (moveCells.length - 1 == 1) { + moveCells.push(h("div", {"class": {td: true}})); + } + tableRow.children = moveCells; + tableContent.push(tableRow); + rootElements.push( + h( + "div", + { + class: { + "moves-list": true + } + }, + tableContent + ) + ); + } return h("div", {}, rootElements); }, watch: { cursor: function(newCursor) { if (window.innerWidth <= 767) return; //scrolling would hide chessboard - // Count grouped moves until the cursor (if multi-moves): - let groupsCount = 0; - let curCol = undefined; - for (let i = 0; i < newCursor; i++) { - const m = this.moves[i]; - if (m.color != curCol) { - groupsCount++; - curCol = m.color; - } - } // $nextTick to wait for table > tr to be rendered this.$nextTick(() => { - let rows = document.querySelectorAll("#movesList tr"); - if (rows.length > 0) { - rows[Math.floor(groupsCount / 2)].scrollIntoView({ + let curMove = document.querySelector(".td.highlight-lm"); + if (curMove) { + curMove.scrollIntoView({ behavior: "auto", block: "nearest" }); @@ -118,67 +119,28 @@ export default { - -