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