A few fixes + prepare translations + rules for last 4 variants
[vchess.git] / public / javascripts / utils / printDiagram.js
CommitLineData
da06a6eb
BA
1// Assuming V(ariantRules) class is loaded.
2// args: object with position (mandatory), orientation, marks (optional)
3function getDiagram(args)
4{
5 const [sizeX,sizeY] = [V.size.x,V.size.y];
6 // Obtain array of pieces images names
7 const board = VariantRules.GetBoard(args.position);
8 const orientation = args.orientation || "w";
9 let markArray = [];
10 if (!!args.marks)
11 {
12 // Turn (human) marks into coordinates
13 markArray = doubleArray(sizeX, sizeY, false);
14 let squares = args.marks.split(",");
15 for (let i=0; i<squares.length; i++)
16 {
17 const res = /^([a-z]+)([0-9]+)$/i.exec(squares[i]);
26c1e3bd
BA
18 const coords = V.SquareToCoords(res);
19 markArray[coords.x][coords.y] = true;
da06a6eb
BA
20 }
21 }
22 let boardDiv = "";
23 const [startX,startY,inc] = orientation == 'w'
24 ? [0, 0, 1]
25 : [sizeX-1, sizeY-1, -1];
26 for (let i=startX; i>=0 && i<sizeX; i+=inc)
27 {
28 boardDiv += "<div class='row'>";
29 for (let j=startY; j>=0 && j<sizeY; j+=inc)
30 {
31 boardDiv += "<div class='board board" + sizeY + " " +
32 ((i+j)%2==0 ? "light-square-diag" : "dark-square-diag") + "'>";
33 if (board[i][j] != V.EMPTY)
34 {
35 boardDiv += "<img src='/images/pieces/" +
36 V.getPpath(board[i][j]) + ".svg' class='piece'/>";
37 }
38 if (!!args.marks && markArray[i][j])
39 boardDiv += "<img src='/images/mark.svg' class='mark-square'/>";
40 boardDiv += "</div>";
41 }
42 boardDiv += "</div>";
43 }
44 return boardDiv;
45}