// ==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.49
// @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
// @downloadURL https://update.greasyfork.icu/scripts/442317/u-Youtube.user.js
// @updateURL https://update.greasyfork.icu/scripts/442317/u-Youtube.meta.js
// ==/UserScript==
(function() {
'use strict';
var expand_description = 0;var subscription_up = 1;var del_promote = 1;var full_screen =0;
var sec_sub,sec_fwd,wheel_sec,buffer_time,dark_mode,video_speed,video_quality,english_mode,comment_right,temp_buffer,temp_speed,speed_display,current_time,doc_s,icare_mode,ytplay_bezel,newVideo_check;
var video_elem,v_elem;
var inner_hight=window.innerHeight-parseInt(window.innerHeight/7);
var inner_width=window.innerWidth*0.35;
//HTML n Script policy
const overwrite_default = false; // If a default policy already exists, it might be best not to overwrite it, but to try and set a custom policy and use it to manually generate trusted types. Try at your own risk
const prefix = GM_info.script.name;
var passThroughFunc = function(string, sink){
return string; // Anything passing through this function will be returned without change
}
var TTPName = "passthrough";
var TTP_default, TTP = {createHTML: passThroughFunc, createScript: passThroughFunc, createScriptURL: passThroughFunc}; // We can use TTP.createHTML for all our assignments even if we don't need or even have Trusted Types; this should make fallbacks and polyfills easy
var needsTrustedHTML = false;
function doit(){
try{
if(typeof window.isSecureContext !== 'undefined' && window.isSecureContext){
if (window.trustedTypes && window.trustedTypes.createPolicy){
needsTrustedHTML = true;
if(trustedTypes.defaultPolicy){
log("TT Default Policy exists");
if(overwrite_default)
TTP = window.trustedTypes.createPolicy("default", TTP);
else
TTP = window.trustedTypes.createPolicy(TTPName, TTP); // Is the default policy permissive enough? If it already exists, best not to overwrite it
TTP_default = trustedTypes.defaultPolicy;
log("Created custom passthrough policy, in case the default policy is too restrictive: Use Policy '" + TTPName + "' in var 'TTP':", TTP);
}
else{
TTP_default = TTP = window.trustedTypes.createPolicy("default", TTP);
}
log("Trusted-Type Policies: TTP:", TTP, "TTP_default:", TTP_default);
}
}
}catch(e){
log(e);
}
}
function log(...args){
if("undefined" != typeof(prefix) && !!prefix)
args = [prefix + ":", ...args];
if("undefined" != typeof(debugging) && !!debugging)
args = [...args, new Error().stack.replace(/^\s*(Error|Stack trace):?\n/gi, "").replace(/^([^\n]*\n)/, "\n")];
console.log(...args);
}
doit();
//end Greasy Fork Trusted-Types Helper Author Benjamin Philipp
var youtube_hand = {
message_box: {
show: function(message) {
clearTimeout(ytplay_bezel);
document.querySelector("#container > #movie_player .ytp-bezel-text").innerHTML = message;
document.querySelector("#container > #movie_player .ytp-bezel-text").parentNode.parentNode.style.display = "";
document.querySelector("#container > #movie_player .ytp-bezel-text").parentNode.parentNode.classList.remove("ytp-bezel-text-hide");
ytplay_bezel = setTimeout(youtube_hand.message_box.hide, 2500);
},
hide: function() {
document.querySelector("#container > #movie_player .ytp-bezel-text").innerText = "";
document.querySelector("#container > #movie_player .ytp-bezel-text").parentNode.parentNode.style.display = "none";
}
},
dark_eye:function (){
if(localStorage.getItem('icare_mode')==1){
document.querySelector("html").style="font-size:13px;font-family: Roboto, Arial, sans-serif;"
}
else {document.querySelector("html").style="font-size:10px;font-family: Roboto, Arial, sans-serif;"}
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.fullscreenElement){
//评论右上移
document.querySelector("#columns #primary #primary-inner #sections").style="width:"+inner_width+"px;height:"+inner_hight+"px;overflow-y:auto";
document.querySelector("#columns #primary #primary-inner #sections").classList.add('standardized-themed-scrollbar');
// document.querySelector("#columns #primary #primary-inner #sections")
document.querySelector("#secondary #secondary-inner").append(document.querySelector("#columns #primary #primary-inner #sections"));
document.querySelector("#page-manager #columns > #secondary > #secondary-inner > #sections").onscroll=function(){
document.querySelector("body").style.overflow="hidden";
}
document.querySelector("#page-manager #columns > #secondary > #secondary-inner > #sections").onpointerleave=function(){
document.querySelector("body").style.overflow="";
}
/*
document.querySelector("#page-manager #columns > #secondary > #secondary-inner > #sections").onscroll=function(){
let comment_height= parseInt(document.querySelector("#page-manager #columns > #secondary > #secondary-inner > #sections").style.height);
comment_height+=1;
document.querySelector("#page-manager #columns > #secondary > #secondary-inner > #sections").style.height = comment_height+"px";
document.querySelector("#page-manager #columns > #secondary > #secondary-inner > #sections").style.float="right";
};
*/
//related 左下移
document.querySelector("#columns #primary #primary-inner").append(document.querySelector("#secondary #secondary-inner #related"));
// 监听全屏事件
document.addEventListener("fullscreenchange", function () {
if(localStorage.getItem("comment_right")==1){
if (document.fullscreenElement) {
// 视频进入全屏
document.querySelector("#page-manager #columns > #secondary > #secondary-inner > #sections").style="width:auto;height:"+window.innerHeight*1+"px;overflow-y:auto";
//评论左下移
//localStorage.setItem('comment_right',0);
/*
document.querySelector("#columns #primary #primary-inner").append(document.querySelector("#secondary #secondary-inner #sections"));
//related 右上移
document.querySelector("#secondary #secondary-inner").append(document.querySelector("#related"));
document.querySelector("#secondary #secondary-inner #sections").remove();
document.querySelector("#columns #primary #primary-inner #sections").style="width:"+window.innerWidth*0.60+"px;height:"+window.innerHeight*1+"px;overflow-y:auto";
document.querySelector("#columns #primary #primary-inner #sections").classList.add('standardized-themed-scrollbar');
*/
//localStorage.setItem('comment_right',1);
} else {
// 视频退出全屏
document.querySelector("#page-manager #columns > #secondary > #secondary-inner > #sections").style="width:"+inner_width+"px;height:"+inner_hight+"px;overflow-y:auto";
// if(document.getElementById("comment_to").checded==1){
// localStorage.setItem('comment_right',1);}
}
}
});
}
// else if(document.querySelector("yt-live-chat-app")){document.querySelector("#secondary #secondary-inner").append(document.querySelector("yt-live-chat-app"))}
},
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(){
/*
const escapeHTMLPolicy = trustedTypes.createPolicy("myEscapePolicy", {
createHTML: (string) => string.replace(/
`);
*/
// const policy = trustedTypes.createPolicy('default',{createHTML: (string) => string});
// Use the policy to assign HTML safely
// const unsafeHtml = "
";
//const safeHtml = policy.createHTML(unsafeHtml);
//document.querySelector("#placeholder").innerHTML = safeHtml;
/*
const policy = trustedTypes.createPolicy('default', {
createHTML: (string) => string
});
// Use the policy to assign HTML safely
const unsafeHtml = "
";
const safeHtml = policy.createHTML(unsafeHtml);
document.querySelector("#title").innerHTML = safeHtml;
*/
var html_app = document.createElement("div");
// html_app.innerHTML =escaped; const unsafeHtml =`
html_app.innerHTML =`
`;
// const safeHtml = DOMPurify.sanitize(unsafeHtml);
// const safeHtml = policy.createHTML(unsafeHtml);
// safeHtml.classList.add('dropdown-hover');
//document.querySelector("#placeholder").innerHTML = safeHtml;
//document.querySelector("#end").appendChild(safeHtml);
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"),iii=document.getElementById("icare_mode");
dark_mode = localStorage.getItem('dark_mode');comment_right = localStorage.getItem('comment_right');icare_mode = localStorage.getItem('icare_mode');
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')?localStorage.getItem('video_quality'):"auto";
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").append(document.querySelector("#related"));
document.querySelector("#secondary #secondary-inner #sections").remove();
}
comment_right = localStorage.getItem('comment_right');
}
iii.checded=icare_mode; if(icare_mode!=1){document.getElementById("icare_mode").removeAttribute('checked');}
iii.onchange=function(){if(iii.checked){localStorage.setItem('icare_mode','1');}
else{localStorage.setItem('icare_mode',0);
}
icare_mode = localStorage.getItem('icare_mode');
}
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 div.html5-video-container > video");
v_elem = document.querySelector("#movie_player");
if (video_elem){
newVideo_check=document.querySelector("#movie_player > div.html5-video-container > video").duration;
main_opr();
let videoText_check1 = setInterval(function(){
if(document.querySelector("#info-text > #info-strings > yt-formatted-string")){
//video_elem.currentTime=0;
video_speed = localStorage.getItem('speed');
if(buffer_time&&document.querySelector("#info-text > #info-strings > yt-formatted-string")){
youtube_hand.message_box.show("video speed "+video_speed+"x
cashe "+buffer_time+" seconds
"+document.querySelector("#info-strings > yt-formatted-string").innerText+" & "+document.querySelector("#count > ytd-video-view-count-renderer > span.view-count.style-scope.ytd-video-view-count-renderer").innerText+"
");
}
else if(document.querySelector("#info-text > #info-strings > yt-formatted-string")){
youtube_hand.message_box.show("video speed "+video_speed+"x
no cashe
"+document.querySelector("#info-strings > yt-formatted-string").innerText+" & "+document.querySelector("#count > ytd-video-view-count-renderer > span.view-count.style-scope.ytd-video-view-count-renderer").innerText+"
");
}
clearInterval(videoText_check1);
// alert("change display");
}
}
,1000)
video_elem.onloadeddata = function (){
//22-11-29
//newVideo_check = document.querySelector("#movie_player > div.html5-video-info-panel > div > div:nth-child(1) > span").innerText;
// alert("load");
let videoload_check = setInterval(function(){
//删除全屏时顶部文字
if(document.querySelector("#movie_player > div.ytp-chrome-top > div.ytp-title > div")){
document.querySelector("#movie_player > div.ytp-chrome-top > div.ytp-title > div").remove();
}
//5秒后自动全屏
if (!document.fullscreenElement&&full_screen){
setTimeout(function(){
if (!document.fullscreenElement){
document.querySelector("#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-right-controls > button.ytp-fullscreen-button.ytp-button").click();
// document.querySelector("#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-right-controls > button.ytp-fullscreen-button.ytp-button").remove()
full_screen=1;
}
},5000)
}
if(newVideo_check){
//youtube_hand.message_box.show("onload2");
clearInterval(videoload_check);}
else if(newVideo_check=document.querySelector("#movie_player > div.html5-video-container > video").duration){
main_opr();
//youtube_hand.message_box.show("onload1");
setTimeout(function(){
if(buffer_time&&document.querySelector("#info-text > #info-strings > yt-formatted-string")){
youtube_hand.message_box.show("video speed "+video_speed+"x
cashe "+buffer_time+" seconds
"+document.querySelector("#info-strings > yt-formatted-string").innerText+" & "+document.querySelector("#count > ytd-video-view-count-renderer > span.view-count.style-scope.ytd-video-view-count-renderer").innerText+"
");
}
//document.querySelector("#info-text > #info-strings > yt-formatted-string").innerText
else if(document.querySelector("#info-text > #info-strings > yt-formatted-string")){
youtube_hand.message_box.show("video speed "+video_speed+"x
no cashe
"+document.querySelector("#info-strings > yt-formatted-string").innerText+" & "+document.querySelector("#count > ytd-video-view-count-renderer > span.view-count.style-scope.ytd-video-view-count-renderer").innerText+"
");
}
// alert("load display");
},4000)
setTimeout(function(){video_elem.onloadeddata = "";},3000)
clearInterval(videoload_check);
}},1000);
}
video_elem.ondurationchange = function(){
//删除全屏时顶部文字
if(document.querySelector("#movie_player > div.ytp-chrome-top > div.ytp-title > div")){
document.querySelector("#movie_player > div.ytp-chrome-top > div.ytp-title > div").remove();
}
//5秒后自动全屏
if (!document.fullscreenElement&&full_screen){
setTimeout(function(){
if (!document.fullscreenElement){
document.querySelector("#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-right-controls > button.ytp-fullscreen-button.ytp-button").click();
// document.querySelector("#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-right-controls > button.ytp-fullscreen-button.ytp-button").remove()
full_screen=1;
}
},5000)
}
//alert("change");
// if(newVideo_check == document.querySelector("#movie_player > div.html5-video-info-panel > div > div:nth-child(1) > span").innerText){}
if(!newVideo_check){
newVideo_check=document.querySelector("#movie_player > div.html5-video-container > video").duration;
// alert("in");
let videoText_check = setInterval(function(){
if(document.querySelector("#info-text > #info-strings > yt-formatted-string")){
//video_elem.currentTime=0;
video_speed = localStorage.getItem('speed');
if(buffer_time&&document.querySelector("#info-text > #info-strings > yt-formatted-string")){
youtube_hand.message_box.show("video speed "+video_speed+"x
cashe "+buffer_time+" seconds
"+document.querySelector("#info-strings > yt-formatted-string").innerText+" & "+document.querySelector("#count > ytd-video-view-count-renderer > span.view-count.style-scope.ytd-video-view-count-renderer").innerText+"
");
}
else if(document.querySelector("#info-text > #info-strings > yt-formatted-string")){
youtube_hand.message_box.show("video speed "+video_speed+"x
no cashe
"+document.querySelector("#info-strings > yt-formatted-string").innerText+" & "+document.querySelector("#count > ytd-video-view-count-renderer > span.view-count.style-scope.ytd-video-view-count-renderer").innerText+"
");
}
clearInterval(videoText_check);
}
}
,1000)
main_opr();//youtube_hand.message_box.show("change");
}
else if(newVideo_check&&newVideo_check==document.querySelector("#movie_player > div.html5-video-container > video").duration){
// alert("out");
}
else { video_elem.currentTime=0;
setTimeout(function(){
// alert("out in");
video_speed = localStorage.getItem('speed');
if(buffer_time&&document.querySelector("#info-text > #info-strings > yt-formatted-string")){
youtube_hand.message_box.show("video speed "+video_speed+"x
cashe "+buffer_time+" seconds
"+document.querySelector("#info-strings > yt-formatted-string").innerText+" & "+document.querySelector("#count > ytd-video-view-count-renderer > span.view-count.style-scope.ytd-video-view-count-renderer").innerText+"
");
}
else if(document.querySelector("#info-text > #info-strings > yt-formatted-string")){
youtube_hand.message_box.show("video speed "+video_speed+"x
no cashe
"+document.querySelector("#info-strings > yt-formatted-string").innerText+" & "+document.querySelector("#count > ytd-video-view-count-renderer > span.view-count.style-scope.ytd-video-view-count-renderer").innerText+"
");
}
},3000)
main_opr();
}
}
clearInterval(main_timer);}
},50)
//主应用操作
function main_opr() {
doc_s = window.document;
//视频质量选择
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 if(video_quality=="auto"){}
else if(video_quality){v_elem.setPlaybackQualityRange(video_quality,video_quality);}
//点开视频介绍
setTimeout(function(){
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();
}
if(document.querySelector("#expand")){
document.querySelector("#expand").click();
}
}
},5000);
//前跳过秒数+速度+播放质量设定
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)&&(document.querySelector("#title > h1 > yt-formatted-string").innerText.includes("袁色")||document.querySelector("#title > h1 > yt-formatted-string").innerText.includes("袁腾飞")||document.querySelector("#title > h1 > yt-formatted-string").innerText.includes("会员翻牌"))){
video_elem.currentTime += sec_fwd/1;
video_elem.oncanplay = "";
}
// video_elem.currentTime += 1;
}
//暂停缓存
sec_sub = localStorage.getItem('sec_sub');
video_elem.onpause = function(){
if(document.querySelector("body > tp-yt-iron-overlay-backdrop")){
document.querySelector("body > tp-yt-iron-overlay-backdrop").remove();
if(document.querySelector("body > ytd-app > ytd-popup-container > tp-yt-paper-dialog")){
document.querySelector("body > ytd-app > ytd-popup-container > tp-yt-paper-dialog").remove();
}
video_elem.play();
//document.querySelector("#movie_player > div.html5-video-container > video").play();
}
//youtube_hand.message_box.show(''+document.querySelector("#header-author yt-formatted-string > a").innerText+'
');
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(current_time!=0){
if((video_elem.currentTime-current_time)>(buffer_time?buffer_time:0)||(video_elem.duration<(video_elem.currentTime+20)))
{video_elem.currentTime = current_time;
video_elem.oncanplaythrough='';}
}
else{ 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 = "";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调整视频速度
doc_s.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");}
}
doc_s.onkeydown = "";
setTimeout(function(){doc_s.onkeydown = key_down;},200);
}
}
// 滚轮前进后退
video_elem.onwheel = function(e){e.preventDefault()};
v_elem.onwheel = wheel_e;
function wheel_e (event) {
if(wheel_sec){
event.preventDefault();
video_elem.currentTime += parseInt(event.deltaY>0?wheel_sec/1:-wheel_sec) ;
v_elem.onwheel="";
setTimeout(function(){v_elem.onwheel= wheel_e;
video_elem.onwheel = function(e){e.preventDefault()};
},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)"))
/*
// Create a Trusted Type policy
const scriptPolicy = trustedTypes.createPolicy('true', {
createScript: (scriptContent) => scriptContent
});
// Use the policy to safely assign a script
const scriptContent = "console.log('This is a trusted script');";
const trustedScript = scriptPolicy.createScript(scriptContent);
// Create a script element
const scriptElement = document.createElement('script');
scriptElement.textContent = trustedScript;
document.head.appendChild(scriptElement);
*/
//页面写入script和style
var a_bug = document.createElement("script");
a_bug.innerHTML = `// 监听draggable的相关事件
function dragstart_handler(ev) {
//console.log("dragStart");
document.querySelector("#"+ev.target.id).style="margin-top: 25px !important;";
// 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";
//console.log(ev.target.id);
}
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 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 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)"));
//当日订阅 document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) > #items").prepend(document.querySelector("#sections a[href='/feed/subscriptions']").parentElement);
document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) > #items").prepend(document.querySelector("#sections a[href='/feed/history']").parentElement);
document.querySelector("#sections > ytd-guide-section-renderer:nth-child(1) > #items").prepend(document.querySelector("#sections a[href='/playlist?list=WL']").parentElement);
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)
/*
window.onload=function(){
document.addEventListener("yt-navigate-finish", function() {
youtube_hand.play_menu();
youtube_hand.play_main();
youtube_hand.dark_eye1();
})
};
*/
setInterval(function(){ youtube_hand.dark_eye();
if(del_promote){
if(document.querySelector(".ytp-ce-element.ytp-ce-playlist.ytp-ce-element-show")){
document.querySelector(".ytp-ce-element.ytp-ce-playlist.ytp-ce-element-show").remove();
// console.log("del 1");
}
if(document.querySelector(".ytp-ce-element.ytp-ce-video.ytp-ce-element-show")){
document.querySelector(".ytp-ce-element.ytp-ce-video.ytp-ce-element-show").remove();
//console.log("del 2");
}
if(document.querySelector(".ytp-ce-element.ytp-ce-channel.ytp-ce-channel-this.ytp-ce-element-show")){
document.querySelector(".ytp-ce-element.ytp-ce-channel.ytp-ce-channel-this.ytp-ce-element-show").remove();
// console.log("del 3");
}
}
},1000)
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)
}
/*
setTimeout(function(){
document.querySelector("#movie_player > div.ytp-chrome-bottom > div.ytp-chrome-controls > div.ytp-right-controls > button.ytp-fullscreen-button.ytp-button").click();
},10000)
*/
})();