| 1 | // Assuming V(ariantRules) class is loaded. |
| 2 | // args: object with position (mandatory), orientation, marks (optional) |
| 3 | function 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]); |
| 18 | const coords = V.SquareToCoords(res); |
| 19 | markArray[coords.x][coords.y] = true; |
| 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 | } |