// ==UserScript== // @name 9gag video enhancer // @namespace http://tampermonkey.net/ // @version 0.4 // @description try to take over the world! // @author Llorx // @match https://9gag.com/* // @grant none // @downloadURL none // ==/UserScript== // from 0 to 100 var VOUME_LEVEL = 50; function onFirstPlay(e) { e.target.removeEventListener("play", onFirstPlay); if (VOUME_LEVEL > 0) { var audiotoggle = e.target.parentNode.querySelector(".sound-toggle"); if (audiotoggle) { // Has audio e.target.click(); // element click instead of setting the video muted attribute, so 9gag intertal state also changes to umnmuted e.target.volume = VOUME_LEVEL/100; } } // After play, as .length is not added until video metadata is loaded var els = e.target.parentNode.querySelectorAll(".sound-toggle,.length"); for (var ii = 0; ii < els.length; ii++) { els[ii].style.display = "none"; } } (function() { function checkVideos(node) { if (node.querySelectorAll) { var videos = node.querySelectorAll("video"); for (var i = 0; i < videos.length; i++) { videos[i].setAttribute("controls", "1"); videos[i].addEventListener("play", onFirstPlay); var drag = videos[i].closest(".badge-track"); if (drag) { drag.addEventListener("dragstart", function(e) { e.preventDefault(); }); } } } } var targetNode = document.body; var config = { childList: true, subtree: true }; var callback = function(mutationsList) { for (var i = 0; i < mutationsList.length; i++) { for (var ii = 0; ii < mutationsList[i].addedNodes.length; ii++) { checkVideos(mutationsList[i].addedNodes[ii]); } } }; var observer = new MutationObserver(callback); observer.observe(targetNode, config); checkVideos(targetNode); })();