您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hides mnemonics containing certain words of phrases
// ==UserScript== // @name Wanikani: Mnemonic Trigger Filter // @namespace mnemonic_trigger_filter // @version 1.0.1 // @description Hides mnemonics containing certain words of phrases // @author Kumirei // @include /^https://(www|preview).wanikani.com/(review/session|dashboard)?$/ // @grant none // @license MIT // ==/UserScript== ;(function ($, wkof) { // Make sure WKOF is installed let script_id = 'mnemonic_trigger_filter' let script_name = 'Mnemonic Trigger Filter' 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 } // Wait until modules are ready then initiate script wkof.include('Menu,Settings') wkof.ready('Menu,Settings').then(load_settings).then(install_menu).then(initiate) // Load settings from WKOF function load_settings() { let defaults = { words: '' } return wkof.Settings.load(script_id, defaults) } // Installs the settings button in the menu function install_menu() { let config = { name: script_id, submenu: 'Settings', title: script_name, on_click: open_settings, } wkof.Menu.insert_script_link(config) } // Open the settings dialog function open_settings() { let config = { script_id: script_id, title: script_name, content: { words: { type: 'text', label: 'Words', hover_tip: 'Comma separated words and/or phrases', placeholder: 'Comma-separated words/phrases', }, }, } let dialog = new wkof.Settings(config) dialog.open() } function initiate() { if (window.location.href === 'https://www.wanikani.com/review/session') { const target = document.getElementById('information') const config = { attributes: false, childList: true, subtree: true } const observer = new MutationObserver(mutation_handler) observer.observe(target, config) } } function mutation_handler(mutation_list, observer) { for (const mutation of mutation_list) { if (mutation.target.id === 'item-info-col2' && mutation.addedNodes.length === 5) { ;[0, 2].forEach((i) => { const elem = mutation.addedNodes[i].children[1] const text = elem.innerText.toLowerCase() for (const word of wkof.settings[script_id].words.split(',')) { if (text.includes(word.trim().toLowerCase())) { elem.innerText = 'Mnemonic hidden by trigger filter' break } } }) } } } })(window.jQuery, window.wkof)