🏠 Home 

Wanikani Mistake Delay

Adds a delay after wrong answers to prevent double-tapping <enter>

// ==UserScript==
// @name        Wanikani Mistake Delay
// @namespace   wkmistakedelay
// @description Adds a delay after wrong answers to prevent double-tapping <enter>
// @include     https://www.wanikani.com/review/session*
// @include     https://www.wanikani.com/lesson/session*
// @version     2.1.1
// @author      Robin Findley
// @copyright   2017+, Robin Findley
// @license     MIT; http://opensource.org/licenses/MIT
// @run-at      document-end
// @grant       none
// ==/UserScript==
window.wkmistakedelay = {};
(function(gobj) {
//==[ Settings ]=====================================================
var settings = {
// Amount of time to delay (in milliseconds).
delay_period: 2000,
// Delay when answer is slightly off (e.g. minor typo).
delay_slightly_off: 1,
// Delay when multiple answers are available.
delay_multiple: 1
};
//===================================================================
// The amount of time to disable 2nd <enter> after a mistake (in milliseconds).
var old_submit_handler, old_answer_checker, ignore_submit = false;
function new_answer_checker() {
// Call the original answer checker.
var r###lt = old_answer_checker.apply(this, arguments);
// Check if we have any reason to delay.
var delay = false;
if ((!r###lt.passed && !r###lt.exception) || (settings.delay_multiple && r###lt.multipleAnswers))
delay = true;
// Perform a delayed check to see if the answer exception message pops up.
if (!delay && settings.delay_slightly_off) {
setTimeout(function(){
if (($('#answer-exception').length > 0) && ($('#answer-exception').text().match(/a bit off/) !== null)) {
console.log('Delaying due to "a bit off"');
do_delay();
}
}, 1);
}
// Initiate the delay if needed.
if (delay) do_delay();
function do_delay() {
console.log('Delaying...');
ignore_submit = true;
setTimeout(function() {
ignore_submit = false;
$('#user-response').attr('disabled','disabled');
}, settings.delay_period);
}
return r###lt;
}
function new_submit_handler(e) {
if (ignore_submit) return false;
return old_submit_handler.apply(this, arguments);
}
function startup() {
// Check if we can intercept the submit button handler.
try {
old_submit_handler = $._data( $('#answer-form button')[0], 'events').click[0].handler;
old_answer_checker = answerChecker.evaluate;
} catch(err) {
}
if (typeof old_submit_handler !== 'function' || typeof old_answer_checker !== 'function') {
alert('Wanikani Mistake Delay script is not working.');
return;
}
// Replace the handlers.
$._data( $('#answer-form button')[0], 'events').click[0].handler = new_submit_handler;
answerChecker.evaluate = new_answer_checker;
}
// Run startup() after window.onload event.
if (document.readyState === 'complete')
startup();
else
window.addEventListener("load", startup, false);
})(window.wkselfstudy);