wanikaniburned/static/quiz_item.js

241 lines
7.9 KiB
JavaScript
Raw Normal View History

2015-10-05 16:48:52 +01:00
// Generated by CoffeeScript 1.10.0
(function() {
var filterQuestions, getItemTypeFilters, getSrsTypeFilters, itemMax, linearCount, linearMode, refreshQuestion, refreshQuizCounter, selection, toggleQuizMode, updateQuizItemStats;
linearMode = false;
linearCount = 0;
2015-10-05 16:48:52 +01:00
selection = null;
itemMax = 1;
2015-10-05 16:48:52 +01:00
refreshQuestion = function() {
var input_element, items;
2015-10-05 16:48:52 +01:00
if (sessionStorage.getItem('user_items')) {
items = JSON.parse(sessionStorage.getItem('user_items'));
itemMax = items.length;
if (linearMode) {
selection = items[linearCount];
linearCount++;
refreshQuizCounter();
if (linearCount >= items.length) {
linearCount = 0;
}
} else {
selection = items[Math.floor(Math.random() * items.length)];
}
2015-10-05 16:48:52 +01:00
$("#help-area").text('');
$("#kana").removeClass("correct").val('');
$("#question-area").text('');
$("#question-image").attr("src", '');
$('#answer').addClass('hidden');
$('#answer').text(selection['answer']);
input_element = document.getElementById('kana');
$("#question-image").hide();
2015-10-05 16:48:52 +01:00
if (selection['item_type'] === 'radical') {
$("#kana").attr("placeholder", "Meaning");
document.body.style.backgroundColor = "deepskyblue";
wanakana.unbind(input_element);
if (selection['question'].indexOf('http') >= 0) {
$("#question-image").attr("src", selection['question']);
$("#question-image").show();
2015-10-05 16:48:52 +01:00
} else {
$("#question-area").text(selection['question']);
2015-10-05 16:48:52 +01:00
}
return document.getElementById('view-on-wk').href = "https://www.wanikani.com/radicals/" + selection['answer'];
2015-10-05 16:48:52 +01:00
} else {
if (selection['item_type'] === 'kanji') {
document.body.style.backgroundColor = "deeppink";
} else {
document.body.style.backgroundColor = "darkviolet";
}
$("#question-area").text(selection['question']);
if (selection['answer_type'] === 'eng') {
2015-10-05 16:48:52 +01:00
$("#kana").attr("placeholder", "Meaning");
wanakana.unbind(input_element);
2015-10-05 16:48:52 +01:00
} else {
$("#kana").attr("placeholder", "かな");
wanakana.bind(input_element);
2015-10-05 16:48:52 +01:00
}
return document.getElementById('view-on-wk').href = "https://www.wanikani.com/" + selection['item_type'] + "/" + selection['question'];
2015-10-05 16:48:52 +01:00
}
}
};
updateQuizItemStats = function() {
$('#radical-num').text(sessionStorage.getItem('radical_count'));
$('#kanji-num').text(sessionStorage.getItem('kanji_count'));
$('#vocab-num').text(sessionStorage.getItem('vocabulary_count'));
return $('#total-num').text(parseInt(sessionStorage.getItem('radical_count')) + parseInt(sessionStorage.getItem('kanji_count')) + parseInt(sessionStorage.getItem('vocabulary_count')));
};
getSrsTypeFilters = function() {
var s, srs_levels;
srs_levels = ['burnedcheck', 'enlightencheck', 'mastercheck', 'gurucheck', 'apprenticecheck'];
return ((function() {
var i, len, results;
results = [];
for (i = 0, len = srs_levels.length; i < len; i++) {
s = srs_levels[i];
if (document.getElementById(s).checked) {
results.push(document.getElementById(s).value);
}
}
return results;
})()).toString();
};
getItemTypeFilters = function() {
var item_types, s;
item_types = ['radicalcheck', 'kanjicheck', 'vocabcheck'];
return ((function() {
var i, len, results;
results = [];
for (i = 0, len = item_types.length; i < len; i++) {
s = item_types[i];
if (document.getElementById(s).checked) {
results.push(document.getElementById(s).value);
}
}
return results;
})()).toString();
};
filterQuestions = function() {
var target_url;
sessionStorage.removeItem('user_items');
sessionStorage.removeItem('radical_count');
sessionStorage.removeItem('kanji_count');
sessionStorage.removeItem('vocabulary_count');
target_url = "/user_items?level_range=" + $('#filter-input').val() + "&item_state=" + getSrsTypeFilters() + "&item_types=" + getItemTypeFilters();
return $.ajax({
url: target_url,
dataType: 'json',
success: function(e) {
if (e.hasOwnProperty('error')) {
document.getElementById('filter-input').value = '';
$('#error-text').text(e['error']);
return $('#error-area').show();
} else {
sessionStorage.setItem('user_items', JSON.stringify(e['item_list']));
sessionStorage.setItem('radical_count', e['radical_count']);
sessionStorage.setItem('kanji_count', e['kanji_count']);
sessionStorage.setItem('vocabulary_count', e['vocabulary_count']);
updateQuizItemStats();
return refreshQuestion();
}
}
});
};
$('#filter-form').submit(function(e) {
e.preventDefault();
$('#error-area').hide();
filterQuestions();
$('#modal-filter').modal('hide');
return linearCount = 0;
});
toggleQuizMode = function() {
linearMode = !linearMode;
if (linearMode) {
document.getElementById('quiz-counter').style.visibility = "visible";
$('#mode-toggle').text("Linear Mode");
} else {
linearCount = 0;
document.getElementById('quiz-counter').style.visibility = "hidden";
$('#mode-toggle').text("Random Mode");
}
return refreshQuestion();
};
refreshQuizCounter = function() {
document.getElementById('current-quiz').value = linearCount;
return document.getElementById('total-quiz').textContent = "/" + itemMax;
};
2015-10-05 16:48:52 +01:00
$(document).keypress(function(e) {
if (e.which === 13) {
return $("#submit-answer").click();
} else {
if ($("#kana").hasClass("wrong")) {
return $("#kana").removeClass("wrong");
}
2015-10-05 16:48:52 +01:00
}
});
$("#submit-answer").click(function(e) {
var expected_answer, input_answer;
2015-10-05 16:48:52 +01:00
e.preventDefault();
if ($("#kana").hasClass("correct")) {
return refreshQuestion();
} else {
input_answer = document.getElementById('kana').value;
expected_answer = selection['answer'].split(/[,\.]/g).map(function(x) {
return x.trim();
});
if (selection["item_type"] === "radical") {
expected_answer = expected_answer.map(function(x) {
return x.replace("-", " ");
});
}
if (expected_answer.indexOf(input_answer) !== -1) {
return $("#kana").addClass("correct").removeClass("wrong");
} else {
return $("#kana").addClass("wrong").removeClass("correct").val('');
}
2015-10-05 16:48:52 +01:00
}
});
$("#get-help").click(function(e) {
e.preventDefault();
return $("#answer").removeClass('hidden');
});
$("#api-refresh").click(function(e) {
e.preventDefault();
$("#api-refresh").find('img').addClass('glyphicon-spin');
return $.post("/refresh").success(function() {
2015-10-06 00:03:07 +01:00
refreshQuestion();
$("#api-refresh").find('img').removeClass('glyphicon-spin');
2015-10-06 00:03:07 +01:00
return $('#success-area').show();
}).fail(function() {
$('#error-area').show();
$('#error-text').text("Cannot refresh API. Try again later.");
return $("#api-refresh").find('img').removeClass('glyphicon-spin');
});
});
$('#error-area').find('button').click(function() {
return $('#error-area').hide();
2015-10-05 16:48:52 +01:00
});
2015-10-06 00:03:07 +01:00
$('#success-area').find('button').click(function() {
return $('#success-area').hide();
});
$('#skip-to-item').click(function(e) {
var targetValue;
e.preventDefault();
targetValue = document.getElementById('current-quiz').value - 1;
if (targetValue >= 0 && targetValue < itemMax) {
linearCount = targetValue;
return refreshQuestion();
} else {
return refreshQuizCounter();
}
});
2015-10-05 16:48:52 +01:00
$(function() {
return $(document).ready(function() {
$('[data-toggle="tooltip"]').tooltip();
document.getElementById('mode-toggle').onclick = toggleQuizMode;
return filterQuestions();
2015-10-05 16:48:52 +01:00
});
});
}).call(this);
//# sourceMappingURL=quiz_item.js.map