您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Lets you choose the size of your review session
当前为
// ==UserScript== // @name Wanikani: Review Queue Sizer // @namespace http://tampermonkey.net/ // @version 1.0.2 // @description Lets you choose the size of your review session // @author Kumirei // @include /^https://(www|preview).wanikani.com/(lesson|review)/session$/ // @grant none // ==/UserScript== ;(function (wkof, $) { let script_name = 'Wanikani: Review Queue Sizer' let script_title = 'Review Queue Sizer' let script_id = 'review_queue_sizer' // Make sure WKOF is installed if (!wkof) { let response = confirm( script_name + ' 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('Menu,Settings,ItemData') wkof.ready('Menu,Settings').then(load_settings).then(install_menu).then(start) function start() { // Run once items have loaded, and only once let stop = false $.jStorage.listenKeyChange('reviewQueue', () => { if (!stop) { stop = true run() } }) } // Load WKOF settings function load_settings() { let defaults = { qsize: 0 } return wkof.Settings.load(script_id, defaults) } // Installs the options button in the menu function install_menu() { let config = { name: script_id, submenu: 'Settings', title: script_title, on_click: open_settings, } wkof.Menu.insert_script_link(config) } function open_settings() { var config = { script_id: script_id, title: script_title, pre_open: settings_pre_open, on_save: settings_on_save, on_close: run, content: { qsize: { type: 'number', label: 'Queue size', default: 0, hover_tip: '0 means unlimited', }, }, } let dialog = new wkof.Settings(config) dialog.open() } function settings_on_save(settings) { run() } function settings_pre_open(settings) { const target = settings[0].querySelector('#review_queue_sizer_qsize') target.addEventListener('keydown', (e) => { if (e.target.nodeName == 'INPUT' && e.keyCode == 8) { e.target.value = e.target.value.slice(0, -1) fire_event(target, 'change') } }) } // Retrieves the current review queue function get_queue() { const items = [...($.jStorage.get('activeQueue') ?? []), ...$.jStorage.get('reviewQueue')] return items } // Create new queue function run() { let items = get_queue() const limit = wkof.settings[script_id].qsize || items.length const done = $.jStorage.get('completedCount') $('#bar').width((done / limit) * 100 + '%') const truncated = items.slice(0, limit - done) $.jStorage.set('reviewQueue', truncated.slice(10)) $.jStorage.set('activeQueue', truncated.slice(0, 10)) $.jStorage.set('currentItem', truncated[0]) } function fire_event(elem, event) { let e = document.createEvent('HTMLEvents') e.initEvent(event, true, true) // Type, bubbling, cancelable return !elem.dispatchEvent(e) } })(window.wkof, window.jQuery)