X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fcomponents%2FMoveList.vue;h=90b76b43531a33d56434568911d08c4dd5689046;hb=dac395887d96e2d642b209c6db6aaacc3ffacb34;hp=fa01cf16b0a3423a83b981144bfcd69f58fbf03f;hpb=cf2343cee5729c011770ace6d5b4f79d1ac3a2b6;p=vchess.git diff --git a/client/src/components/MoveList.vue b/client/src/components/MoveList.vue index fa01cf16..90b76b43 100644 --- a/client/src/components/MoveList.vue +++ b/client/src/components/MoveList.vue @@ -2,96 +2,157 @@ // Component for moves list on the right export default { name: 'my-move-list', - props: ["moves","cursor"], //TODO: other props for e.g. players names + connected indicator - // --> we could also add turn indicator here - data: function() { - return { - something: "", //TODO? - }; - }, - // TODO: extend rendering for more than 2 colors: would be a parameter - // in that case some moves for some colors could be just skipped (if a player lost) - render(h) { - if (this.moves.length == 0) - return; - const nbColors = 2; - // TODO: name colors "white", "black", "red", "yellow" ? - if (this.moves[0].color == "b") - this.moves.unshift({color: "w", notation: "..."}); - let tableContent = []; - let moveCounter = 0; - let tableRow = undefined; - let moveCells = undefined; - let curCellContent = ""; - for (let i=0; i0 && this.moves[i-1].color=="b") - { - if (!!tableRow) - { - tableRow.children = moveCells; - tableContent.push(tableRow); - } - moveCells = [ - h( - "td", - { domProps: { innerHTML: (++moveCounter) + "." } } - ) - ]; - tableRow = h( - "tr", - { } - ); - curCellContent = ""; - } - } - 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( - "td", - { - domProps: { innerHTML: curCellContent }, - on: { click: () => this.gotoMove(i) }, - "class": { "highlight-lm": this.cursor == i }, - } - ) - ); - curCellContent = ""; - } - } - // Complete last row, which might not be full: - if (moveCells.length-1 < nbColors) - { - const delta = nbColors - (moveCells.length-1); - for (let i=0; i tr to be rendered + this.$nextTick( () => { + let rows = document.querySelectorAll('#movesList tr'); + if (rows.length > 0) + { + rows[Math.floor(Math.max(groupsCount,0)/2)].scrollIntoView({ + behavior: "auto", + block: "nearest", + }); + } + }); + }, + }, + render(h) { + if (this.moves.length == 0) + return; + let tableContent = []; + let moveCounter = 0; + let tableRow = undefined; + let moveCells = undefined; + let curCellContent = ""; + let firstIndex = 0; + for (let i=0; i0 && 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 += ","; + else //color change + { + 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 != "*") + { + const scoreDiv = h("div", + { + id: "scoreInfo", + style: { + display: this.score!="*" ? "block" : "none", + }, + }, + [ + h("p", this.score), + h("p", this.message), + ] + ); + rootElements.push(scoreDiv); + } + rootElements.push( + h( + "table", + { + "class": { + "moves-list": true, + }, + }, + tableContent + ) + ); + return h( + "div", + { }, + rootElements); + }, + methods: { + gotoMove: function(index) { + this.$emit("goto-move", index); + }, + }, }; + +