// ==UserScript==
// @name Youtube 2020 improvements
// @version 1.2.2
// @description All Youtube improvements in one pack
// @author Burlaka.net
// @match *://*.youtube.com/*
// @match *://youtube.com/*
// @require https://code.jquery.com/jquery-3.3.1.min.js
// @grant none
// @license MIT
// @namespace http://tampermonkey.net/
// ==/UserScript==
(function() {
'use strict';
$('body').append(`<style>
/*#playlist .header {display:none !important;}*/
/*body:not(.no-scroll) #container.ytd-masthead {height:40px}*/
#container.ytd-masthead {height:38px}
#background.ytd-masthead {height:40px}
#page-manager.ytd-app{margin-top:40px}
body.no-scroll #page-manager.ytd-app {margin-top:0}
.viewed-opacity {opacity: 0.5}
.sf-btn-name {display:none}
/* change actions buttons */
#actions.ytd-watch-metadata button[title='Поделиться'] .yt-spec-button-shape-next__button-text-content {display: none}
#actions.ytd-watch-metadata button[title='Поделиться'] .yt-spec-button-shape-next__icon {margin-right: -6px}
#actions.ytd-watch-metadata button[title='Создать клип'] .yt-spec-button-shape-next__button-text-content {display: none}
#actions.ytd-watch-metadata button[title='Создать клип'] .yt-spec-button-shape-next__icon {margin-right: -6px}
#owner.ytd-watch-metadata {min-width: calc(40% - 6px);}
#actions.ytd-watch-metadata {min-width: calc(60% - 6px);}
/* episodes */
#header.ytd-engagement-panel-title-header-renderer {padding: 0px 2px 0px 16px;}
#title-container.ytd-engagement-panel-title-header-renderer {margin: 0px 8px 0px 0;}
</style>`);
// $('ytd-mini-guide-renderer #items.ytd-mini-guide-renderer').on('mouseover', function(e) {
// if ($(this).find('#leftWatchlater').length === 0) {
// $(this).children(':last-child').clone().appendTo($(this));
// $(this).children(':last-child').find('yt-icon').html('<svg id="leftWatchlater" viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;"><g class="style-scope yt-icon"><path d="M12 3.67c-4.58 0-8.33 3.75-8.33 8.33s3.75 8.33 8.33 8.33 8.33-3.75 8.33-8.33S16.58 3.67 12 3.67zm3.5 11.83l-4.33-2.67v-5h1.25v4.34l3.75 2.25-.67 1.08z" class="style-scope yt-icon"></path></g></svg>');
// $(this).children(':last-child').find('a').attr('href', '/playlist?list=WL').attr('title', 'Смотреть позже');
// $(this).children(':last-child').find('.title').html('Смотреть позже');
// $(this).children(':last-child').find('#tooltip').html('Смотреть позже');
// }
// });
// comment autoexpand onmouseover
$(document).on('mouseover', '.ytd-item-section-renderer .ytd-comment-renderer ytd-expander', function(e) {
var $this = $(this);
if ($this.find('#more:not([hidden])')) {
$this.removeAttr('collapsed');
//$this.parent().find('#less').removeAttr('hidden');
$this.parent().find('#more').attr('hidden',true);
}
});
// video info autoexpand onmouseover
$(document).on('mouseover', 'ytd-expander.ytd-video-secondary-info-renderer', function(e) {
var $this = $(this);
if ($this.find('#more:not([hidden])')) {
$this.removeAttr('collapsed');
$this.find('#collapsible').removeAttr('hidden');
//$this.find('#less').removeAttr('hidden');
$this.find('#more').attr('hidden',true);
}
});
// expand video name in tootltip (recommendations after video ends)
$(document).on('mouseover', '.ytp-ce-covering-overlay .ytp-ce-video-title', function(e) {
$(this).parent().attr('title', $(this).text());
});
// expand video name in watchlater playlist
$('#playlist .playlist-items').on('mouseover', '#container.ytd-playlist-panel-video-renderer', function(e) {
$(this).attr('title', $(this).find('#video-title.ytd-playlist-panel-video-renderer').text());
});
// set opacity to viewed videos
$(document).on('scroll', function() {
$('a#thumbnail.ytd-thumbnail').has('ytd-thumbnail-overlay-resume-playback-renderer').addClass('viewed-opacity')
//$('#progress.ytd-thumbnail-overlay-resume-playback-renderer').parent().parent().parent().not('.viewed-opacity').addClass('viewed-opacity'); //.parent()
});
$('body').on('click', 'iron-selector', function() { // order selector on the page popualar/new/old
$('.viewed-opacity').removeClass('viewed-opacity');
});
var oldURL = '';
setInterval(function() {
var rundt = new Date();
if (oldURL != String(document.location)) {
$('.viewed-opacity').removeClass('viewed-opacity');
oldURL = String(document.location);
}
}, 7000);
// add video date and video views to video title
$(document).on('mouseover', 'h1.title yt-formatted-string.ytd-video-primary-info-renderer', function(e) {
$(this).attr('title', $('#info-strings yt-formatted-string').text() + "\n" + $('#count.ytd-video-primary-info-renderer .view-count').text());
});
// add title on embed videos
$(document).on('mouseover', '.ytp-title-link, .ytp-videowall-still-info-title', function(e) {
$(this).attr('title', $(this).text());
});
// hide elements over video
var hideOverVideo = true;
$('.ytp-chrome-controls').on('mouseover', function() {
if (hideOverVideo) {
$('.ytp-right-controls').prepend('<button class="ytp-button" onclick="$(\'.ytp-ce-element\').toggle();return false;" style="padding: 0px 3px;position: relative;font-size: 1.1em;top: -1.2em;right: 0.3em;">Hide</button>');
hideOverVideo = false;
}
});
/*
Stop playlist autoplay
*/
(function() {
var ypm;
function f() {
if (ypm) {
ypm.canAutoAdvance_ = false;
} else {
ypm = document.getElementsByTagName('yt-playlist-manager')[0];
}
}
f();
setInterval(f, 5000);
})();
/*
Channel videos redirect
*/
document.addEventListener('mouseover', getLink);
function getLink(linkElement) {
var url = linkElement.target.toString();
if ((url.search(/www.youtube.com/) != -1) && (url.match(/\//g).length < 5)) {
if ((url.match(/https:\/\/www.youtube.com\/channel\//i) && (/videos/.test(url) == false))) {
changeLink(linkElement);
} else if ((url.match(/https:\/\/www.youtube.com\/c\//i) && (/videos/.test(url) == false))) {
changeLink(linkElement);
} else if ((url.match(/https:\/\/www.youtube.com\/user\//i) && (/videos/.test(url) == false))) {
changeLink(linkElement);
} else if ((url.match(/https:\/\/www.youtube.com\/@/i) && (/videos/.test(url) == false))) {
changeLink(linkElement);
}
}
}
function changeLink(linkElement) {
var newUrl = linkElement.target.toString().concat("/videos");
linkElement.target.href = newUrl;
}
// add sort links
let sorthtml = '';
$(document).on('mouseover', '#sub-menu.ytd-section-list-renderer', function(e) {
//let str1 = document.location.href;
if (sorthtml == '') {
let parseUrl = document.location.href.match(/youtube\.com\/([^&]*)\/([^&]*)\//i);
sorthtml = `
<div style="cursor:pointer;">
<span onclick="location.href='/`+parseUrl[1]+`/`+parseUrl[2]+`/videos?view=0&sort=p&flow=grid'"> Популярные</span>
<span onclick="location.href='/`+parseUrl[1]+`/`+parseUrl[2]+`/videos?view=0&sort=da&flow=grid'"> Старые</span>
<span onclick="location.href='/`+parseUrl[1]+`/`+parseUrl[2]+`/videos?view=0&sort=dd&flow=grid'"> Новые</span>
</div>`;
$(this).find('#primary-items.ytd-channel-sub-menu-renderer').append(sorthtml);
}
});
/* Watch later button toggler */
var addbutton = false;
$('#end.ytd-masthead').on('mouseover', function() {
if (addbutton == false) {
$('#buttons.ytd-masthead').prepend(`<div style="color: #fff;padding: 3px 8px 0 0;cursor: pointer;text-shadow: 0px 0px 5px #777;" class="wl_toggle">WL</div>`);
$('#buttons.ytd-masthead').prepend(`<div style="color: #fff;padding: 3px 8px 0 0;cursor: pointer;text-shadow: 0px 0px 5px #777;" class="pl_toggle">Pl</div>`);
addbutton = true;
}
});
$('body').append(`<style id="wl_toggle_style">#playlist .header {display:none !important;}</style>`);
var wl_toggle = false;
$('body').on('click', '.wl_toggle', function() {
if (wl_toggle == true) {
$('body').append(`<style id="wl_toggle_style">#playlist .header {display:none !important;}</style>`);
wl_toggle = false;
}
else if (wl_toggle == false) {
$('#wl_toggle_style').remove();
wl_toggle = true;
}
});
var pl_toggle = false;
$('body').on('click', '.pl_toggle', function() {
if (pl_toggle == false) {
$('body').append(`<style id="pl_toggle_style">.html5-video-player .ytp-chrome-bottom {display:none !important;}.html5-video-player .ytp-gradient-bottom {display:none !important;}</style>`);
pl_toggle = true;
}
else if (pl_toggle == true) {
$('#pl_toggle_style').remove();
pl_toggle = false;
}
});
/* Player size button toggler */
$('#end.ytd-masthead').on('mouseover', function() {
if ($('#center.ytd-masthead .ps_toggle').length === 0) {
$('#center.ytd-masthead').prepend(`<div style="color: #fff;padding: 0;cursor: pointer;text-shadow: 0px 0px 5px #777;" class="ps_toggle">Player size</div>`);
}
});
function ps_toggle(change) {
var playersize_cookie = document.cookie.match(new RegExp("(?:^|; )" + 'playersize_status'.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"));
playersize_cookie = playersize_cookie ? decodeURIComponent(playersize_cookie[1]) : undefined;
if (change == 'change') {
if (playersize_cookie == 'narrow') {
document.cookie = "playersize_status=;max-age=-1";
playersize_cookie = undefined;
}
else {
document.cookie = "playersize_status=narrow;expires=2592000";
playersize_cookie = 'narrow';
}
}
if (playersize_cookie == 'narrow') {
$('body').append(`<style id="ps_toggle_style">body:not(.no-scroll) #player-theater-container {max-height:480px !important}
body:not(.no-scroll) #player-theater-container #player-container {width: 100%;max-width: 854px;height:100%;max-height:480px; margin: 0 auto;}</style>`);
}
else {
$('#ps_toggle_style').remove();
}
}
ps_toggle('');
$('body').on('click', '.ps_toggle', function() {
ps_toggle('change');
});
/*
Player keyboard shortcuts
*/
var volume;
$(document).ready(function() {
$(window).on('keydown', function(e) {
var player = $('video.html5-main-video')[0];
var player_wrap = $('.html5-video-player');
if (!player_wrap.is(":focus") && !$('input').is(":focus") && !$('textarea').is(":focus") && !$('.comment-simplebox-text').is(":focus") && !$('[contenteditable="true"]').is(":focus")) {
if (e.keyCode == 0 || e.keyCode == 32) { // Space = play/pause
e.preventDefault();
if (player.paused == false) {
player.pause();
} else {
player.play();
}
}
}
if ((e.ctrlKey || e.metaKey) && e.keyCode == 38) { // Ctrl + Up = Volume up
volume = player.volume + 0.1;
if (volume > 1) volume = 1;
player.volume = volume;
}
if ((e.ctrlKey || e.metaKey) && e.keyCode == 40) { // Ctrl + Down = Volume down
volume = player.volume - 0.1;
if (volume < 0) volume = 0;
player.volume = volume;
}
if (e.which === 27) { // Esc Shift+Tab = focus on body //e.shiftKey
e.preventDefault();
$('#page').focus();
$('video').blur();
$('#masthead-search-term').focus();
$('#yt-masthead-container').focus();
} else if (e.which == 9) { // Tab = focus on video element
e.preventDefault();
$('video.html5-main-video').focus();
}
});
});
})();