diff --git a/netflix-speed.user.js b/netflix-speed.user.js index 136f227..3eae5f7 100644 --- a/netflix-speed.user.js +++ b/netflix-speed.user.js @@ -1,77 +1,70 @@ // ==UserScript== // @name netflix-speed -// @version 0.7 +// @version 0.8 // @include https://www.netflix.com/* // ==/UserScript== function find_controls() { - return new Promise(function(resolve, reject) { - var observer = new MutationObserver(function(mutationsList) { - mutationsList.forEach(function(mutation) { - var nodes = Array.from(mutation.addedNodes); - for (var node of nodes) { - /* classic ui - black bar at the bottom */ - if (node.matches && node.matches('.classic-ui') && node.querySelector('.video-title')) { - resolve(node.querySelector('.video-title').previousElementSibling); - return; - } - /* modern ui - play/pause in the middle of the screen */ - if (node.matches && node.matches('.AkiraPlayer') && (node.querySelector('.button-nfplayerNextEpisode') || node.querySelector('.button-nfplayerSubtitles'))) { - var elem = node.querySelector('.button-nfplayerNextEpisode') || node.querySelector('.button-nfplayerSubtitles'); - resolve(elem.parentNode); - return; - } - } - }); - }); - - observer.observe(document.documentElement, { childList: true, subtree: true }); + return new Promise(function(resolve, reject) { + var observer = new MutationObserver(function(mutationsList) { + mutationsList.forEach(function(mutation) { + var nodes = Array.from(mutation.addedNodes); + for (var node of nodes) { + if (node.matches && node.matches('.AkiraPlayer') && (node.querySelector('.button-nfplayerNextEpisode') || node.querySelector('.button-nfplayerSubtitles'))) { + var elem = node.querySelector('.button-nfplayerNextEpisode') || node.querySelector('.button-nfplayerSubtitles'); + resolve(elem.parentNode); + return; + } + } + }); }); + + observer.observe(document.documentElement, { childList: true, subtree: true }); + }); } function inject_controls() { - find_controls().then(function(controls) { - /* don't inject multiple times */ - if (document.querySelector('#speed-control')) - return; + find_controls().then(function(controls) { + /* remove report a problem button */ + if (document.querySelector('div.ReportAProblemPopupContainer')) + document.querySelector('div.ReportAProblemPopupContainer').remove(); - /* create speed_control element */ - var speed_control = document.createElement('select'); - speed_control.id = 'speed-control'; - speed_control.style.cssText = ` - border-left: 1px solid #323232; - border-right: 1px solid #151515; - border-top: none; - border-bottom: none; - background: none; - -moz-appearance: none; - -webkit-appearance: none; - appearance: none; - min-width: 5em; - width: auto; - height: 100%; - font-size: 2.2em; - text-align: center; - cursor: pointer; - `; - speed_control.id = 'speed-control'; - speed_control.onchange = function() { - document.querySelector('.VideoContainer video').playbackRate = this.value; - }; - speed_control.innerHTML = ` + /* don't inject multiple times */ + if (document.querySelector('#speed-control')) + return; + + /* create speed_control element */ + var speed_control = document.createElement('div'); + speed_control.innerHTML = ``; + speed_control.id = 'speed-control'; + speed_control.style.cssText = ` + padding: 0 0 1.68em 0; + margin: 0 1.5em;`; + speed_control.firstChild.style.cssText = ` + -webkit-appearance: none; + background: none; + border: none; + font-size: 2.2em; + text-align: right;`; + speed_control.firstChild.onchange = function() { + document.querySelector('.VideoContainer video').playbackRate = this.value; + }; - /* inject speed_control element */ - controls.after(speed_control); + /* inject speed_control element */ + controls.before(speed_control); - /* redo injection, in case of video change, ... */ - inject_controls(); - }); + /* redo injection, in case of video change, ... */ + inject_controls(); + }); }; +/* initial run of injection */ inject_controls();