u-Youtube

make Youtube under ur control

Per 06-04-2022. Zie de nieuwste versie.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         u-Youtube
// @name:zh-CN   功夫制霸YouTube
// @name:zh-TW   功夫製霸YouTube
// @name:en      u-Youtube
// @name:ua      u-Youtube
// @name:ja      カンフー支配YouTube
// @name:ko      쿵푸 지배YouTube
// @name:it      u-Youtube
// @name:de      u-Youtube
// @name:fr      u-Youtube
// @namespace    https://github.com/rasso1/u-Youtube
// @version      1.21
// @description  make Youtube under ur control
// @description:zh-TW make Youtube under ur control
// @description:en make Youtube under ur control
// @description:ja あなたのコントロール下でYouTubeを作る
// @description:ko 유튜브를 당신의 통제하에 두십시오
// @description:it rendi youtube sotto il tuo controllo
// @description:de Machen Sie YouTube unter Ihrer Kontrolle
// @description:fr faire de youtube sous votre contrôle
// @author       ok!
// @match        https://www.youtube.com/*
// @match        https://youtube.com/*
// @run-at       document-start
// @contributionURL https://paypal.me/kongfuY

// ==/UserScript==
(function() {
    'use strict';
    var expand_description = 1;var subscription_up = 1;
    var sec_sub,sec_fwd,wheel_sec,buffer_time,dark_mode,video_quality,video_speed,english_mode,comment_right,temp_buffer,temp_speed,speed_display,current_time;
    var inner_hight=window.innerHeight;var inner_width=window.innerWidth*0.38;


    var youtube_hand = {
        message_box: {
            last_message: null,
            show: function(message) {
                youtube_hand.message_box.last_message = message;
                document.querySelector(".ytp-bezel-text").innerText = message;
                document.querySelector(".ytp-bezel-text").parentNode.parentNode.style.display = "";
                document.querySelector(".ytp-bezel-text").parentNode.parentNode.classList.remove("ytp-bezel-text-hide");
                setTimeout(youtube_hand.message_box.hide, 2000, message);
            },
            hide: function(message_hide) {
                if (message_hide != youtube_hand.message_box.last_message) {
                    return;
                }
                document.querySelector(".ytp-bezel-text").innerText = "";
                document.querySelector(".ytp-bezel-text").parentNode.parentNode.style.display = "none";
            }
        },
        dark_eye:function (){
            if(localStorage.getItem('dark_mode')==1){
                if(!document.querySelector("html").hasAttribute("dark")){
                    document.querySelector("html").setAttribute("dark",true);}
            }
            else if(document.querySelector("html").hasAttribute("dark"))
            {document.querySelector("html").removeAttribute("dark")}
            if(localStorage.getItem("comment_right")==1&&document.querySelector("#columns #primary #primary-inner #sections")&&document.querySelector("#secondary #secondary-inner")){
                //评论右上移

                document.querySelector("#secondary #secondary-inner").append(document.querySelector("#columns #primary #primary-inner #sections"));
                document.querySelector("#secondary #secondary-inner #sections").style="width:"+inner_width+"px;height:"+inner_hight+"px;overflow-y:auto";
                //related 左下移
                document.querySelector("#columns #primary #primary-inner").append(document.querySelector("#secondary #secondary-inner #related"));

            }
        },
        dark_eye1:function (){
            if(localStorage.getItem('dark_mode')==1){
                var style_type = document.createElement("style");style_type.id = "style_type";
                style_type.innerHTML = `#end > div.dropdown-hover > div{font-size:12px;color:#bbb !important;background-color:#202020 !important;}
#end > div.dropdown-hover > button{background-color:#222 !important;} #end > div.dropdown-hover path{fill:transparent !important;stroke:white !important;}
#end > div.dropdown-hover > div > div{color:#aaa !important;background-color:#202020 !important;}
#end > div.dropdown-hover > div > div p{font-size:12px;color:#bbb !important;background-color:#202020 !important;}
.dropdown-hover button div{font-size:12px;color:#aaa !important;background-color:#333 !important;}
#sec_sub,#sec_fwd,#wheel_sec,#buffer_time{font-size:12px;color:#bbb !important;background-color:#333 !important;border-radius:5px;}`;
            document.head.appendChild(style_type);
        }
    },

    //播放设置
    play_menu:function(){


        var html_app = document.createElement("div");
        html_app.innerHTML = `
   <button style="border:none;outline:none;background-color:#fff;height:37px;width:37px;margin-right:10px;" aria-label="缓存/速度设置"><svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;"><g class="style-scope yt-icon">
       <path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.1-1.65c.2-.15.25-.42.13-.64l-2-3.46c-.12-.22-.4-.3-.6-.22l-2.5 1c-.52-.4-1.08-.73-1.7-.98l-.37-2.65c-.06-.24-.27-.42-.5-.42h-4c-.27 0-.48.18-.5.42l-.4 2.65c-.6.25-1.17.6-1.7.98l-2.48-1c-.23-.1-.5 0-.6.22l-2 3.46c-.14.22-.08.5.1.64l2.12 1.65c-.04.32-.07.65-.07.98s.02.66.06.98l-2.1 1.65c-.2.15-.25.42-.13.64l2 3.46c.12.22.4.3.6.22l2.5-1c.52.4 1.08.73 1.7.98l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.6-.25 1.17-.6 1.7-.98l2.48 1c.23.1.5 0 .6-.22l2-3.46c.13-.22.08-.5-.1-.64l-2.12-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z" fill="transparent" stroke="black"></path>
      </g></svg>
</button>

<div style="background:#fff;border-radius: 10px;left: -160px;right: 0;margin-left: 0;margin-right: -100px;padding-top: 10px;" class="dropdown-box fadeInDown"><div class="item clearfix" style="border-radius:10px;"><p style="margin:10px auto;font-size:18px;"><span class="mandarin invisible">播放设置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="english">Playback Setting&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><font size=2>Chs </font><input style="margin:auto" id="english_mode" class="switch switch-anim" type="checkbox" checked></p>
<div  style="margin:10px auto;font-size:12px;"><hr /><hr /></div>
<p style="margin:10px auto;font-size:16px;"><span class="mandarin invisible" style="margin:10px auto;font-size:16px;">当前速度:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="english">current speed:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="speed_display"></span></p>
<p style="margin:10px auto;font-size:16px;"><span class="mandarin invisible">选择播放速度:&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="english">specify spee<font color=yellow>d</font>:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><button id="speed_button" style="background-color: #5bb7fe;border-radius:5px;color:white;font-size:12px;"> &nbsp; 1x&nbsp; </button></p><input type="range" min="0" max="100" value="25" class="slider" id="speed_slider"><br /><br />
<p style="margin:10px auto;font-size:16px;"><span class="mandarin invisible">跳过片头秒数:&nbsp;&nbsp;&nbsp;</span><span class="english">skip the title:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><input type="text" id="sec_fwd" style="width:40px;height:12px;vertical-align: middle;padding: 5px;background-color:#fff;border: 2px solid #ddd;border-radius:5px;font-size:12px;" placeholder="seconds">
<p style="margin:10px auto;font-size:16px;"><span class="mandarin invisible">跳过片尾秒数:&nbsp;&nbsp;&nbsp;</span><span class="english">skip the end:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><input type="text" id="sec_sub" style="width:40px;height:12px;vertical-align: middle;padding: 5px;background-color: #fff;border: 2px solid #ddd;border-radius:5px;font-size:12px;" placeholder="seconds"></p>
<p style="margin:10px auto;font-size:16px;"><span class="mandarin invisible">鼠标滚动秒数:&nbsp;&nbsp;&nbsp;</span><span class="english">mouse scroll:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><input type="text" id="wheel_sec" style="width:40px;height:12px;vertical-align: middle;padding: 5px;background-color: #fff;border: 2px solid #ddd;border-radius:5px;font-size:12px;" placeholder="seconds"></p>
<p style="margin:10px auto;font-size:16px;"><span class="mandarin invisible">暂停缓存秒数:&nbsp;&nbsp;&nbsp;</span><span class="english">paus<font color=yellow>e</font> n cashing:&nbsp;&nbsp;&nbsp;&nbsp;</span><input type="text" id="buffer_time" style="width:40px;height:12px;vertical-align: middle;padding: 5px;background-color: #fff;border: 2px solid #ddd;border-radius:5px;font-size:12px;" placeholder="seconds"></p>
  <p style="margin:10px auto;font-size:16px;"><span class="mandarin invisible">播放质量:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>  <span class="english">specify resolution&nbsp;</span> <select id="video_quality" style="border-radius:5px;"><option value="auto">auto</option><option value="hd2160">4K 2160p</option><option value="hd1440">HD 1440p</option><option value="hd1080">HD 1080p</option><option value="hd720">720p</option> <option value="large">480p</option><option value="medium">360p</option><option value="small">240p</option><option value="tiny">144p</option> </select></p>
<p style="margin:10px auto 20px auto;font-size:16px;"><span class="mandarin invisible">评论载右:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="english">comments to right:&nbsp;&nbsp;</span><input style="margin:auto" id="comment_to" class="switch switch-anim" type="checkbox" checked></p>

<p style="margin:10px auto 20px auto;font-size:16px;"><span class="mandarin invisible">暗夜模式 :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="english">dark mode:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><input style="margin:auto" id="dark_mode" class="switch switch-anim" type="checkbox" checked></p>
<p style="margin:10px auto 20px auto;font-size:16px;"><span class="mandarin invisible">捐赠&#126980;:&nbsp; </span><span class="english">donate&#127854;:&nbsp;&nbsp;</span><a href="https://paypal.me/kongfuY" style="color:#5bb7fe;">paypal.me/kongfuY</a></p></div></div>

<style>#speed_slider {width: 175px;}.invisible {display: none;}.ytd-feed-filter-chip-bar-renderer.style-scope{z-index:999 !important;}.fadeInDown{-webkit-animation:fadeInDown .5s .2s ease both;-moz-animation:fadeInDown .5s .2s ease both}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-10px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInDown{0%{opacity:0;-moz-transform:translateY(-10px)}100%{opacity:1;-moz-transform:translateY(0)}}.dropdown{position:relative}.dropdown-box{display:none;position:absolute;z-index:9999999999}.dropdown-box.top{bottom:100%;padding-bottom:10px;left:50%;margin-left:-80px}.dropdown-box.bottom{top:100%;padding-top:10px;left:50%;margin-left:-80px}.dropdown-box.left{left:100%;padding-left:10px;bottom:0}.dropdown-box.right{right:100%;padding-right:10px;bottom:0}.dropdown-box .item{padding:10px;width:250px;border-radius:2px}.dropdown-hover{position:relative}.dropdown-hover:hover .dropdown-box{display:block}</style>
<style>a {color: #670000;}.switch {width: 26px;height: 13px;position: relative;border: 1px solid #dfdfdf;background-color: #fdfdfd;box-shadow: #dfdfdf 0 0 0 0 inset; border-radius: 18px;background-clip: content-box;display: inline-block;-webkit-appearance: none;user-select: none;outline: none;} .switch:before { content: '';width: 13px;height: 13px;position: absolute;top: 0;left: 0;border-radius: 12px;background-color: #fff;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);}.switch:checked {border-color: #5bb7fe;box-shadow: #5bb7fe 0 0 0 16px inset;background-color: #5bb7fe;}.switch:checked:before {left: 15px;}.switch.switch-anim {transition: border cubic-bezier(0, 0, 0, 1) 0.4s, box-shadow cubic-bezier(0, 0, 0, 1) 0.4s;}.switch.switch-anim:before {transition: left 0.3s;}.switch.switch-anim:checked {box-shadow: #5bb7fe 0 0 0 14px inset;background-color: #5bb7fe;transition: border ease 0.4s, box-shadow ease 0.4s, background-color ease 1.2s;}.switch.switch-anim:checked:before {transition: left 0.3s;}.text-red {color: #aaa;}</style>
`;
        html_app.classList.add('dropdown-hover');
        document.querySelector("#end").appendChild(html_app);

        //
        var speed_slider=document.getElementById("speed_slider"),speed_button=document.getElementById("speed_button"),
            y=document.getElementById("sec_sub"),z=document.getElementById("wheel_sec"),x=document.getElementById("buffer_time"),w=document.getElementById("dark_mode"),
            s=document.getElementById("video_quality"),v=document.getElementById("sec_fwd"),t=document.getElementById("english_mode"),c=document.getElementById("comment_to");
        dark_mode = localStorage.getItem('dark_mode');comment_right = localStorage.getItem('comment_right');
        var english_mode = localStorage.getItem('english_mode');
        speed_display=document.getElementById("speed_display");
        const mandarins = document.querySelectorAll('.mandarin');const englishs = document.querySelectorAll('.english');


        video_speed = localStorage.getItem('speed');sec_fwd = localStorage.getItem('sec_fwd');sec_sub = localStorage.getItem('sec_sub');
        wheel_sec = localStorage.getItem('wheel_sec');buffer_time = localStorage.getItem('buffer_time');video_quality = localStorage.getItem('video_quality');

        english_mode = localStorage.getItem('english_mode');
        //判读英文菜单
        if(localStorage.getItem('english_mode')==1){
            for (const mandarin of mandarins) {
                mandarin.className -= ' invisible';
            }
            for (const english of englishs) {
                english.className += ' invisible';
            }
        }

        video_speed?speed_display.innerHTML=video_speed+"x":speed_display.innerHTML="1x";

        setTimeout(function (){
            if(video_speed&&document.querySelector('#movie_player'))
                document.querySelector("#movie_player > div.html5-video-container > video").playbackRate = video_speed;},4000);

        speed_slider.value = localStorage.getItem('speed')*25;

        speed_slider.oninput=function(){localStorage.setItem('speed',this.value/25);video_speed = localStorage.getItem('speed');video_speed?speed_display.innerHTML=video_speed+"x":speed_display.innerHTML="1x";
                                        document.querySelector("#movie_player > div.html5-video-container > video").playbackRate = video_speed;
                                       }

        speed_button.onclick=function(){localStorage.setItem('speed',1);video_speed = localStorage.getItem('speed');video_speed?speed_display.innerHTML=video_speed+"x":speed_display.innerHTML="1x";
                                        document.querySelector("#movie_player > div.html5-video-container > video").playbackRate = video_speed;
                                        speed_slider.value = localStorage.getItem('speed')*25;
                                       }

        sec_fwd?v.value=sec_fwd:v.value="";
        v.onchange=function(){localStorage.setItem('sec_fwd',this.value);sec_fwd = localStorage.getItem('sec_fwd');sec_fwd?v.value=sec_fwd:v.value="";
                             }
        sec_sub?y.value=sec_sub:y.value="";
        y.onchange=function(){localStorage.setItem('sec_sub',this.value);sec_sub = localStorage.getItem('sec_sub');sec_sub?y.value=sec_sub:y.value="";
                             }

        wheel_sec?z.value=wheel_sec:z.value="";
        z.onchange=function(){localStorage.setItem('wheel_sec',this.value);wheel_sec = localStorage.getItem('wheel_sec');wheel_sec?z.value=wheel_sec:z.value="";
                             }
        buffer_time?x.value=buffer_time:x.value="";
        x.onchange=function(){localStorage.setItem('buffer_time',this.value);buffer_time = localStorage.getItem('buffer_time');buffer_time?x.value=buffer_time:x.value="";
                             }
        c.checded=comment_right; if(comment_right!=1){document.getElementById("comment_to").removeAttribute('checked');}
        c.onchange=function(){if(c.checked){localStorage.setItem('comment_right','1');youtube_hand.dark_eye();}
                              else{localStorage.setItem('comment_right',0);
                                   //评论右上移

                                   document.querySelector("#columns #primary #primary-inner").append(document.querySelector("#secondary #secondary-inner #sections"));
                                   //related 左下移
                                   document.querySelector("#secondary #secondary-inner").prepend(document.querySelector("#related"));

                                  }
                              comment_right = localStorage.getItem('comment_right');
                             }
        w.checded=dark_mode; if(dark_mode!=1){document.getElementById("dark_mode").removeAttribute('checked');}
        w.onchange=function(){if(w.checked){localStorage.setItem('dark_mode','1');youtube_hand.dark_eye();youtube_hand.dark_eye1();}
                              else{localStorage.setItem('dark_mode',0);
                                   document.querySelector("html").removeAttribute("dark");
                                   document.querySelector('#style_type').remove();
                                  }
                              dark_mode = localStorage.getItem('dark_mode');
                             }
        t.checded=english_mode; if(english_mode!=1){document.getElementById("english_mode").removeAttribute('checked');}
        t.onchange=function(){if(t.checked){localStorage.setItem('english_mode','1');
                                            for (const mandarin of mandarins) {
                                                mandarin.className -= ' invisible';}
                                            for (const english of englishs) {
                                                english.className += ' invisible';}
                                           }
                              else{localStorage.setItem('english_mode',0);
                                   for (const mandarin of mandarins) {
                                       mandarin.className += ' invisible';}
                                   for (const english of englishs) {
                                       english.className -= ' invisible';}
                                  }
                              english_mode = localStorage.getItem('english_mode');
                             }

        if(video_quality){
            for(var i=0;i<s.length;i++){
                if(s.options[i].value==video_quality){
                    s.options[i].selected=true;
                }
            }
        }
        s.onchange=function (){
            var quality_value = s[s.selectedIndex].getAttribute("value");
            localStorage.setItem('video_quality',quality_value);
            video_quality = localStorage.getItem('video_quality');
            var avail_quali;var v_elem = document.querySelector("#movie_player");
            if((avail_quali = v_elem.getAvailableQualityLevels())&&avail_quali.indexOf(video_quality) == -1){
                v_elem.setPlaybackQualityRange(avail_quali[0],avail_quali[0]);
            }
            else{v_elem.setPlaybackQualityRange(video_quality,video_quality);}
        }

    },

    play_main:function (){

        sec_fwd = localStorage.getItem('sec_fwd');
        sec_sub = localStorage.getItem('sec_sub');
        wheel_sec = localStorage.getItem('wheel_sec');
        buffer_time = localStorage.getItem('buffer_time');

        var video_speed = localStorage.getItem('speed');

        var video_elem,v_elem;


        //每3秒试执行主应用操作
        var main_timer = setInterval(function () {
            video_elem = document.querySelector("#movie_player > div.html5-video-container > video");
            v_elem = document.querySelector("#movie_player");

            if (video_elem){
                //main_opr();
                video_elem.onloadeddata = function (){
                    main_opr();
                    setTimeout(function(){video_elem.onloadeddata = "";},3000)

                }
                video_elem.ondurationchange = function(){
                    video_elem.currentTime=0;
                    current_time=0;
                    main_opr();
                }
                clearInterval(main_timer);}
        },100)

        //主应用操作
        function main_opr() {
            //视频质量选择

            var avail_quali;var current_time;
            if((avail_quali = v_elem.getAvailableQualityLevels())&&avail_quali.indexOf(video_quality) == -1){
                v_elem.setPlaybackQualityRange(avail_quali[0],avail_quali[0]);
            }
            else{v_elem.setPlaybackQualityRange(video_quality,video_quality);}
            //点开视频介绍
            if(expand_description){

                if(document.getElementById("action-panel-details")) {
                    document.getElementById("action-panel-details").classList.remove("yt-uix-expander-collapsed");
                }

                if(document.querySelector("#more > .more-button.style-scope.ytd-video-secondary-info-renderer")) {
                    document.querySelector("#more > .more-button.style-scope.ytd-video-secondary-info-renderer").click();
                }
            }

            //前跳过秒数+速度+播放质量设定
            video_elem.oncanplay = function(){
                if(video_speed&&video_elem){
                    video_elem.playbackRate = video_speed;}
                // if(current_time>200){current_time=0}
                if(sec_fwd&&(video_elem.currentTime < sec_fwd/1)){
                    video_elem.currentTime += sec_fwd/1;
                    video_elem.oncanplay = "";
                }
                // video_elem.currentTime += 1;

            }

            //暂停缓存

            sec_sub = localStorage.getItem('sec_sub');
            video_elem.onpause = function(){
                if(!buffer_time||buffer_time == 0){return;}
                if(parseInt(video_elem.currentTime)==parseInt(video_elem.duration)){current_time=0;video_elem.onpause = "";video_elem.onplay = "";video_elem.oncanplaythrough ="";}
                else{current_time = parseInt(video_elem.currentTime);
                     video_elem.oncanplaythrough = function(){
                         if(parseInt(video_elem.currentTime)==parseInt(video_elem.duration)){current_time=0;video_elem.onpause = "";video_elem.onplay = "";video_elem.oncanplaythrough ="";}
                         else{video_elem.currentTime +=1;
                              if(sec_sub){
                                  if((video_elem.currentTime-current_time)>(buffer_time?buffer_time:0)||(video_elem.duration<(video_elem.currentTime+parseInt(sec_sub)+10)))
                                  {video_elem.currentTime = current_time;
                                   console.log(current_time);console.log(video_elem.currentTime);
                                   video_elem.oncanplaythrough='';current_time=0;}
                              }
                              else{
                                  if((video_elem.currentTime-current_time)>(buffer_time?buffer_time:0)||(video_elem.duration<(video_elem.currentTime+30)))
                                  {video_elem.currentTime = current_time;
                                   video_elem.oncanplaythrough='';}
                              }
                             }
                     }
                     video_elem.currentTime += 1;
                    }
            }
            video_elem.onplay = function(){

                if(parseInt(video_elem.currentTime)==parseInt(video_elem.duration-1)){current_time = 0;video_elem.onpause = "";video_elem.onplay = "";video_elem.oncanplaythrough ="";} // new
                else if(current_time){video_elem.currentTime = current_time;
                                      video_elem.oncanplaythrough = "";
                                     }
            }
            video_elem.onended = function(){current_time = 0;video_elem.onpause = "";video_elem.onplay = "";video_elem.oncanplaythrough ="";                                           
                                           }
            //中键全屏

            video_elem.addEventListener("mouseup", function(e) {
                e.preventDefault();
                if(e.button==1){
                    document.querySelector("#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-right-controls > button.ytp-fullscreen-button.ytp-button").click();
                }
            }, false);
            //按c开启/停止缓冲功能,按e调整视频速度
            document.onkeydown = key_down;

            function key_down(e){
                //document.addEventListener("keydown", function(e) {
                
                if (document.activeElement.id != "" && document.activeElement.id != "movie_player") {
                    return;}

                else{
                    if (e.keyCode == 69) {
                        e.preventDefault();
                        if(buffer_time){
                            temp_buffer = buffer_time;
                            buffer_time="";
                            current_time=0;
                            //localStorage.setItem('buffer_time','');
                            youtube_hand.message_box.show("no cashing set");
                        }
                        else if(temp_buffer){buffer_time=temp_buffer;
                            // localStorage.setItem('buffer_time',temp_buffer);
                             youtube_hand.message_box.show("cashing "+buffer_time+" seconds set");
                            }
                        else{youtube_hand.message_box.show("no cashing time preset");}
                    }
                    else if(e.keyCode == 68) {
                        if(video_speed != 1){
                            temp_speed = video_speed;
                            video_speed=1;
                            video_elem.playbackRate = video_speed;
                            speed_display.innerHTML="1x";
                            //localStorage.setItem('speed','1')
                            youtube_hand.message_box.show("video speed 1x set");
                        }
                        else if(temp_speed){
                            if(localStorage.getItem('speed')!=temp_speed){video_speed=localStorage.getItem('speed');}
                            else{video_speed=temp_speed;}
                            video_elem.playbackRate = video_speed/1;
                            speed_display.innerHTML=video_speed+"x";
                            //localStorage.setItem('speed',temp_speed);
                            youtube_hand.message_box.show("video speed "+video_speed+"x set");
                        }
                        else{ youtube_hand.message_box.show("no video speed preset");}

                    }
                    document.onkeydown = "";
                    setTimeout(function(){document.onkeydown = key_down;},2000);
                }
            }

                // 滚轮前进后退
                video_elem.onwheel = function(e){e.preventDefault()};
                v_elem.onwheel = wheel_e;

                function wheel_e (event) {
                    event.preventDefault();

                    video_elem.currentTime += parseInt(event.deltaY>0?wheel_sec/1:-wheel_sec) ;

                    v_elem.onwheel="";
                    setTimeout(function(){v_elem.onwheel= wheel_e;},300);

                    //同时重设播放速度
                   // video_speed = localStorage.getItem('speed');
                   // document.querySelector("#movie_player > div.html5-video-container > video").playbackRate = video_speed;

                }

                //每隔25秒获取播放剩余时间,如在25秒内则执行主程序
                if(sec_sub !== ""&&sec_sub !=0){
                    const sec_sub2=sec_sub/1+12;
                    setInterval(function(){
                        let left_duration = get_dura();
                        if((left_duration < sec_sub) && (left_duration != 0))
                        {

                            next_exec();

                        }
                    }, 1000);
                }

                //next part 执行
                function next_exec(){
                    const sel_part2 = document.querySelector("#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-left-controls > a.ytp-next-button.ytp-button");
                    if (sel_part2)
                    {console.log("clicked next---");sel_part2.click();
                    // video_elem.currentTime=0;
                     current_time=0;}
                }

                //获取播放剩余时间
                function get_dura() {
                    const sel_start = video_elem.currentTime;
                    const sel_fin = video_elem.duration;
                    if (sel_fin) {
                        return sel_fin-sel_start;
                    }
                    return 0;
                }




            }

        },

            move_menu:function (){
                //点开显示其余items
                document.querySelector("#sections > ytd-guide-section-renderer:nth-child(2) > #items > ytd-guide-collapsible-entry-renderer > #expander-item > #endpoint").click();
                //移动频道到左顶部
                document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1)").parentNode.append(document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1)"))


                //页面写入script和style
                var a_bug = document.createElement("script");
                a_bug.innerHTML = `// 监听draggable的相关事件
function dragstart_handler(ev) {
   console.log("dragStart");
 // Add the target element's id to the data transfer object
 ev.dataTransfer.setData("text", ev.target.id);
  ev.dataTransfer.setData("text1", ev.target);
 console.log(ev.dataTransfer.getData("text1"));
 ev.dataTransfer.dropEffect = "move";
}
function dragEnter(ev) {
console.log("dragenter");
  ev.preventDefault();
  ev.target.className += ' drag-over';
}
function dragLeave(e) {
 ev.preventDefault();
  this.className = 'droppable';
}
function dragover_handler(ev) {
 ev.preventDefault();
 //ev.dataTransfer.dropEffect = "move"
}
function drop_handler(ev) {
 ev.preventDefault();
 // Get the id of the target and add the moved element to the target's DOM
 var data = ev.dataTransfer.getData("text");
 var first=ev.target.firstChild; //得到第一个元素
ev.target.insertBefore(document.getElementById(data),first); //在第原来的第一个元素之前插入
 //ev.target.appendChild(document.getElementById(data));
}
function dragend_handler(ev) {
  console.log("dragEnd");
  // Remove all of the drag data
  ev.dataTransfer.clearData();
  //localStorage.setItem("itemstate",document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) #items").outerHTML);

   //itemdetail写入localStorage
        var json = [];
var data = {};
var items_length=document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer").length
for(var i=0;i<items_length-1;i++){
data = {};
//data.id = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer")[i].id;
//data.imgsrc = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer #img")[i].src;
data.text =document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer")[i].innerText;
//data.href = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer > #endpoint")[i].href;

json.push(data);

}
var jsonString = JSON.stringify(json);//[{"id":1,"imgsrc":"test1","text":2}]
localStorage.setItem("itemdetail",jsonString);
 //localStorage.setItem("item_new","");
}
function noAllowDrop(ev) {
console.log("stopPropagation");
        ev.stopPropagation();
    }


   //点击订阅或退订时,删除localStorage内已有相同item
  if(document.querySelector("#inner-header-container #subscribe-button")){var subscribe_button = document.querySelector("#inner-header-container #subscribe-button")}
  else if(document.querySelector("#meta-contents #top-row > #subscribe-button")){var subscribe_button = document.querySelector("#meta-contents #top-row > #subscribe-button");}
  // var subscribe_button = document.querySelector("#inner-header-container #subscribe-button")?document.querySelector("#inner-header-container #subscribe-button"):document.querySelector("#meta-contents #top-row > #subscribe-button");

      if(subscribe_button){

   subscribe_button.onclick=function(){

   //localStorage.setItem("item_new",document.querySelector("#text > a").innerText);
   //localStorage.removeItem("itemdetail",document.querySelector("#channel-name #text").innerText);
   let obj = JSON.parse(localStorage.itemdetail);
   for(let j=obj.length-1;j>-1;j--){
   if(obj[j]&&obj[j].text==document.querySelector("#channel-name #text").innerText){
        let items_down = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer");

                        items_down.forEach(function(element,index,array) {

                            if(element.firstElementChild.title==document.querySelector("#channel-name #text").innerText){

                                document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) #items").append(element);
                                return false;
                            }
                        })

   delete obj[j];}
   }
   localStorage.setItem("itemdetail",JSON.stringify(obj));
   console.log("delete suc");
}
    }
 
`;
        document.body.appendChild(a_bug);

        var style_type2 = document.createElement("style");style_type2.id = "style_type";
        style_type2.innerHTML = `#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer{margin: 1em 0em 1em 0em !important;}
.drag-over {
  border-style: dashed;
}
.droppable{}
`;
        //#expandable-items > ytd-guide-entry-renderer{margin: 1.2em 0em 1.2em 0em !important;}
        document.head.appendChild(style_type2);

        //开始操作
        var menu_opr = setInterval(function(){

            //   const droppables = document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1)");
            if(document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) #items > ytd-guide-entry-renderer")){
                const droppables = document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) > #items");
                const draggable = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer");
                const no_draggable = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer > #endpoint");
                //  const no_droppable = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer > #endpoint > tp-yt-paper-item");
                // const no_droppable = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer > #endpoint *");
                const no_droppable = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items *");

                const draggable2 = document.querySelectorAll("#expandable-items > ytd-guide-entry-renderer");
                const no_draggable2 = document.querySelectorAll("#expandable-items > ytd-guide-entry-renderer > #endpoint");
                // const no_droppable2 = document.querySelectorAll("#expandable-items > ytd-guide-entry-renderer > #endpoint *");

                droppables.setAttribute("ondrop","drop_handler(event);");
                droppables.setAttribute("ondragover","dragover_handler(event);");
                // droppables.setAttribute("ondragenter","dragEnter(event);");
                // droppables.setAttribute("ondragleave","dragLeave(event);");
                no_draggable.forEach(function(element,index,array) {
                    element.setAttribute("draggable",false);
                });
                no_draggable2.forEach(function(element,index,array) {
                    element.setAttribute("draggable",false);
                });

                no_droppable.forEach(function(element,index,array) {
                    element.setAttribute("ondragover","noAllowDrop(event);");
                });
                //  no_droppable2.forEach(function(element,index,array) {
                //          element.setAttribute("ondragover","noAllowDrop(event);");
                //});


                draggable.forEach(function(element,index,array) {
                    if(index<array.length){
                        element.setAttribute("draggable",true);
                        element.setAttribute("ondragstart","dragstart_handler(event);");
                        element.setAttribute("ondragend","dragend_handler(event);");
                        if(!element.id){element.setAttribute("id","move"+index);}
                    }
                });
                let index_x =0;
                draggable2.forEach(function(element,index,array) {
                    index_x=index+7;
                    element.setAttribute("draggable",true);
                    element.setAttribute("ondragstart","dragstart_handler(event);");
                    element.setAttribute("ondragend","dragend_handler(event);");
                    element.setAttribute("id","move"+index_x);

                });

                //把隐藏内容拉出来,放入items
                const parent_item = document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) #items");
                let insert_sec = document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) #items > ytd-guide-collapsible-entry-renderer");
                let new_content2=document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) #items > ytd-guide-collapsible-entry-renderer #expanded #expandable-items > ytd-guide-entry-renderer");
                new_content2.forEach(function(element){parent_item.insertBefore(element,insert_sec)});


                const obj = JSON.parse(localStorage.getItem("itemdetail"));

                //getItem("itemdetail")然后写入网页列表
                if(localStorage.getItem("itemdetail")){

                    var items_drag = document.querySelectorAll("#sections > ytd-guide-section-renderer:nth-child(1) > #items > ytd-guide-entry-renderer");

                    for(var j=obj.length-1;j>-1;j--){
                        //   if(j==0){
                        items_drag.forEach(function(element,index,array) {

                            //console.log(element.firstElementChild.title);
                            //console.log(obj[j].text);
                            if(obj[j]&&element.firstElementChild.title==obj[j].text){

                                parent_item.prepend(element);
                                return false;
                            }
                        })

                    }


                }
                //把当日订阅置顶
                document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) > #items").prepend(document.querySelector("#sections > ytd-guide-section-renderer:nth-child(2) #items > ytd-guide-entry-renderer:nth-child(4)"));

                clearInterval(menu_opr);
            }

        },100)

        }


    }


    var load_menu = setInterval(function(){
        //youtube_hand.dark_eye();

        if(document.querySelector("#end")){
            youtube_hand.play_menu();
            youtube_hand.play_main();
            youtube_hand.dark_eye1();

            //document.querySelector("html").onpropertychange = youtube_hand.dark_eye;

            clearInterval(load_menu);
        }
    },100)



    setInterval(function(){ youtube_hand.dark_eye();},800)


if(subscription_up){
    var move_ma=setInterval(function(){
        if(document.querySelector("#sections > ytd-guide-section-renderer:nth-child(2)"))
        {
            youtube_hand.move_menu();

            clearInterval(move_ma);
        }
    },200)
    }


    })();