X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/139cfe4ebde273208f91d401a2938330faf41c06..a8e02f8948b961a27b47965e0eab1fcc1c207915:/word/quiz.js diff --git a/word/quiz.js b/word/quiz.js index b98842f..146aff7 100644 --- a/word/quiz.js +++ b/word/quiz.js @@ -1,32 +1,30 @@ -class Quiz { - next() { - let word = this.words.shift(); - let form = put(this.form, - '+img[src=$]+ul', `/data/word/en/${word[0]}.jpg`, - ); +Array.prototype.shuffle = function () { + for (let i = this.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); // random index 0..i + [this[i], this[j]] = [this[j], this[i]]; // swap elements + } + return this; +}; - let answers = [word[2], this.words[1][2], this.words[2][2], this.words[3][2]] - .sort(() => {return .5 - Math.random()}) // shuffle - answers.forEach(suggest => { - let label = suggest.replace(/\/.*/, ''); - let option = put(form, 'li', label, {onclick: () => { - if (suggest != word[2]) { - // incorrect - put(option, '.wrong'); - return; - } - put(option, '.good'); - window.setTimeout(() => this.next(), 500); - }}); - }); +class WordQuiz { + dataselect(json) { + // find viable rows from json data + let rows = Object.values(json); + if (this.preset.level !== undefined) { + rows = rows.filter(row => row[1] <= this.preset.level); + } + return rows.shuffle(); } - constructor(dataurl) { + load(dataurl) { + this.preset = {}; fetch(dataurl).then(res => res.json()).then(json => { - this.form = document.getElementById('quiz'); - this.words = Object.values(json) - .sort(() => {return .5 - Math.random()}) // shuffle - this.next(); + this.words = this.dataselect(json) + this.setup(); }); } -}; + + constructor(dataurl) { + this.load(dataurl); + } +}