summaryrefslogtreecommitdiff
path: root/card.html
blob: 0c55b944454872692153be4aa5f492ff7e8924ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<style>
form[name=card] button[name=buzz] { display: none }
form[name=card].answering button[name=buzz] { display: initial }
form[name=card] input { display: none }
form[name=card].answered input { display: initial }
form[name=card] output { display: none }
form[name=card]:is(.answering, .answered) output[name=question] { display: initial }
form[name=card].answered output[name=answer] { display: initial }
</style>

<form name=card onsubmit="return false">
<p>
<button name=buzz>Answer</button>
<input type=submit name=0 value="Totally blanked">
<input type=submit name=1 value="Vaguely remembered">
<input type=submit name=2 value="Should have remembered">
<input type=submit name=3 value="Remembered, but was hard">
<input type=submit name=4 value="Remembered, but hesitated">
<input type=submit name=5 value="Remembered perfectly">
<p>
<output name=question></output>
<p>
<output name=answer></output>
</form>

<script>
async function ask({question, answer}, speed=250) {
  let f = document.forms.card,
      q = f.question,
      a = f.answer,
      b = f.buzz,
      words = question.split(" "),
      answered = false

  f.classList.remove("answered")
  f.classList.add("answering")
  a.value = ""
  b.onclick = e => answered = true

  q.value = words[0]
  for (let word of words.slice(1)) {
    if (answered) {
      q.value = question
      break
    }
    await sleep(speed)
    q.value += " " + word
  }
  await sleep(speed)

  a.value = answer
  f.classList.remove("answering")
  f.classList.add("answered")

  let grade = await new Promise(r =>
    f.onsubmit = e => (e.preventDefault(), r(+e.submitter.name)))

  f.classList.remove("answered")
  a.value = ""

  return grade
}
</script>