您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Takes kanji from jisho.org and adds to memory bank.
// ==UserScript== // @name Kanji Memory Add // @namespace kanjimemoryadd // @license MIT // @version 0.1 // @description Takes kanji from jisho.org and adds to memory bank. // @author SilverGem // @match https://jisho.org/search/* // @grant GM_xmlhttpRequest // ==/UserScript== (function () { const kanjiList = []; const meaningList = []; const readingList = []; const URL = "https://kanji-memory.herokuapp.com"; const EMAIL = ""; const PASSWORD = ""; // Put kanji, reading, and meaning into respective lists function getElementsWords() { const elementsKanjiReadingList = document.getElementsByClassName("concept_light-representation"); const elementsHolderMeaningList = document.getElementsByClassName("concept_light-meanings"); // for (let i = 0; i < elementsKanjiReadingList.length; i++) { kanjiList.push(elementsKanjiReadingList[i].children["1"].innerText); // kanji string list readingList.push(elementsKanjiReadingList[i].children["0"].innerText); // reading string list // nested meaning string list var elementsMeaningList = elementsHolderMeaningList[i].getElementsByClassName("meaning-meaning"); var meaningString = ""; for (let j = 0; j < elementsMeaningList.length; j++) { //grammar string var grammarString = elementsMeaningList[j].parentNode.parentNode.previousSibling.innerText; meaningString += grammarString + "\n"; // // meaning string meaningString += elementsMeaningList[j].innerText; meaningString += "\n\n"; // } meaningList.push(meaningString); // } } // Create hyperlink for each kanji tied to sendData function createHLink() { for (let i = 0; i < kanjiList.length; i++) { // create hyperlink var hLink = document.createElement("a"); // change hyperlink attributes hLink.id = `sendHLink${i}`; hLink.className = "sendHLinkClass"; hLink.style.textDecoration = "none"; hLink.innerText = "+"; // hLink.addEventListener("click", clickedLink.bind(null, i), { once: true }); // // put hyperlink onto website page document.getElementsByClassName("concept_light-representation")[i].appendChild(hLink); // } } // hyperlink event listener calling function clickedLink(i) { // change hyperlink to green when clicked var hLinkElementChange = document.getElementById(`sendHLink${i}`); hLinkElementChange.style.color = "black"; // // send clicked hyperlink's connected kanji data sendData(kanjiList[i], meaningList[i], readingList[i]); } // Send post to server to get back list of booleans if vocab is in user's database function checkAlreadyReviewed() { GM_xmlhttpRequest({ method: "POST", url: URL + "/checkForVocab", data: "email=" + encodeURIComponent(EMAIL) + "&" + "password=" + encodeURIComponent(PASSWORD) + "&" + "kanjiList=" + encodeURIComponent(kanjiList) , headers: { "Content-Type": "application/x-www-form-urlencoded" }, onload: function (response) { // boolean list response var res = JSON.parse(response.responseText); // hyperlink element list var hLinkElement = document.getElementsByClassName("sendHLinkClass"); // if boolean is true, then change respective hyperlink color for (let i = 0; i < res.length; i++) { if (res[i] === true) { hLinkElement[i].style.color = "black"; } } // } }); } // Send data tied to singular hyper link function sendData(kanjiToBeReviewed, meaningToBeReviewed, readingToBeReviewed) { GM_xmlhttpRequest({ method: "POST", url: URL + "/addVocab", data: "email=" + encodeURIComponent(EMAIL) + "&" + "password=" + encodeURIComponent(PASSWORD) + "&" + "kanjiToBeReviewed=" + encodeURIComponent(kanjiToBeReviewed) + "&" + "meaningToBeReviewed=" + encodeURIComponent(meaningToBeReviewed) + "&" + "readingToBeReviewed=" + encodeURIComponent(readingToBeReviewed) , headers: { "Content-Type": "application/x-www-form-urlencoded" }, onload: function (response) { console.log(response.responseText); } }); } try { getElementsWords(); createHLink(); checkAlreadyReviewed(); } catch (exception) { } })();