From 8583f7c119434dccacdb1d6d14136cae3533fa3f Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 5 Jan 2016 19:27:24 +0100 Subject: Allow for multiple correct answers --- app/Http/Controllers/RandomVerbController.php | 5 +- app/Verb.php | 6 ++ public/js/hebrewparsetrainer.js | 140 +++++++++++++++++--------- resources/views/trainer.php | 16 +-- 4 files changed, 103 insertions(+), 64 deletions(-) diff --git a/app/Http/Controllers/RandomVerbController.php b/app/Http/Controllers/RandomVerbController.php index 246b4f7..ee2a01c 100644 --- a/app/Http/Controllers/RandomVerbController.php +++ b/app/Http/Controllers/RandomVerbController.php @@ -34,7 +34,10 @@ class RandomVerbController extends BaseController { return in_array($item->getAttribute($col), $val); }); } - return $verbs->random(); + $verb = $verbs->random(); + + $obj = ['verb' => $verb, 'answers' => $verb->otherParsings()]; + return response()->json($obj); } } \ No newline at end of file diff --git a/app/Verb.php b/app/Verb.php index 75d5d46..997812f 100644 --- a/app/Verb.php +++ b/app/Verb.php @@ -26,4 +26,10 @@ class Verb extends Model { protected $fillable = ['verb', 'root', 'stem', 'tense', 'person', 'gender', 'number']; + public function otherParsings() + { + return self::where('verb', $this->verb)->get() + ->filter(function($v){return $v->verb === $this->verb;}); + } + } \ No newline at end of file diff --git a/public/js/hebrewparsetrainer.js b/public/js/hebrewparsetrainer.js index 858d3cd..300715d 100644 --- a/public/js/hebrewparsetrainer.js +++ b/public/js/hebrewparsetrainer.js @@ -19,12 +19,60 @@ $(document).ready(function(){ var audio_positive = new Audio('public/audio/positive.wav'); var audio_negative = new Audio('public/audio/negative.wav'); - var correct_answer; + var correct_answers; + var input_count = 0; + var checked = false; + + function addInput() { + input_count++; + var html = "
\ +
\ +
\ + \ + \ +
\ +
\ +
\ +
\ + \ + \ +
\ +
\ +
"; + $('#trainer-input-container').append(html); + + $('#trainer-input-'+input_count).keyup(function(e){ + if (e.keyCode == 13) { + if (!checked) { + checked = checkInput(); + } else { + reloadVerb(); + $(this) + .val('') + .css({backgroundColor:'transparent'}) + .parent().removeClass('has-error has-success'); + checked = false; + } + } else { + $(this) + .css({backgroundColor:'transparent'}) + .parent().removeClass('has-error has-success'); + checked = false; + processInput(); + } + }).focus(); + } + + function removeInputs() { + $('.trainer-input').remove(); + input_count = 0; + } function reloadVerb() { $('#trainer-404').hide(); $('#trainer-verb').css({color: 'gray'}); $('#trainer-answer').text(''); + removeInputs(); var stems = $('input[name="stem"]:checked').map(function(){return this.value;}); var tenses = $('input[name="tense"]:checked').map(function(){return this.value;}); @@ -41,14 +89,21 @@ $(document).ready(function(){ $('#trainer-404').fadeIn(); }, success: function(data, status, jqxhr) { - $('#trainer-verb').text(data.verb).css({color: 'black'}); - correct_answer = { - stem: data.stem, - tense: data.tense, - person: data.person, - gender: data.gender, - number: data.number - }; + $('#trainer-verb').text(data.verb.verb).css({color: 'black'}); + + correct_answers = []; + for (var i in data.answers) { + var answer = { + stem: data.answers[i].stem, + tense: data.answers[i].tense, + person: data.answers[i].person, + gender: data.answers[i].gender, + number: data.answers[i].number + }; + correct_answers.push(answer); + } + + addInput(); } }); } @@ -134,32 +189,46 @@ $(document).ready(function(){ } function processInput() { - var input = $('#trainer-input'); + var input = $('#trainer-input-' + input_count); var answer = parseAnswer(input.val()); if (answer === false) { input.parent().addClass('has-error'); - $('#trainer-parsed').val('Parsing error'); + $('#trainer-parsed-' + input_count).val('Parsing error'); } else { input.parent().removeClass('has-error'); - $('#trainer-parsed').val(parsingToString(answer, true)); + $('#trainer-parsed-' + input_count).val(parsingToString(answer, true)); } return answer; } function checkInput() { var answer = processInput(); - if (JSON.stringify(answer) == JSON.stringify(correct_answer)) { - $('#trainer-input') - .css({backgroundColor: '#dff0d8'}) - .parent().addClass('has-success'); - if ($('#settings-audio').prop('checked')) audio_positive.play(); - } else { - $('#trainer-input') - .css({backgroundColor: '#f2dede'}) - .parent().addClass('has-error'); - if ($('#settings-audio').prop('checked')) audio_negative.play(); - $('#trainer-answer').text(' - ' + parsingToString(correct_answer)); + for (var i in correct_answers) { + var correct_answer = correct_answers[i]; + if (JSON.stringify(answer) == JSON.stringify(correct_answer)) { + $('#trainer-input-'+input_count) + .css({backgroundColor: '#dff0d8'}) + .parent().addClass('has-success'); + if ($('#settings-audio').prop('checked')) audio_positive.play(); + + correct_answers.splice(i,1); + if (correct_answers.length > 0) { + console.log(correct_answers); + addInput(); + return false; + } else { + return true; + } + } } + + $('#trainer-input-'+input_count) + .css({backgroundColor: '#f2dede'}) + .parent().addClass('has-error'); + if ($('#settings-audio').prop('checked')) audio_negative.play(); + $('#trainer-answer').text(' - ' + correct_answers.map(parsingToString).join(', ')); + + return true; } function init() { @@ -179,36 +248,11 @@ $(document).ready(function(){ }); reloadVerb(); - - $('#trainer-input').focus(); } $('#hebrewparsetrainer-settings input.reload-verb').change(function(){ reloadVerb(); }); - var checked = false; - $('#trainer-input').keyup(function(e){ - if (e.keyCode == 13) { - if (!checked) { - checkInput(); - checked = true; - } else { - reloadVerb(); - $(this) - .val('') - .css({backgroundColor:'transparent'}) - .parent().removeClass('has-error has-success'); - checked = false; - } - } else { - $(this) - .css({backgroundColor:'transparent'}) - .parent().removeClass('has-error has-success'); - checked = false; - processInput(); - } - }); - init(); }); diff --git a/resources/views/trainer.php b/resources/views/trainer.php index 3b8d926..3794ec4 100644 --- a/resources/views/trainer.php +++ b/resources/views/trainer.php @@ -68,23 +68,9 @@ along with this program. If not, see . -
+

There are no verbs matching the criteria in our database.

-
-
-
- - -
-
-
-
- - -
-
-
-- cgit v1.2.3