您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a timer during reviews and displays the final time afterward
当前为
// ==UserScript== // @name Wanikani Egg Timer // @namespace wkeggtimer // @description Adds a timer during reviews and displays the final time afterward // @include http://www.wanikani.com/review* // @include https://www.wanikani.com/review* // @version 0.3 // @author Horus Scope // @grant none // @license GPL version 3 or later: http://www.gnu.org/copyleft/gpl.html // ==/UserScript== function timeStamp( inc = 0 ) { var prev = parseInt(window.localStorage.eggtimer,10) + inc; window.localStorage.eggtimer = prev; // Yes, parseInt is prettier. var hours = Math.floor(prev / 60 / 60); var minutes = Math.floor( (prev - (hours*60*60)) / 60 ); var seconds = prev - hours*60*60 - minutes*60; return "" + (hours? hours+"h " : "") + (minutes? minutes+"m " : "") + (seconds? seconds+"s" : ""); } var timeSpan; // referenced in go( ) function generate( ) { var display = document.createElement('div'); display.className = 'timerSessionDisplay'; // no style actually defined timeSpan = document.createElement('span'); timeSpan.className = 'timerSessionSpan'; // no style actually defined timeSpan.textContent = "Last review: " + timeStamp( ); display.appendChild(timeSpan); return display; } // start counting. [or, dont] function go( ) { // change behavior depending on screen [summary, reviewing now] if(/session$/.exec(window.location.href)) { // review/session [ reviewing now ] window.localStorage.eggtimer = 0; // time start var header = document.getElementById('summary-button'); // because easy var display = generate( ); // makes div object header.appendChild( display ); var showHideButton = document.createElement('div'); var footer = document.getElementsByTagName('footer'); showHideButton.onclick = function( ) { var displayTimer = window.localStorage.displayTimer; if( displayTimer === null || typeof displayTimer === "undefined" ) { displayTimer = false; } else { displayTimer = (displayTimer == "true" ? false : true); } window.localStorage.displayTimer = displayTimer; timeSpan.style.cssText = displayTimer ? "display: inline;" : "display: none;"; console.log("pressed"); }; showHideButton.style.cssText = "background-color: #003377; color: white; cursor: pointer;" + "display: inline; float: left; font-size: 0.8125em; padding: 10px; vertical-align: bottom;"; showHideButton.textContent = "Show/hide Timer"; footer[0].appendChild( showHideButton ); timeSpan.style.cssText = window.localStorage.displayTimer == "false" ? "display: none" : "display: inline"; setInterval(function() {timeSpan.textContent = "Elapsed: " + timeStamp( 1 );}, 1000); } else { // review [ summary screen ] var footer = document.getElementById('last-session-date'); // makes sense var display = generate( ); footer.insertBefore(display, footer.childNodes[0]); // probably float:left btw } } window.onload = go( );