Last active
May 19, 2020 06:50
-
-
Save ketankr9/c65a08c437f195ae3571fd1c840074f4 to your computer and use it in GitHub Desktop.
Use this UserScript in any browser to see the time elapsed while solving a problem at leetcode.com . HowToInstall https://greasyfork.org/en/help/installing-user-scripts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Leetcode Timer | |
// @version 1.2 | |
// @grant none | |
// @include *://*leetcode.com/problems/* | |
// @author ketankr9 | |
// @namespace https://greasyfork.org/users/564674 | |
// @description Start a timer whenever a user loads a problem at Leetcode.com | |
// ==/UserScript== | |
/* | |
* Choose Either Option 1 or Option 2. | |
* Option 1: The time starts from the moment you open a url and continues forever. | |
* Option 2: The time starts from 0 every time you open a url and continues only till the window is open. Everytime you reload the window the timer will restart from 0. | |
*/ | |
var option = 2; // Choose between 1 and 2 | |
function countdownTimer() { | |
var difference = +new Date() - startTime; | |
var elapsed = "0"; | |
var parts = { | |
days: Math.floor(difference / (1000 * 60 * 60 * 24)), | |
hours: Math.floor((difference / (1000 * 60 * 60)) % 24), | |
minutes: Math.floor((difference / 1000 / 60) % 60), | |
seconds: Math.floor((difference / 1000) % 60) | |
}; | |
elapsed = Object.keys(parts) | |
.map(part => { | |
if (!parts[part]) return; | |
return `${parts[part]} ${part}`; | |
}) | |
.join(" "); | |
document.getElementById("countdown").innerHTML = elapsed; | |
} | |
var f = function(div){ | |
if(option === 1){ | |
// Option 1: The time starts from the moment you open a url and continues forever. | |
var q = document.URL.split("problems/"); | |
if(q.length != 2) return null; | |
q = q[1] + "time"; | |
console.log(q); | |
if(localStorage.getItem(q) == null){ | |
localStorage.setItem(q, +new Date()); | |
} | |
startTime = Date.parse(localStorage.getItem(q)); | |
}else{ | |
// Option 2: The time starts every time you open a url and continues till the window is open. | |
startTime = new Date(); | |
} | |
var el = document.createElement("div"); | |
el.className = "tool-item__2DCU"; | |
el.innerHTML = '<div id="countdown" style="font-size:20px;" ></div>'; | |
div.insertBefore(el, div.firstChild); | |
setInterval(countdownTimer, 1000); | |
} | |
function waitForElementToDisplay(selector, time, f) { | |
var node = document.getElementsByClassName(selector); | |
if(node.length > 0) { | |
console.log("Element Found"); | |
f(node[0]) | |
return; | |
} | |
setTimeout(function() { | |
waitForElementToDisplay(selector, time, f); | |
}, time); | |
} | |
var startTime; | |
waitForElementToDisplay("btns__1OeZ", 1000, f); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment