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