The New And Improved List Of API and Third Party Apps

Yep, it works. I was not happy with how the script forgot to concatinate the strings to say 部首の名前 and just says 名前. I edited the script to add the の and to concatinate the string so it says the full thing:

Script editied to say the whole thing
// ==UserScript==
// @name        WK Custom Review Question (KunOn+)
// @namespace   WK_CustomQuestion
// @description Changes the text of the Review or Lesson Quiz question. Specifies ON or KUN reading for Kanji. Options to have the text in English or Japanese.
// @author      hoovard
// @include     https://www.wanikani.com/review/session*
// @include     http://www.wanikani.com/review/session*
// @include     https://www.wanikani.com/lesson/session*
// @include     http://www.wanikani.com/lesson/session*
// @version     0.4.3
// @license     Do what you want with it (Preferably improve it).
// @grant       none
// ==/UserScript==
// Version 0.4.3 applies to Reviews and Lesson Quizzes.

// Language options
// English "en", Japanese "ja"
var strLang = "ja";


// Tested on the following:
// Firefox 35.0.1 and Chrome 39.0.2171.95 (64-bit), Linux Mint 17.1 Cinnamon 64-bit
// Firefox 35.0.1 and Chrome 40.0.2214.115 m, Windows 8.1 64-bit

// Thanks to Rui Pinheiro (LordGravewish) for the original script 
// and to Ethan for the idea to use MutationObserver to detect changes in the DOM.

// Vars to compose the replacement question string
var strKanji;
var strRadical;
var strVocab;
var strMeaning;
var strReading;
var strVocabReading;
var strOn;
var strKun;
var strName;

// Translations
switch (strLang)
{
	case "en":
		strKanji = "Kanji";
		strRadical = "Radical";
		strVocab = "Vocabulary";
		strMeaning = "Meaning";
		strReading = "yomi";
		strVocabReading = "Reading";
		strOn = "on'";
		strKun = "kun'";
		strName = "Name";
		break;
	case "ja":
		strKanji = "漢字の";
		strRadical = "部首の";
		strVocab = "単語の";
		strMeaning = "意味";
		strReading = "読み";
		strVocabReading = "読み";
		strOn = "音";
		strKun = "訓";
		strName = "名前";
		break;
}

// Variable to save and check against the previous contents of the jStorage item
var objSavedCurrentItem;

// Review or Lesson Quiz. jStorage objects are different.
bIsReview = ($(location).attr('href').indexOf("review") != -1);

// Code from Stack Overflow to detect changes in the DOM. 
// (http://stackoverflow.com/questions/3219758/detect-changes-in-the-dom/14570614#14570614)
var observeDOM = (function(){
    var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
        eventListenerSupported = window.addEventListener;

    return function(obj, callback){
        if( MutationObserver ){
            // define a new observer
            var obs = new MutationObserver(function(mutations, observer){
                if( mutations[0].addedNodes.length || mutations[0].removedNodes.length )
                    callback();
            });
            // have the observer observe for changes in children
            obs.observe( obj, { childList:true, subtree:true });
        }
        else if( eventListenerSupported ){
            obj.addEventListener('DOMNodeInserted', callback, false);
            obj.addEventListener('DOMNodeRemoved', callback, false);
        }
    }
})();

// Callback function observing the 'question-type' div 'h1' element
var observeMe = $('#question-type h1')[0];
observeDOM( observeMe ,function(){ 
    var objCurItem;
    if (bIsReview) {
		objCurItem = $.jStorage.get("currentItem");
	} else {
		objCurItem = $.jStorage.get("l/currentQuizItem");
	}
	
    
    // Make sure that the currentItem has changed before updating. 
    // Otherwise you will respond to your own DOM changes.
    if (objCurItem != objSavedCurrentItem) {
		objSavedCurrentItem = objCurItem;
		
		var strQuestionType;
		if (bIsReview) {
			strQuestionType = $.jStorage.get("questionType");
		} else {
			strQuestionType = $.jStorage.get("l/questionType");
		}
		
		var strItemType = "";
		var strReadingType = "Reading";
		
		// Compose the string elements to be sent into the h1 element
		if ("kan" in objCurItem)
		{
			// Kanji
			strItemType = strKanji;
			if (strQuestionType == "reading") {
				if(objCurItem.emph == "onyomi")
					strReadingType = strKanji + strOn + strReading;
				else
					strReadingType = strKanji + strKun + strReading;
			} else {
				strReadingType = strKanji + strMeaning;
			}
		}
		else if ("voc" in objCurItem)
		{
			// Vocabulary
			strItemType = strVocab;
			if (strQuestionType == "reading") {			
					strReadingType = strVocab + strVocabReading;
			} else {
				strReadingType = strVocab + strMeaning;
			}
		}
		else if ("rad" in objCurItem)
		{
			// Radical
			strItemType = strRadical;
			strReadingType = strRadical + strName;
		}
		
		// replace the contents of #question-type h1
		switch (strLang)
		{
			case "en":
				$('#question-type h1').html(strItemType + ' <strong>' + strReadingType + '</strong>');
				break;
			case "ja":
				$('#question-type h1').html(strReadingType);
				break;					
		}
	}
	
});

So in itself, the script always ran perfectly fine, it just wasn’t fully finished I think. This script version as posted by a commenter however doesn’t work at all. The script as provided on https://greasyfork.org , perfectly fine.

1 Like