blob: 4d09e7594c1b6e82983a7edb0cd50a9203469f98 (
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
|
<style>
form[name=card] > p { visibility: hidden }
form[name=card].answering > p, form[name=card].answered > p { visibility: initial }
form[name=card].answering > p:nth-of-type(4) { visibility: hidden }
form[name=card].answered > p:nth-of-type(1) { visibility: hidden }
</style>
<form name=card onsubmit="return false">
<p>
<button name=buzz>Answer</button>
<p>
<output name=question></output>
<p>
<output name=answer></output>
<p>
<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">
</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>
|