MoveList working. TODO: Chat
[vchess.git] / client / src / components / MoveList.vue
CommitLineData
cf2343ce 1<script>
a3ab5fdb 2// Component for moves list on the right
cf2343ce
BA
3export default {
4 name: 'my-move-list',
f21cd6d9 5 props: ["moves","cursor"],
7ee085c2
BA
6 data: function() {
7 return {
a3ab5fdb 8 something: "", //TODO?
7ee085c2
BA
9 };
10 },
7ee085c2
BA
11 render(h) {
12 if (this.moves.length == 0)
13 return;
7d9e99bc
BA
14 if (this.moves[0].color == "b")
15 this.moves.unshift({color: "w", notation: "..."});
7ee085c2
BA
16 let tableContent = [];
17 let moveCounter = 0;
18 let tableRow = undefined;
19 let moveCells = undefined;
20 let curCellContent = "";
21 for (let i=0; i<this.moves.length; i++)
22 {
7d9e99bc 23 if (this.moves[i].color == "w")
7ee085c2 24 {
7d9e99bc 25 if (i == 0 || i>0 && this.moves[i-1].color=="b")
7ee085c2
BA
26 {
27 if (!!tableRow)
7d9e99bc
BA
28 {
29 tableRow.children = moveCells;
7ee085c2 30 tableContent.push(tableRow);
7d9e99bc 31 }
7ee085c2
BA
32 moveCells = [
33 h(
34 "td",
7d9e99bc 35 { domProps: { innerHTML: (++moveCounter) + "." } }
7ee085c2
BA
36 )
37 ];
38 tableRow = h(
39 "tr",
7d9e99bc 40 { }
7ee085c2
BA
41 );
42 curCellContent = "";
43 }
7d9e99bc
BA
44 }
45 curCellContent += this.moves[i].notation;
46 if (i < this.moves.length-1 && this.moves[i+1].color == this.moves[i].color)
47 curCellContent += ",";
48 else //color change
49 {
7ee085c2
BA
50 moveCells.push(
51 h(
52 "td",
7d9e99bc
BA
53 {
54 domProps: { innerHTML: curCellContent },
55 on: { click: () => this.gotoMove(i) },
d337a94c 56 "class": { "highlight-lm": this.cursor == i },
7d9e99bc
BA
57 }
58 )
59 );
60 curCellContent = "";
7ee085c2
BA
61 }
62 }
63 // Complete last row, which might not be full:
f21cd6d9 64 if (moveCells.length-1 == 1)
7ee085c2 65 {
f21cd6d9
BA
66 moveCells.push(
67 h(
68 "td",
69 { domProps: { innerHTML: "" } }
70 )
71 );
7ee085c2 72 }
7d9e99bc
BA
73 tableRow.children = moveCells;
74 tableContent.push(tableRow);
7ee085c2
BA
75 const movesTable = h(
76 "table",
77 { },
78 tableContent
79 );
80 return movesTable;
81 },
7d9e99bc
BA
82 methods: {
83 gotoMove: function(index) {
84 this.$emit("goto-move", index);
85 },
86 },
cf2343ce
BA
87};
88</script>