// ==UserScript== // @name Youtube looper // @namespace http://ayra.ch/ // @version 0.1 // @description Loops youtube videos // @author You // @match https://www.youtube.com/watch* // @match http://www.youtube.com/watch* // @grant none // ==/UserScript== /* jshint -W097 */ "use strict"; (function($){ var addBtn=function() { var buttons=$(".watch-secondary-actions"); if($(".looper-btn") || !buttons) { return; } var isLoop=false; var isColor=false; var looper=document.createElement("button"); var blinker=function() { if(isLoop || isColor) { looper.style.backgroundColor=isColor?"transparent":"#e62117"; isColor=!isColor; } }; var flasher=window.setInterval(blinker,500); looper.innerHTML="↺ Repeat"; looper.onclick=function() { isLoop=!isLoop; $("video").loop=isLoop; }; looper.style.borderRadius="5px"; looper.setAttribute("class","looper-btn yt-uix-button yt-uix-button-size-default yt-uix-button-opacity yt-uix-tooltip"); looper.setAttribute("data-tooltip-text","enable or disable video looping"); looper.setAttribute("role","button"); buttons.appendChild(looper); }; var mo=new MutationObserver(function(evt) { addBtn(); }); mo.observe($("body"),{childList:true}); addBtn(); })(document.querySelector.bind(document));