您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Show amount of radical, kanji, vocabulary items remaining during review
// ==UserScript== // @name WaniKani Review Item Count Details // @namespace https://www.wanikani.com // @description Show amount of radical, kanji, vocabulary items remaining during review // @author irrelephant // @version 1.0 // @include *://www.wanikani.com/review/session* // @grant none // ==/UserScript== (function() { 'use strict'; if (!window.wkof) { var response = confirm('WaniKani Item Hover Details script requires WaniKani Open Framework.\n Click "OK" to be forwarded to installation instructions.'); if (response) { window.location.href = 'https://community.wanikani.com/t/instructions-installing-wanikani-open-framework/28549'; } return; } wkof.include('ItemData'); wkof.ready('ItemData').then(fetch_items); // This function is called when the ItemData module is ready to use. function fetch_items() { // Retrieve only the /subjects and /assignments endpoints. // var config = 'subjects, assignments'; var config = { wk_items: { options: { assignments: false, review_statistics: false, study_materials:false } } }; wkof.ItemData.get_items(config) .then(setup); } function setup(items) { console.log('Retrieved ' + items.length + ' items.'); $('#stats').append('<span id="review-count-details"></span>'); addStyle("#review-count-details span{padding-left:10px;opacity:0.8;}"); $.jStorage.listenKeyChange('activeQueue', function (key, action) { updateInfo(items); }); $.jStorage.listenKeyChange('reviewQueue', function (key, action) { updateInfo(items); }); } function updateInfo(allItems) { var itemCount = { radical:0, kanji: 0, vocabulary:0 }; let reviewQueue = $.jStorage.get('activeQueue').concat($.jStorage.get('reviewQueue')); reviewQueue.forEach(function(queueItem){ var type = getItemType(allItems, queueItem); itemCount[type]++; }, this); renderInfo(itemCount); } function renderInfo(itemCount){ $("#review-count-details").html("<span>R: "+ itemCount.radical + "</span><span>K: "+itemCount.kanji + "</span><span>V: "+itemCount.vocabulary+"</span>"); } function getItemType(allItems, queueItem){ var type = ""; var queueItemId = queueItem allItems.forEach(function(item){ if(item.id==queueItem.id){ type = item.object; } }, this); return type; } 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; } }());