NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Clean YouTube Loopy // @version 2016.09.12 // @description Displays a link below YouTube videos to enable/disable auto replay. // @include http*.youtube.com/watch?*v=* // @include http*.youtube.com/watch?*videos=* // @include http*.youtube.com/watch#!*videos=* // @include http*.youtube.com/watch#!*v=* // @include http*.youtube.com/watch?*NR=* // @exclude http*.youtube.com*&list=* // @author Dither (fixes), Rowen, QuaraMan (embed code) // @run-at document-start // ==/UserScript== (function () { var ytPlayer, ytLoop = false, // Buttony stuff lpConOff = "LoopyOff", lpConOn = "LoopyOn"; var base = document.createElement("span"); var loopy = document.createElement("button"); loopy.id = "eLoopy"; loopy.onclick = function onClickHandler() { var content = document.getElementById("loopyContent"), button = document.getElementById("loopyButton"); if (ytLoop) { //if (typeof ytPlayList != "undefined") setCookie("LoopyPL", null); button.setAttribute("data-tooltip-text", "Enable video looping"); button.setAttribute("data-button-toggle", "true"); content.setAttribute("class", lpConOff); ytLoop = false; } else { //if (typeof ytPlayList != "undefined") setCookie("LoopyPL", ytPlayList); button.setAttribute("data-tooltip-text", "Disable video looping"); button.setAttribute("data-button-toggle", "false"); content.setAttribute("class", lpConOn); ytLoop = true; } }; loopy.setAttribute("class", "yt-uix-button yt-uix-tooltip no-focus-outline"); loopy.setAttribute("role", "button"); loopy.setAttribute("data-button-toggle", "true"); loopy.setAttribute("type", "button"); loopy.setAttribute("data-tooltip-text", "Enable video looping") loopy.id = "loopyButton"; var a = document.createElement("span"); a.id = "loopyContent" a.setAttribute("class", lpConOff); a.innerHTML = '<svg width="30" height="22" viewBox="0 0 1792 1792"><path d="M1216 1504q0 13-9.5 22.5t-22.5 9.5h-960q-8 0-13.5-2t-9-7-5.5-8-3-11.5-1-11.5v-600h-192q-26 0-45-19t-19-45q0-24 15-41l320-384q19-22 49-22t49 22l320 384q15 17 15 41 0 26-19 45t-45 19h-192v384h576q16 0 25 11l160 192q7 11 7 21zm640-416q0 24-15 41l-320 384q-20 23-49 23t-49-23l-320-384q-15-17-15-41 0-26 19-45t45-19h192v-384h-576q-16 0-25-12l-160-192q-7-9-7-20 0-13 9.5-22.5t22.5-9.5h960q8 0 13.5 2t9 7 5.5 8 3 11.5 1 11.5v600h192q26 0 45 19t19 45z" fill="#727373"/></svg><span class="yt-uix-button-valign"/>'; loopy.appendChild(a); base.appendChild(loopy); onPlayerStateChange = function (newState) { if (!!ytLoop && newState == "0") setTimeout(function() { ytPlayer.playVideo(); }, 100); } var attempts = 0, timeout = null, mainLoopy = function() { clearTimeout(timeout); var menu_node = document.querySelector('[id^="watch"][id$="sentiment-actions"]'); if (!menu_node && ++attempts < 10) { timeout = setTimeout(mainLoopy, 1000); return; } attempts = 100; var head = document.querySelector("head"), style = document.createElement("style"); style.setAttribute("type", "text/css"); style.textContent = '#loopyButton {border: 0 none !important;} #loopyButton:focus {box-shadow: none !important;} .yt-uix-button-panel:hover #loopyButton {border: 1px solid; border-color: #C6C6C6;} .LoopyOff { opacity: 0.3 }'; head.appendChild(style); try { menu_node.appendChild(base); } catch(e) {} loopy = null; var attempts_player = 0, retry = setInterval(function() { ytPlayer = document.getElementById("movie_player"); if (!!ytPlayer) { ytPlayer.addEventListener("onStateChange", "onPlayerStateChange"); clearInterval(retry); } else if (attempts_player++ > 4) { clearInterval(retry); } }, 1500); }; document.addEventListener('DOMContentLoaded', mainLoopy, false); document.addEventListener('spfdone', mainLoopy, false); })();