// ==UserScript== // @name Picarto.tv Video.js replacer // @namespace picarto.tv.video.js.stuff.dasprids.de // @description Replaces the player on picarto.tv with one which works with Firefox on Linux // @include https://picarto.tv/* // @version 2 // @grant none // @run-at document-start // @require https://cdnjs.cloudflare.com/ajax/libs/video.js/4.12.15/video.js // @downloadURL none // ==/UserScript== var changed = false; window.addEventListener('beforescriptexecute', function(e){ src = e.target.src; if (src.search(/jwplayer\.js/) != -1) { changed = true; e.preventDefault(); e.stopPropagation(); mockJwPlayer(); }; if (changed) { window.removeEventListener(e.type, arguments.callee, true); } }, true); function addStyleSheet(style){ var getHead = document.getElementsByTagName("HEAD")[0]; var cssNode = window.document.createElement( 'style' ); var elementStyle= getHead.appendChild(cssNode) elementStyle.innerHTML = style; return elementStyle; } addStyleSheet('@import "https://vjs.zencdn.net/4.12/video-js.css";'); function mockJwPlayer() { videojs.options.techOrder = ['flash']; unsafeWindow.jwplayer = function(id){ var container = $('#' + id); var player = {}; if (container.data('player')) { player = container.data('player'); } else { container.data('player', player); } player.setMute = function(){ return player; }; player.setup = function(options){ if (!player.videojs) { container.html(''); player.videojs = videojs('videojs' + id); } player.videojs.width(options.width); if (options.mute) { player.videojs.volume(0); } else { player.videojs.volume(1); } if (options.autostart) { player.videojs.play(); } var ratioParts = options.aspectratio.split(':'); var aspectRatio = ratioParts[1] / ratioParts[0]; function resizeVideoJs(){ var width = document.getElementById(player.videojs.id()).parentElement.offsetWidth; player.videojs.height(width * aspectRatio); } resizeVideoJs(); window.addEventListener('resize', resizeVideoJs); return player; }; player.onPause = function(){ return player; }; player.onError = function(){ return player; }; player.onComplete = function(){ return player; }; player.onBuffer = function(){ return player; }; player.onPlay = function(){ return player; }; return player; }; }