Hide already watched (progress bar at 100%) video on user's, channel's and subscriptions' pages
当前为
// ==UserScript==
// @name Youtube watched hider
// @namespace http://joshuaarus.fr
// @version 0.4
// @description Hide already watched (progress bar at 100%) video on user's, channel's and subscriptions' pages
// @author Arus Joshua
// @match https://www.youtube.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// CONSTANTS
var IMG_GRAY = "data:image/png;base64,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";
var IMG_WHITE = "data:image/png;base64,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";
var IMG_RED = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTCtCgrAAAAE6ElEQVR4Xu2dQXLTMBhGs2ySZtEZd9Ftp+UiWXNGbsGSW3AFhm4owwy0ocyU73elNnHk2o5kO7Hem3lAYll2kg/9QnbJDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmxvNsVsg1Rlu4t/R0sRdReVFBv11ff727vf3xno+LxZPaPmOcm7Ozf3c3N/fV99c+A20Pfj5y3DDaCdiJ+KDYi9Dj4AvE09H+UlfCN0zQ7EA/P3z49LBabfzJ4HTdzOdPvYbMOrXOf11cfLcDYn66zz5dwKyj31dXn/0BMG9dFuLCZR0QKqwaHS7tbENfsHPM3rWLSTe0Y6G6elfpDLHUzbm6jVq2AyUQm+xcEtWYEohtbVcS1dBKIMsK2MrWJVGNGK2wq82jlltpDe2MGLRx1LKNXPfDA60ftew6YGAHxEat0rkY7aKNBReX8VAfl8u/+n2/HOpJJu0Y6345ZNKOsQbLod3gFWqM2FbLkIvTC3qysJu6qg0Ru+hWFN7mWXrA/ApT+TbPYn6FqdyZZzG/wlS+zrP0oHg4P7c1iGBDxC66LBXMr7AP11kE689ySakf1jyCJT9yR+ygZhMse438bORwrnNZanhdW9GfCVjPlksOmSw17F0c1XPlfxfgrsqH9sEDLZcc9Mt9aOPErL0JTdv4iaTE2l/WWSZ3jNYGy9B2ymNi7U0NbpiY7wbLo3aUx0QSrABqT3mMlGDVoH0ojxESrAa0L+XxAAlWS9QH5bGDBKsD6ofy2FKCdQDqj/LYIMGKQP1SHmskWJGob8pjQIKVCB2D8rglwUqMjkV5lASrB3S87MsjweoRHTfb8kiwBkDHz648EqyB0DlkVR4J1sDoXMryOPWf5SRYI6FzmnR5JFgjovOabHkkWEeAzm9y5ZFgHRE6z8mUR4J1ROg8CdaJSSkcWII1IjovJu8n7tEFS+fEcsMEPJpg6VxYIJ2QowdL58AlnQk6arB0fC5CT9RRgqXjZlH2QhKsHtDxuNEv9OQEHSxYOlZ2ZS8kwUqEjpFt2QtJsCJR39mXvZAEKwL1S9mrkWAdgPpjlGqQYHVA/RColhKslqgPyl4HCVYD2pdR6gAJVg3ah0BFSLACqD1lL1KCtYXaMUolki8QENpOoBLLV55Q9pJrl7Wy/pIme55RKr3llzTl9rVyhh4zSvVo+bVy+kMWX4TpA2V3IPDfOfZuPl/dKyl7w5lHsB4uL7+EnsfezGbEwmEtg1Vw1yOm0mWpKP+VlMmSAw5gudTgyWTJAQewXGrw6AnmWZjKtzVDPSg28/lTpQFiJ12GXuZXHuZZGOvO/MrDPAtj3ZlfebSBeRbGun8XiZ4sHlarTaUhYitddnbnVx67QFvdAbGNlh0Xo33UoMjkjlJMqMtMeLTyMInHrgYn7VXUkEk8dnV/0l5FjQruW8K2uqy8XwY9asiohW1tHq08asw94dioy0i70cpjO1ASsc5OJbCKdqQkYp3tS2AV7UxJxD0PKoFVrAPChd4kofJYR5Ifn8pY99nb1ChNqLaxTq1zW2nlxsA8tIvL7hpy+kCFsAPJMmR2gxfXGE9f+wzts3SX9Wx06meE6oKdwNbJ7OjDV+fjYsHoF6G9f6H3ddtKWOocN0SpsRdUeYHYzWkFAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABms9l/iFivcr0NvBMAAAAASUVORK5CYII=";
var IMG_TO_UPDATE = null;
var COOKIE_NAME = "";
var HIDE = false;
var CURRENT_URL = null;
var CURRENT_PAGE = null;
var PAGES = [
{
regex: /https:\/\/www\.youtube\.com\/.*\/(.*)\/videos/g,
displayStyle: "inline-block",
querySelector: "ytd-grid-video-renderer"
},
{
regex: /https:\/\/www\.youtube\.com\/feed\/history/g,
displayStyle: "flex",
cookieName: "history",
querySelector: "ytd-video-renderer"
},
{
regex: /https:\/\/www\.youtube\.com\/feed\/subscriptions/g,
displayStyle: "inline-block",
cookieName: "subscriptions",
querySelector: "ytd-grid-video-renderer"
},
{
regex: /https:\/\/www\.youtube\.com\/playlist\?list=(.*)/g,
displayStyle: "flex",
querySelector: "ytd-playlist-video-renderer"
},
{
regex: /https:\/\/www\.youtube\.com\/watch\?.*/g,
displayStyle: "inline-block",
cookieName: "watch",
querySelector: "ytd-compact-video-renderer"
}
];
// FUNCTIONS
var setCookie = function(cvalue) {
var d = new Date();
d.setTime(d.getTime() + (60 * 24 * 60 * 60 * 1000));
var expires = "expires="+d.toUTCString();
document.cookie = COOKIE_NAME + "=" + cvalue + ";" + expires + ";path=/";
}
var getCookie = function() {
var name = COOKIE_NAME + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i <ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) === 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
var isTheaterMode = function(){
var masthead = document.querySelector("ytd-masthead");
var res = masthead.hasAttribute("dark");
return res;
}
var getButtonIcon = function() {
return HIDE ? IMG_RED : (isTheaterMode() ? IMG_WHITE : IMG_GRAY);
}
var displayOrHide = function() {
if (CURRENT_PAGE === null) {
return;
}
document.querySelectorAll(CURRENT_PAGE.querySelector).forEach(function(element){
var progressBar = element.getElementsByClassName("ytd-thumbnail-overlay-resume-playback-renderer");
if (progressBar.length > 0)
{
var avancement = progressBar[0].style.width;
if (HIDE && avancement == "100%")
{
element.style.display = "none";
} else {
element.style.display = CURRENT_PAGE.displayStyle;
}
}
});
};
var addButton = function() {
var img = document.createElement('img');
img.src = getButtonIcon();
img.width = "20";
img.height = "20";
IMG_TO_UPDATE = img;
var ytIcon = document.createElement("yt-icon");
ytIcon.classList.add("guide-icon");
ytIcon.classList.add("style-scope");
ytIcon.classList.add("ytd-guide-entry-renderer");
var ytIconButton = document.createElement("yt-icon-button");
ytIconButton.classList.add("style-scope");
ytIconButton.classList.add("ytd-topbar-menu-button-renderer");
ytIconButton.classList.add("style-default");
var aImg = document.createElement("a");
aImg.href = "";
aImg.onclick = function() {
HIDE = !HIDE;
setCookie(HIDE ? "true" : "false");
displayOrHide();
img.src = getButtonIcon();
return false;
}
var divHide = document.createElement("ytd-topbar-menu-button-renderer");
divHide.id = "youtubeWatchedHiderDiv";
divHide.classList.add("style-scope");
divHide.classList.add("ytd-masthead");
divHide.classList.add("style-default");
var buttonBar = document.getElementById("buttons");
buttonBar.insertBefore(divHide, buttonBar.firstChild);
divHide.querySelector("div").appendChild(aImg);
aImg.appendChild(ytIconButton);
ytIconButton.querySelector("button").appendChild(ytIcon);
ytIcon.appendChild(img);
};
var init = function() {
CURRENT_URL = window.location.href;
CURRENT_PAGE = null;
PAGES.some(function(page) {
if (CURRENT_URL.match(page.regex)) {
CURRENT_PAGE = page;
return true;
}
});
if (CURRENT_PAGE === null) {
return;
}
COOKIE_NAME = "youtubeWatchedHiderCookie_" + (CURRENT_PAGE.cookieName !== undefined ? CURRENT_PAGE.cookieName : CURRENT_PAGE.regex.exec(CURRENT_URL)[1]);
HIDE = getCookie() == "true";
addButton();
}
// FUNCTION TO HANDLE THE CHANGE IN THEATER MODE IN WATCH PAGE
setTimeout(function(){
// Select the node that will be observed for mutations
var targetNode = document.querySelector("ytd-masthead");
// Options for the observer (which mutations to observe)
var config = { attributes: true };
// Callback function to execute when mutations are observed
var callback = function(mutationsList) {
IMG_TO_UPDATE.src = getButtonIcon();
};
// Create an observer instance linked to the callback function
var observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(targetNode, config);
}, 1000);
// AUTOMATIC UPDATE OF THE PAGE
setInterval(function(){
if (document.getElementById("buttons").childElementCount == 5) {
init();
}
displayOrHide();
}, 1000);
})();