您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows status of your Wanikani lessons/reviews while in the forums.
当前为
// ==UserScript== // @name Wanikani Forums Lesson/Review Status // @namespace rfindley // @description Shows status of your Wanikani lessons/reviews while in the forums. // @version 1.0.1 // @include https://community.wanikani.com/* // @require https://gf.qytechs.cn/scripts/27967-wanikani-forums-global-framework/code/Wanikani%20Forums%20Global%20Framework.js?version=179603 // @copyright 2017+, Robin Findley // @license MIT; http://opensource.org/licenses/MIT // @run-at document-end // @grant none // ==/UserScript== window.wkf_lrstatus = {}; (function(gobj) { var settings_url = '/scripts/lrstatus'; var randomize_query = 300; // Randomize API query times over a 300 sec period to spread server load. //------------------------------------------------------------------- // Let the global script know about our settings page (if we have one) //------------------------------------------------------------------- // window.wkf_global.add_script('Lesson/Review Status', settings_url); var apikey = window.wkf_global.get_apikey(); if (apikey === null) return; // Just in case the auto-redirect doesn't work // Don't run past this point if we are on a settings screen. if (window.location.pathname.match(/^\/scripts\//) !== null) return; //------------------------------------------------------------------- // Styling info for this script. //------------------------------------------------------------------- var css = '.dashboard_bubble {background-color:#6cf; font-size:0.8em; border-radius:0.5em; padding:0 6px; margin:0 4px; color:#fff; font-weight:bold;}'+ '.dashboard_bubble.zero {background-color:#bdbdbd;}'; //------------------------------------------------------------------- // Update the lesson/review count info on the screen. //------------------------------------------------------------------- function update_counts(lessons, reviews) { var lc = $('#lesson_count'); var rc = $('#review_count'); if (lc.length != 1) { $('head').append('<style type="text/css">'+css+'</style>'); lc = $('<span id="lesson_count" class="dashboard_bubble"></span>'); rc = $('<span id="review_count" class="dashboard_bubble"></span>'); $('.wanikani-app-nav > ul > li:contains("Lessons")').append(lc); $('.wanikani-app-nav > ul > li:contains("Reviews")').append(rc); } lc.text(lessons); rc.text(reviews); if (lessons === 0) lc.addClass('zero'); else lc.removeClass('zero'); if (reviews === 0) rc.addClass('zero'); else rc.removeClass('zero'); } //------------------------------------------------------------------- // Fetch lesson/review count info from the server. //------------------------------------------------------------------- function fetch_data() { var now = Math.round(new Date().getTime()/1000); window.wkf_global.query_api('/study-queue') .then(function(json){ var lessons = json.requested_information.lessons_available; var reviews = json.requested_information.reviews_available; localStorage.setItem('wkf_lrstatus.last_query', now); localStorage.setItem('wkf_lrstatus.lesson_count', lessons); localStorage.setItem('wkf_lrstatus.review_count', reviews); update_counts(lessons, reviews); }); var next_query = Math.trunc((now/900)+1) * 900 + Math.round(Math.random()*randomize_query) - now; setTimeout(fetch_data, next_query*1000); } //------------------------------------------------------------------- // Startup. Runs at document 'load' event. //------------------------------------------------------------------- function startup() { var last_user = localStorage.getItem('wkf_lrstatus.last_user') || ''; var current_user = $('#current-user img').attr('title'); if (last_user != current_user && current_user !== undefined) { localStorage.removeItem('wkf_lrstatus.last_query'); localStorage.removeItem('wkf_lrstatus.lesson_count'); localStorage.removeItem('wkf_lrstatus.review_count'); localStorage.setItem('wkf_lrstatus.last_user', current_user); } var now = Math.trunc(new Date().getTime()/1000); var last_qtr_hr = Math.trunc(now / 900) * 900; var last_query = Number(localStorage.getItem('wkf_lrstatus.last_query')); if (last_query < last_qtr_hr) { fetch_data(); } else { var lessons = Number(localStorage.getItem('wkf_lrstatus.lesson_count')); var reviews = Number(localStorage.getItem('wkf_lrstatus.review_count')); update_counts(lessons, reviews); } var next_query = Math.trunc((now/900)+1) * 900 + Math.round(Math.random()*randomize_query) - now; setTimeout(fetch_data, next_query*1000); } // Run startup() after window.onload event. if (document.readyState === 'complete') startup(); else window.addEventListener("load", startup, false); })(window.wkf_lrstatus);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址