diff --git a/app/javascript/controllers/flashcard_controller.js b/app/javascript/controllers/flashcard_controller.js index 7ef1945..1decafd 100644 --- a/app/javascript/controllers/flashcard_controller.js +++ b/app/javascript/controllers/flashcard_controller.js @@ -6,10 +6,11 @@ import { Controller } from "@hotwired/stimulus" // data-flashcard-target="card" (the 3D flippable element) // // Hidden forms in the same element: -// id="form-right" — known / easy -// id="form-left" — learning / forgot -// id="form-skip" — skip (filter only) -// id="form-q3" — hard (review only) +// id="form-right" — known / easy +// id="form-left" — learning / forgot +// id="form-skip" — skip (filter only) +// id="form-q3" — hard (review only) +// id="form-q4" — good (review only) export default class extends Controller { static targets = ["card"] @@ -28,7 +29,7 @@ export default class extends Controller { document.removeEventListener("keydown", this._keydown) } - // ── Keyboard ────────────────────────────────────────────────────────────── + // ── Keyboard ──────────────────────────────────────────────────────────────── handleKeydown(e) { if (this.animating) return @@ -65,13 +66,17 @@ export default class extends Controller { this.slideAndSubmit("slide-up", "form-q3") break case "3": + e.preventDefault() + this.slideAndSubmit("slide-up", "form-q4") + break + case "4": e.preventDefault() this.slideAndSubmit("slide-right", "form-right") break } } - // ── Touch / swipe ───────────────────────────────────────────────────────── + // ── Touch / swipe ─────────────────────────────────────────────────────────── touchstart(e) { const t = e.changedTouches[0] @@ -85,10 +90,9 @@ export default class extends Controller { const dx = t.clientX - this.touchStartX const dy = t.clientY - this.touchStartY - // Small movement = tap, handled by click -> flip if (Math.abs(dx) < 20 && Math.abs(dy) < 20) return - e.preventDefault() // prevent the click event that follows + e.preventDefault() if (Math.abs(dx) >= Math.abs(dy) && Math.abs(dx) > 40) { dx > 0 @@ -97,7 +101,7 @@ export default class extends Controller { } } - // ── Card flip ───────────────────────────────────────────────────────────── + // ── Card flip ─────────────────────────────────────────────────────────────── flip(e) { if (e) e.stopPropagation() @@ -105,7 +109,7 @@ export default class extends Controller { this.cardTarget.classList.toggle("is-flipped", this.flipped) } - // ── Form submission ─────────────────────────────────────────────────────── + // ── Form submission ───────────────────────────────────────────────────────── slideAndSubmit(animClass, formId) { this.animating = true @@ -116,7 +120,6 @@ export default class extends Controller { if (form) { form.requestSubmit() } else { - // form not present on this page variant — ignore silently this.animating = false this.cardTarget.classList.remove(animClass) }