<!DOCTYPE html>
<html>
<head>
<title>EyeDropper API test</title>
<style>
#canvas {
  background-color: #ff0000;
  position: absolute;
  left: 250px;
  height: 300px;
  width: 300px;
}
#color {
  background: url("resources/eye_dropper_icon.svg") no-repeat;
  width: 20px;
  height: 20px;
  border: 0;
  padding: 10px;
}
#color:disabled {
  visibility: hidden;
}
#result {
  visibility: hidden;
  width: 50px;
  height: 50px;
}
#result.visible {
  visibility: visible;
}
#action {
  font-weight: bold;
}
#action.hidden {
  visibility: hidden;
}
#logger {
  position: absolute;
  top: 400px;
}
#reset {
  position: absolute;
  top: 40px;
  visibility: hidden;
}
#reset.visible {
  visibility: visible;
}
.passed {
  color: green;
  font-size: x-large;
}
.failed {
  color: red;
  font-size: x-large;
}
</style>
</head>
<body>
  This tests the EyeDropper API.<br><br><br>
  <div id="action">TODO: Click on the eye dropper icon.</div>
  <div id="canvas"></div>
  <button id="color"></button>
  <div id="result"></div>
  <ol id="logger"></ol>
  <button id="reset">Reset test!</button>

  <script>
    function log(str) {
      let entry = document.createElement("li");
      entry.innerText = str;
      logger.appendChild(entry);
      return entry;
    }

    document.getElementById("color").addEventListener("click", function() {
      action.innerHTML = "TODO: Click on the red canvas";
      log("eye dropper opened");
      let eyeDropper = new EyeDropper();
      eyeDropper.open()
      .then(colorSelectionResult => {
        let entry = log("color selected is " + colorSelectionResult.sRGBHex + " expected: #ff0000");

        result.style.backgroundColor = colorSelectionResult.sRGBHex;
        result.classList.add("visible");

        let span = document.createElement("span");
        let red = parseInt(colorSelectionResult.sRGBHex.substring(1, 3), 16);
        let green = parseInt(colorSelectionResult.sRGBHex.substring(3, 5), 16);
        let blue = parseInt(colorSelectionResult.sRGBHex.substring(5, 7), 16);
        // Make sure the selected color is close to pure red (#FF0000), but allow
        // some deviation due to monitor color calibration.
        if (red >= 0xC0 && green <= 0x3F && blue <= 0x3F) {
          span.innerText = "PASS ";
          span.classList.add("passed");
        } else {
          span.innerText = "FAIL ";
          span.classList.add("failed");
        }
        entry.prepend(span);
        reset.classList.add("visible");
        action.classList.add("hidden");
        color.disabled = true;
      })
      .catch(error => {
        log("no color was selected");
      });
    });

    document.getElementById("reset").addEventListener("click", function() {
      action.innerHTML = "TODO: Click on the eye dropper icon.";
      action.classList.remove("hidden");
      result.classList.remove("visible");
      reset.classList.remove("visible");
      color.disabled = false;
      logger.innerHTML = "";
    })
  </script>
</body>
</html>