Chess Board

A chess board

by Bob Jones

HTML

<svg width="251" height="251" id="mysvg" style="padding-left:2px;padding-top:2px;" class="board" draggable="false">
</svg>
<p>
  Console:
</p>
<textarea id="evalconsole"></textarea>
<button onclick="returnstatement.innerText=eval(evalconsole.value)">
  Eval!
</button>
<p id="returnstatement"></p>

CSS

text {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

JavaScript

function makeSVGTag(tagName, properties) {
  var keys = Object.keys(properties);
  var ret = "<" + tagName;
  for (var i = 0; i < keys.length; i++) {
    ret += " " + keys[i] + '="' + properties[keys[i]] + '"';
  }
  ret += "/>";
  return ret;
}

function makeSVGTagContent(tagName, properties, content) {
  var keys = Object.keys(properties);
  var ret = "<" + tagName;
  for (var i = 0; i < keys.length; i++) {
    ret += " " + keys[i] + '="' + properties[keys[i]] + '"';
  }
  ret += ">" + content.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;") + "</" + tagName + ">";
  return ret;
}

function setMoveOnBoard(color1, color2, color3, color4, symbol1, symbol2, x, y) {
  mysvg.innerHTML += makeSVGTag("rect", {
    height: 10,
    width: 10,
    stroke: color2,
    "stroke-width": 2,
    x: Number(x) + 3,
    y: Number(y) + 3,
    fill: color1,
    class: "move move-display",
    "data-index": (Number(y) / 16) * 15 + Number(x) / 16,
    draggable: false
  });
  mysvg.innerHTML += makeSVGTagContent("text", {
    x: Number(x) + 4,
    y: Number(y) + 10,
    "font-family": "Verdana",
    "font-size": 10,
    stroke: "none",
    fill: color3,
    class: "move-symbol move-symbol1 move-display",
    "data-index": (Number(y) / 16) * 15 + Number(x) / 16,
    draggable: false
  }, symbol1);
  mysvg.innerHTML += makeSVGTagContent("text", {
    x: Number(x) + 4,
    y: Number(y) + 10,
    "font-family": "Verdana",
    "font-size": 10,
    stroke: "none",
    fill: color4,
    class: "move-symbol move-symbol2 move-display",
    "data-index": (Number(y) / 16) * 15 + Number(x) / 16,
    draggable: false
  }, symbol2);
}
var config = {
  color1: "#f00",
  color2: "#000",
  color3: "#0f0",
  color4: "#00f",
  symbol1: ">",
  symbol2: "<"
};
var mode = "add";

function toggleMove(i) {
  if (getMove(i)[0]) {
    mode = "remove";
    getMove(i)[0].remove();
    getMove(i)[1].remove();
    getMove(i)[2].remove();
  } else {
    mode = "add";
   ...