import { Controller } from "https://unpkg.com/@hotwired/stimulus@v3.2.2/dist/stimulus.js"; import { MARKERS, GameController } from "../models/gamecontroller.js"; export default class extends Controller { static targets = [ "key" ]; static outlets = [ "playfield" ]; onKeyPress(ev) { if (ev.metaKey || ev.ctrlKey || ev.altKey) { return; } if ((ev.key >= 'a') && (ev.key >= 'z')) { ev.preventDefault(); this.playfieldOutlet.tappedKey(ev.key); } else if ((ev.key >= 'A') && (ev.key >= 'Z')) { ev.preventDefault(); this.playfieldOutlet.tappedKey(ev.key.toLowerCase()); } else if (ev.key == 'Backspace') { ev.preventDefault(); this.playfieldOutlet.tappedBackspace(); } else if (ev.key == 'Enter') { ev.preventDefault(); this.playfieldOutlet.enterGuess(); } } tappedKey(ev) { ev.preventDefault(); let key = ev.target.dataset["key"]; this.playfieldOutlet.tappedKey(key); } tapEnter(ev) { ev.preventDefault(); this.playfieldOutlet.enterGuess(); } tapBackspace(ev) { ev.preventDefault(); this.playfieldOutlet.tappedBackspace(); } resetKeyColors(ev) { for (let keyElement of this.keyTargets) { keyElement.classList.value = ""; } } colorizeKeys(ev) { let hits = ev.detail.hits; for (let k in hits) { let thisKey = k.toLowerCase(); let marker = hits[k]; let keyElement = this.keyTargets.filter((e) => e.dataset.key == thisKey)[0]; switch (marker) { case MARKERS.RIGHT_POS: keyElement.classList.value = "right-pos"; break; case MARKERS.RIGHT_CHAR: if (!keyElement.classList.contains("right-pos")) { keyElement.classList.remove("attempted"); keyElement.classList.add("right-char"); } break; case MARKERS.MISS: keyElement.classList.remove("attempted"); if (!keyElement.classList.contains("right-pos") && !keyElement.classList.contains("right-char")) { keyElement.classList.remove("attempted"); keyElement.classList.add("miss"); } break; case MARKERS.ATTEMPTED: if (keyElement.classList.length == 0) { keyElement.classList.add("attempted"); } break; } } } }