Loop HTML5 Videos Toggle

Enables loop functionality for HTML5 videos with context menu toggle

  1. // ==UserScript==
  2. // @name Loop HTML5 Videos Toggle
  3. // @namespace StephenP
  4. // @version 1.0
  5. // @description Enables loop functionality for HTML5 videos with context menu toggle
  6. // @author StephenP
  7. // @match *://*/*
  8. // @grant GM_registerMenuCommand
  9. // @grant GM_unregisterMenuCommand
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14. let isLoopingEnabled = false;
  15. GM_registerMenuCommand('▶️ Enable Loop',setLooping);
  16. // Variables to track the state of looping
  17.  
  18. const videoElements = document.getElementsByTagName('VIDEO');
  19.  
  20. function toggleVideoLoop(video) {
  21. if (!video.loop) {
  22. video.loop = true;
  23. video.removeEventListener('ended',vPause);
  24. video.addEventListener('ended',vPlay);
  25. } else {
  26. video.loop = false;
  27. video.removeEventListener('ended',vPlay);
  28. video.addEventListener('ended',vPause);
  29. }
  30. }
  31.  
  32. // Toggle loop when clicking on videos
  33. function setLooping(){
  34. if(!isLoopingEnabled){
  35. GM_unregisterMenuCommand('▶️ Enable Loop')
  36. GM_registerMenuCommand('⏹️ Disable Loop',setLooping)
  37. isLoopingEnabled=true;
  38. }
  39. else{
  40. GM_unregisterMenuCommand('⏹️ Disable Loop')
  41. GM_registerMenuCommand('▶️ Enable Loop',setLooping)
  42. isLoopingEnabled=false;
  43. }
  44. for(let video of videoElements){
  45. toggleVideoLoop(video);
  46. }
  47. }
  48.  
  49. function vPause(e){
  50. e.target.pause();
  51. }
  52. function vPlay(e){
  53. e.target.play();
  54. }
  55. })();