Leetcode Timer

Start a timer whenever a user loads a problem at Leetcode.com

As of 2020-05-18. See the latest version.

  1. // ==UserScript==
  2. // @name Leetcode Timer
  3. // @description:en Start a timer whenever a user loads a problem at Leetcode.com
  4. // @version 1.1
  5. // @grant none
  6. // @include *://*leetcode.com/problems/*
  7. // @author ketankr9
  8. // @namespace https://greatest.deepsurf.us/users/564674
  9. // @description Start a timer whenever a user loads a problem at Leetcode.com
  10. // ==/UserScript==
  11.  
  12.  
  13. function countdownTimer() {
  14. var difference = +new Date() - startTime;
  15. var elapsed = "0";
  16.  
  17. var parts = {
  18. days: Math.floor(difference / (1000 * 60 * 60 * 24)),
  19. hours: Math.floor((difference / (1000 * 60 * 60)) % 24),
  20. minutes: Math.floor((difference / 1000 / 60) % 60),
  21. seconds: Math.floor((difference / 1000) % 60)
  22. };
  23.  
  24. elapsed = Object.keys(parts)
  25. .map(part => {
  26. if (!parts[part]) return;
  27. return `${parts[part]} ${part}`;
  28. })
  29. .join(" ");
  30. document.getElementById("countdown").innerHTML = elapsed;
  31. }
  32.  
  33. var f = function(div){
  34. var el = document.createElement("div");
  35. el.className = "tool-item__2DCU";
  36. el.innerHTML = '<div id="countdown" style="font-size:20px;" ></div>';
  37. div.insertBefore(el, div.firstChild);
  38. startTime = +new Date();
  39. setInterval(countdownTimer, 1000);
  40. }
  41.  
  42. function waitForElementToDisplay(selector, time, f) {
  43. var node = document.getElementsByClassName(selector);
  44. console.log(node);
  45. if(node.length > 0) {
  46. console.log("Element Found");
  47. f(node[0])
  48. return;
  49. }
  50. setTimeout(function() {
  51. waitForElementToDisplay(selector, time, f);
  52. }, time);
  53. }
  54.  
  55. var startTime;
  56. waitForElementToDisplay("btns__1OeZ", 1000, f);