YouTube - Hide Watched

YouTube - Hide Watched.

  1. // ==UserScript==
  2. // @name YouTube - Hide Watched
  3. // @description YouTube - Hide Watched.
  4. // @version 0.7
  5. // @author to
  6. // @namespace https://github.com/to
  7. // @license MIT
  8. //
  9. // @match https://www.youtube.com/*
  10. // @exclude https://www.youtube.com/feed/history
  11. // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
  12. //
  13. // @run-at document-idle
  14. // ==/UserScript==
  15.  
  16. const THRESHOLD = 90;
  17.  
  18. new MutationObserver(throttleAndDebounce(() => {
  19. for (let progress of document.querySelectorAll('#progress')) {
  20. if (parseInt(progress.style.width) > THRESHOLD) {
  21. let video =
  22. progress.closest('ytd-rich-item-renderer') ||
  23. progress.closest('ytd-video-renderer') ||
  24. progress.closest('ytd-grid-video-renderer') ||
  25. progress.closest('ytd-compact-video-renderer')
  26. if (video) {
  27. video.style.display = 'none';
  28. video.classList.add('tm-watched')
  29. }
  30. }
  31. }
  32. }, 500)).observe(document, {
  33. childList: true,
  34. subtree: true,
  35. });
  36.  
  37. function throttleAndDebounce(fn, interval) {
  38. let timer;
  39. let lastTime = Date.now() - interval;
  40. return function () {
  41. if ((Date.now() - lastTime) > interval) {
  42. lastTime = Date.now();
  43. fn();
  44. } else {
  45. clearTimeout(timer);
  46. timer = setTimeout(() => {
  47. fn();
  48. }, interval);
  49. }
  50. }
  51. }