您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Change the order of lesson tabs
// ==UserScript== // @name Wanikani Lesson Tab Transmutation // @namespace mempo // @description Change the order of lesson tabs // @include https://www.wanikani.com/lesson/session // @version 1.2 // @grant none // @run-at document-end // ==/UserScript== var settingsKanji = ""; var settingsVocab = ""; var vocReorderReadingOption = false; //ATTENTION: It's only possible to choose one of the options below. //If you select multiple, only the last one will work var kanReorderExamplesOption = true; var kanReorderReadingOption = false; var kanReorderExamplesReadingOption = false; console.log('START OF WLTT'); var intervalFunction = setInterval(function(){ if($('#loading-screen').css('display') !== 'none'){ console.log('WLTT loading...'); }else{ console.log("WLTT LOADED"); clearInterval(intervalFunction); WLTTreorder(); $.jStorage.listenKeyChange('l/currentLesson', WLTTreorder); addSettings(); addButtons(); addStyle(cssModalWindow); fetchSettings(); } },250); var WLTTreorder = function(){ if($.jStorage.get('l/currentLesson').kan){ //kanji //console.log('/// the current lesson is kanji'); //radical examples meaning reading if(kanReorderExamplesOption){ kanReorderExamples(); } //radical reading meaning examples if(kanReorderReadingOption){ kanReorderReading(); } //radical examples reading meaning if(kanReorderExamplesReadingOption){ kanReorderExamplesReading(); } }else{//vocab //console.log('/// the current lesson is vocab'); //breakdown reading meaning if(vocReorderReadingOption){ vocReorderReading(); } } } var kanReorderExamples = function(){ $('#supplement-nav li:nth-child(2)')[0].innerHTML = "Examples"; $('#supplement-nav li:nth-child(3)')[0].innerHTML = "Meaning"; $('#supplement-nav li:nth-child(4)')[0].innerHTML = "Reading"; $('#supplement-kan-meaning').appendTo('#supplement-kan'); $('#supplement-kan-reading').appendTo('#supplement-kan'); } var kanReorderReading = function(){ $('#supplement-nav li:nth-child(2)')[0].innerHTML = "Reading"; $('#supplement-nav li:nth-child(3)')[0].innerHTML = "Meaning"; $('#supplement-kan-meaning').appendTo('#supplement-kan'); $('#supplement-kan-related-vocabulary').appendTo('#supplement-kan'); } var kanReorderExamplesReading = function(){ $('#supplement-nav li:nth-child(2)')[0].innerHTML = "Examples"; $('#supplement-nav li:nth-child(3)')[0].innerHTML = "Reading"; $('#supplement-nav li:nth-child(4)')[0].innerHTML = "Meaning"; $('#supplement-kan-reading').appendTo('#supplement-kan'); $('#supplement-kan-meaning').appendTo('#supplement-kan'); } var vocReorderReading = function(){ $('#supplement-nav li:nth-child(2)')[0].innerHTML = "Reading"; $('#supplement-nav li:nth-child(3)')[0].innerHTML = "Meaning"; $('#supplement-voc-meaning').appendTo('#supplement-voc'); } var cssModalWindow = ".white_content {" + "display: none;"+ "position: absolute; "+ "top: 25%;"+ "left: 25%;"+ "width: 50%;"+ "height: 75%;"+ "padding: 16px;"+ "background-color: white;"+ "z-index:9002;"+ "letter-spacing: 0;" + "overflow: auto;"; var htmlModalWindow = '' + '<h1>Settings</h1>' + '<form action="#" method="get"> ' + ' <h2>Kanji</h2>' + ' <input id="k_option1" name="kanji_option" value="0" type="radio">' + '<label for="k_option1">None</label> <br>' + '<input id="k_option2" name="kanji_option" value="1" type="radio">' + '<label for="k_option2">Radical examples meaning reading (default) </label> <br>' + '<input id="k_option3" name="kanji_option" value="2" type="radio">' + '<label for="k_option3">Radical reading meaning examples </label> <br>' + '<input id="k_option4" name="kanji_option" value="3" type="radio">' + '<label for="k_option4">Radical examples reading meaning</label> <br>' + '<h2>Vocab</h2>' + '<input id="v_option1" name="vocab_option" value="0" type="radio">' + '<label for="v_option1">None</label> <br>' + '<input id="v_option2" name="vocab_option" value="1" type="radio">' + '<label for="v_option2">Breakdown reading meaning</label> <br /> <br />' + '</form>'+ ' <div id="btn_submit">Save Settings</div>'+ '<div id="settings_saved" style="display: none; padding: 5px;">Settings saved!</div>'; var addButtons = function () { $("<div />", { id : "WLTT_button", title : "Settings: Wanikani Lesson Tab Transmutation", }) .text("WLTT Settings") .css({"background-color":"#738994"}) .css({"opacity":"1"}) .css({"display":"inline-block"}) .css({"font-size":"0.8125em"}) .css({"color":"#FFF"}) .css({"cursor":"pointer"}) .css({"padding":"10px"}) .css({"vertical-align":"bottom"}) .on("click", showSettings) .prependTo("footer"); }; var addSettings = function(){ //<div id="light" class="white_content">This is the lightbox content. <a href = "javascript:void(0)" onclick = "document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none'">Close</a></div> //<div id="fade" class="black_overlay"></div> $("<div />", { id : "light", class : "white_content", }).appendTo("#lessons"); $("#light").html(htmlModalWindow); $("#btn_submit") .on("click", saveSettings) .css({"background-color":"#738994"}) .css({"display":"inline"}) .css({"color":"white"}) .css({"padding":"5px"}) .css({"border-radius":"5px"}); $("<div />", { id : "fade", class : "black_overlay", }) .css({"display":"none"}) .css({"position":"fixed"}) .css({"top":"0%"}) .css({"left":"0%"}) .css({"width":"100%"}) .css({"height":"100%"}) .css({"background-color":"black"}) .css({"z-index":"9001"}) .css({"opacity":"0.8"}) .css({"-moz-opacity":"0.8"}) .css({"filter":"alpha(opacity=80)"}) .on("click", hideSettings) .appendTo("#lessons"); } var showSettings = function () { document.getElementById('light').style.display='block'; document.getElementById('fade').style.display='block'; } var hideSettings = function () { document.getElementById('light').style.display='none'; document.getElementById('fade').style.display='none'; document.getElementById('settings_saved').style.display='none'; } var fetchSettings = function() { settingsKanji = $.jStorage.get('WLTT_Settings_Kanji'); settingsVocab = $.jStorage.get('WLTT_Settings_Vocab'); refreshOrdering(); if(settingsKanji){ switch(settingsKanji){ case "0": $("#k_option1").prop("checked", true); break; case "1": $("#k_option2").prop("checked", true); break; case "2": $("#k_option3").prop("checked", true); break; case "3": $("#k_option4").prop("checked", true); break; } switch(settingsVocab){ case "0": $("#v_option1").prop("checked", true); break; case "1": $("#v_option2").prop("checked", true); break; } }else{ // init //Default option: KanjiOption1 && VocabOption0 $.jStorage.set('WLTT_Settings_Kanji',"1"); $.jStorage.set('WLTT_Settings_Vocab',"0"); settingsKanji = "1"; settingsVocab = "0"; $("#k_option2").prop("checked", true); $("#v_option1").prop("checked", true); } } var saveSettings = function() { console.log('WLTT: Settings saved!'); settingsKanji = $('input[name=kanji_option]:checked').val(); settingsVocab = $('input[name=vocab_option]:checked').val(); $.jStorage.set('WLTT_Settings_Kanji',settingsKanji); $.jStorage.set('WLTT_Settings_Vocab',settingsVocab); refreshOrdering(); $("#settings_saved").css('display', "block"); } var refreshOrdering = function() { switch(settingsKanji){ case "0": kanReorderExamplesOption = false; kanReorderReadingOption = false; kanReorderExamplesReadingOption = false; break; case "1": kanReorderExamplesOption = true; kanReorderReadingOption = false; kanReorderExamplesReadingOption = false; break; case "2": kanReorderExamplesOption = false; kanReorderReadingOption = true; kanReorderExamplesReadingOption = false; break; case "3": kanReorderExamplesOption = false; kanReorderReadingOption = false; kanReorderExamplesReadingOption = true; break; } switch(settingsVocab){ case "0": vocReorderReadingOption = false; break; case "1": vocReorderReadingOption = true; break; } WLTTreorder(); } function addStyle(aCss) { var head, style; head = document.getElementsByTagName('head')[0]; if (head) { style = document.createElement('style'); style.setAttribute('type', 'text/css'); style.textContent = aCss; head.appendChild(style); return style; } return null; } // RESEARCH CODE - for educational purposes //////////////// ATTEMPT #1 //Moves content, but internal counter li.active.data(index) jumps to 2 //Therefore, meaning is skipped altogether dispite index===1 //Manually selecting tabs really fucks shit up. //$('#supplement-nav li:nth-child(3)').data("index",1); //$('#supplement-nav li:nth-child(2)').data("index",2); //////////////// ATTEMPT #2 /* //moves needle out of order //completes cycle //shows meaning -> reading $('#supplement-nav li:nth-child(3)').attr('data-index', 1); $('#supplement-nav li:nth-child(2)').attr('data-index', 2); */ //////////////// ATTEMPT #3 /* //Works, but fucks up page content every other item //Cause unknown var meaning = $('#supplement-voc-meaning').html(); var reading = $('#supplement-voc-reading').html(); $('#supplement-voc-reading').html(meaning); $('#supplement-voc-meaning').html(reading); $('#supplement-nav li:nth-child(2)')[0].innerHTML = "Reading"; $('#supplement-nav li:nth-child(3)')[0].innerHTML = "Meaning"; */