您需要先安装一个扩展,例如 篡改猴、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.4
- // @author Horus Scope
- // @grant none
- // @license GPL version 3 or later: http://www.gnu.org/copyleft/gpl.html
- // ==/UserScript==
- function timeStamp( inc ) {
- 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( 0 );
- 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( );