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 .
                         
                     
                 
-                
         
-- 
cgit v1.2.3