aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2016-01-05 19:27:24 +0100
committerCamil Staps2016-01-05 19:29:19 +0100
commit8583f7c119434dccacdb1d6d14136cae3533fa3f (patch)
treee1d6f80a80a30166d24c69be8ed4805b8c80b841
parentMerge branch 'master' of github.com:camilstaps/HebrewParseTrainer (diff)
Allow for multiple correct answers
-rw-r--r--app/Http/Controllers/RandomVerbController.php5
-rw-r--r--app/Verb.php6
-rw-r--r--public/js/hebrewparsetrainer.js140
-rw-r--r--resources/views/trainer.php16
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 = "<div class='row trainer-input'>\
+ <div class='col-md-8'>\
+ <div class='form-group'>\
+ <label for='trainer-input-"+input_count+"'>Parse:</label>\
+ <input type='text' class='form-control' id='trainer-input-"+input_count+"' placeholder='Q pf 3 m s'/>\
+ </div>\
+ </div>\
+ <div class='col-md-4'>\
+ <div class='form-group'>\
+ <label for='trainer-parsed-"+input_count+"'>Interpreted as:</label>\
+ <input type='text' class='form-control' id='trainer-parsed-"+input_count+"' readonly='readonly'/>\
+ </div>\
+ </div>\
+ </div>";
+ $('#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 <http://www.gnu.org/licenses/>.
</div>
</form>
</div>
- <div class="col-md-10 col-sm-8">
+ <div class="col-md-10 col-sm-8" id="trainer-input-container"">
<p class="bg-danger" id="trainer-404">There are no verbs matching the criteria in our database.</p>
<p class="lead"><span class="hebrew hebrew-large" id="trainer-verb"></span><span id="trainer-answer"></span></p>
- <div class="row">
- <div class="col-md-8">
- <div class="form-group">
- <label for="trainer-input">Parse:</label>
- <input type="text" class="form-control" id="trainer-input" placeholder="Q pf 3 m s"/>
- </div>
- </div>
- <div class="col-md-4">
- <div class="form-group">
- <label for="trainer-parsed">Interpreted as:</label>
- <input type="text" class="form-control" id="trainer-parsed" readonly="readonly"/>
- </div>
- </div>
- </div>
</div>
</div>
</div>