m.YouTube.com quality change buttons

Adds quality change buttons below the video (144p, 240p, 360p, 480p, 720p, 1080p)

目前為 2023-10-12 提交的版本,檢視 最新版本

// ==UserScript==
// @name         m.YouTube.com quality change buttons
// @namespace    m-youtube-com-quality-change-buttons
// @version      1.1
// @description  Adds quality change buttons below the video (144p, 240p, 360p, 480p, 720p, 1080p)
// @author       hlorand.hu
// @match        https://m.youtube.com/watch*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant        none
// @license      https://creativecommons.org/licenses/by-nc-sa/4.0/
// ==/UserScript==

(function() {
    //'use strict';

    function addbuttons(){
        document.getElementById("qualitybuttons").innerHTML = "";

        var player = document.getElementById('movie_player');

        const qualities = ["tiny","small","medium","large","hd720","hd1080"];

        qualities.forEach((quality)=>{

            let button = document.createElement('button');
            button.setAttribute("quality", quality);
            let text = "";
            switch( quality ){
                case 'tiny': text = '144p'; break;
                case 'small': text = '240p'; break;
                case 'medium': text = '360p'; break;
                case 'large': text = '480p'; break;
                case 'hd720': text = '720p'; break;
                case 'hd1080': text = '1080p'; break;
            }
            button.textContent = text;
            button.className = "qualitybutton";

            button.style.margin = "5px";
            button.style.padding = "5px";
            button.style.backgroundColor = "green";
            button.style.position = "relative";

            button.onclick = function() {
                player.setPlaybackQualityRange( this.getAttribute("quality") );

                document.querySelectorAll(".qualitybutton").forEach((btn)=>{
                    btn.style.backgroundColor = "green";
                });
                this.style.backgroundColor = "darkorange";
            };

            let div = document.querySelector('.related-chips-slot-wrapper');
            div.insertBefore(button, div.firstChild);

        }); // end qualities foreach

    } // end addbuttons

    window.addEventListener('load', function () {
        setInterval(()=>{
            if( document.getElementById("qualitybuttons") == undefined ){
                let parent = document.querySelector('.related-chips-slot-wrapper');
                let wrapper = document.createElement('div');
                wrapper.setAttribute("id","qualitybuttons");
                parent.insertBefore(wrapper, parent.firstChild);
                addbuttons();
            }
        }, 1000);
    }); // end addEventListener

})();