-
-
Save pneff/8997666 to your computer and use it in GitHub Desktop.
<div class="check-container"><span id="check"></span></div> | |
{{#Question}} | |
<p>{{Question}}</p> | |
{{/Question}} | |
{{#Image}} | |
<p class="image">{{Image}}</p> | |
{{/Image}} | |
<ul> | |
{{Answers}} | |
</ul> | |
{{#Explanation}} | |
<p class="explanation">{{Explanation}}</p> | |
{{/Explanation}} | |
<script> | |
(function () { | |
var data = JSON.parse(window.title), | |
els = document.getElementsByTagName('input'), | |
count = els.length, | |
li_nodes = [], | |
ul, | |
idx, | |
correct = true; | |
for (idx = 0; idx < count; idx++) { | |
if (!!data.answered[idx] == !!els[idx].checked) { | |
els[idx].parentNode.className = 'success'; | |
} else { | |
els[idx].parentNode.className = 'error'; | |
correct = false; | |
} | |
} | |
if (correct) { | |
document.getElementById('check').innerHTML = 'Correct'; | |
document.getElementById('check').className = 'success'; | |
} else { | |
document.getElementById('check').innerHTML = 'Wrong'; | |
document.getElementById('check').className = 'error'; | |
} | |
// Re-order to same order as previous page | |
els = document.getElementsByTagName('li'); | |
ul = els[0].parentNode; | |
for (idx = count - 1; idx >= 0; idx--) { | |
li_nodes.unshift(els[idx]); | |
ul.removeChild(els[idx]); | |
} | |
for (idx = 0; idx < count; idx++) { | |
ul.appendChild(li_nodes[data.position[idx]]); | |
} | |
}()); | |
</script> |
Question: | |
Which answer is the right one? | |
Choices: | |
<li><label><input type="checkbox" /> Answer 1</label></li> | |
<li><label><input type="checkbox" /> Answer 2</label></li> | |
<li><label><input type="checkbox" /> Answer 3</label></li> | |
Answers: | |
<li><input disabled type="checkbox" checked /> Answer 1</li> | |
<li><input disabled type="checkbox" /> Answer 2</li> | |
<li><input disabled type="checkbox" /> Answer 3</li> |
{{#Question}} | |
<p>{{Question}}</p> | |
{{/Question}} | |
{{#Image}} | |
<p class="image">{{Image}}</p> | |
{{/Image}} | |
<ul> | |
{{Choices}} | |
</ul> | |
<script> | |
// window.title is persisted between question and answer, so we use it for our little hack | |
(function () { | |
var data = {answered: {}, position: []}; | |
function onClick (ev) { | |
ev.stopPropagation(); | |
data.answered[ev.currentTarget.getAttribute('idx')] = ev.currentTarget.checked; | |
window.title = JSON.stringify(data); | |
} | |
var els = document.getElementsByTagName('input'), | |
li_nodes = [], | |
count = els.length, | |
ul, | |
pos, | |
idx, | |
new_order = []; | |
for (idx = 0; idx < count; idx++) { | |
els[idx].setAttribute('idx', idx); | |
els[idx].addEventListener('click', onClick); | |
pos = Math.floor(Math.random() * count); | |
data.position.splice(pos, 0, idx); | |
} | |
// Re-order randomly | |
els = document.getElementsByTagName('li'); | |
ul = els[0].parentNode; | |
for (idx = count - 1; idx >= 0; idx--) { | |
li_nodes.unshift(els[idx]); | |
ul.removeChild(els[idx]); | |
} | |
for (idx = 0; idx < count; idx++) { | |
ul.appendChild(li_nodes[data.position[idx]]); | |
} | |
window.title = JSON.stringify(data); | |
}()); | |
</script> |
* { | |
box-sizing: border-box; | |
} | |
html { | |
height: 100%; | |
} | |
.card { | |
margin: 0; | |
padding: 0; | |
padding: 20px; | |
height: 100%; | |
font-family: arial; | |
font-size: 20px; | |
text-align: center; | |
color: black; | |
} | |
.hint { | |
margin-top: 20px; | |
font-size: 70%; | |
color: #aaa; | |
} | |
.image { | |
height: 50%; | |
} | |
li { | |
text-align: left; | |
list-style: none; | |
margin: 10px; | |
} | |
li input { | |
margin-left: -20px; | |
} | |
ul br { display: none; } | |
.error { | |
background-color: #f2dede; | |
} | |
.success { | |
background-color: #dff0d8; | |
} | |
.explanation { | |
font-size: 14px; | |
text-align: left; | |
border-top: 1px solid #ccc; | |
padding-top: 10px; | |
margin-bottom: 10px; | |
} | |
.check-container { | |
position: fixed; | |
left: 0; | |
right: 0; | |
top: 0; | |
} | |
#check { | |
padding: 2px 10px; | |
} |
Seems there is no way to make this work right on AnkiDroid ;(... Found this post: https://groups.google.com/forum/#!topic/anki-android/Iqs-cZN5Lr4. In AnkiDriod WebView is re-created on each card to avoid memory-leak issue...
But how does close work then? Somehow it must be possible to transfer answers from front to back.
I'm slightly confused about the instructions.
I copy and pasted "Front Template" "Styling" and "Back Template" into Anki on my PC under "Card Types for Basic" but I don't know what to do with "Example Note" ? Some further instruction would be greatly appreciated!
Could you give some more details:
- What fields do I need to make for the cards
- How do I specify which answer is correct
When I tried to paste this code into Anki, and added the fields that I thought I needed, it didn't work.
I guess, in summary, please add some explanation on how to make this work! Thanks!
- I'm completely computer illiterate. I just started doing the Programming course on Khan academy... So, yeah!
This code works bad way. I've copy-pasted it's chunks under Windows, but each time I see BackSide after incorrect answer it paints randomly answer's in wrong colors. 👎
Thank you for the card template! I was asked to modify it a bit and shared it on https://ankiweb.net/shared/info/492884834
Hi,
first of all BIG THANKS for putting the code for "Anki Card Type for multiple-choice" on the Internet. Thanks for sharing. Card Type works beautifully on Windows Anki, a bit less in AnkiDroid (probably because there is no window.title property?). I wondered (before staring too take a hard look at the thing - I am not a programmer, but do fiddle with things a bit) if you would be so kind and maybe help me with the following:
The reason that I would like to have these Card Types are the exams I am preparing for (Microsoft). I usually read few books on subject, do a lot of work in labs I set up, and then prepare for exam using dumps. I copy these to Anki and prepare desks. Since Anki is such a super tool for learning by spaced repetition, this turns out to be great fun way.
Thanks again, have a really nice, pleasant day,
Blaz