WaniKani Review Search

Do a WaniKani Search on your review answer. By gth99.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name          WaniKani Review Search
// @namespace     https://www.wanikani.com
// @description   Do a WaniKani Search on your review answer.  By gth99.
// @version 1.6.1
// @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
// @grant       none
// ==/UserScript==



function get(id) {
    if (id && typeof id === 'string') {
        id = document.getElementById(id);
    }
    return id || null;
}



function init(){
	console.log('init() start');
	var footer = document.getElementsByTagName('footer')[0];
    var srchBtn = document.createElement("BUTTON");

    srchBtn.id = "hook_button";
    srchBtn.title = "Search";
    srchBtn.innerText = "Search";
    srchBtn.onclick = function(){window.dispatchEvent(new Event('evtWKSearch'))};

    footer.insertBefore(srchBtn, footer.firstChild);

	window.addEventListener('evtWKSearch',doWKSearch);

	window.addEventListener("keypress", hook_hotkey);

	var hotkeys = get("hotkeys");

	if (hotkeys) {

		var tbl = hotkeys.childNodes[3];
		console.log(tbl);
	
		if (tbl) {

			// Create an empty <tr> element and add it to the 1st position of the table:
			var row = tbl.insertRow(0);

			// Insert new cells (<td> elements) at the 1st and 2nd position of the "new" <tr> element:
			var cell1 = row.insertCell(0);
			var cell2 = row.insertCell(1);

			// Add some text to the new cells:
			cell1.innerHTML = "<span>S</span>";
			cell2.innerHTML = "Search";
		}
	}

	console.log('init() end');
}


function hook_hotkey( e ) {

	var thebody = document.getElementsByTagName("body")[0];

	if (document.activeElement == thebody) {
		var thechar = e.which || e.keyCode;
		if (thechar == 83 || thechar == 115) {    // 's' key

			doWKSearch();
		}
	}
}



var sText = "";
var sWindow = null;



function copytext(){

	var qin;

	if (sWindow && sWindow.document) {

		qin = sWindow.document.getElementById("query");
	}

	if (qin) {

		qin.focus();
		qin.value = sText;
	}

	sWindow = null;
	sText = "";
}



function doWKSearch(){

    sText = get("user-response").value;
    sWindow = window.open("https://www.wanikani.com/about");

    if (sWindow) {
    	sWindow.addEventListener("DOMContentLoaded", copytext, false);
    }
}


init();
console.log('WK Rvw Srch load end');