// ==UserScript==
// @name Youtube block all, not interested in all, dismiss all
// @name:zh-CN Youtube block all, not interested in all, dismiss all
// @name:zh-TW Youtube block all, not interested in all, dismiss all
// @name:ja Youtube block all, not interested in all, dismiss all
// @name:ko Youtube block all, not interested in all, dismiss all
// @name:de Youtube block all, not interested in all, dismiss all
// @name:es Youtube block all, not interested in all, dismiss all
// @name:eo Youtube block all, not interested in all, dismiss all
// @name:fr Youtube block all, not interested in all, dismiss all
// @name:it Youtube block all, not interested in all, dismiss all
// @name:ru Youtube block all, not interested in all, dismiss all
// @name:vi Youtube block all, not interested in all, dismiss all
// @name:pt-BR Youtube block all, not interested in all, dismiss all
// @name:id Youtube block all, not interested in all, dismiss all
// @name:ar Youtube block all, not interested in all, dismiss all
// @name:bg Youtube block all, not interested in all, dismiss all
// @name:cs Youtube block all, not interested in all, dismiss all
// @name:tr Youtube block all, not interested in all, dismiss all
// @name:el Youtube block all, not interested in all, dismiss all
// @name:hu Youtube block all, not interested in all, dismiss all
// @name:th Youtube block all, not interested in all, dismiss all
// @version 0.1
// @description 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:zh-CN 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:zh-TW 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:ja 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:ko 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:de 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:es 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:eo 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:fr 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:it 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:ru 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:vi 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:pt-BR 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:id 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:ar 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:bg 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:cs 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:tr 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:el 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:hu 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @description:th 不感兴趣, दिलचस्पी नहीं है, 興味なし, 관심 없음, Kein Interesse,لا يهمني,Pas intéressé, Не интересует, Não tenho interesse, No me interesa
// @author evanlai
// @match https://www.youtube.com/*
// @require https://openuserjs.org/src/libs/sizzle/GM_config.js
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/sweetalert.min.js
// @require https://cdn.jsdelivr.net/npm/[email protected]/dist/cdn.min.js
// @grant GM_getValue
// @grant GM_setValue
// @grant none
// @namespace https://gf.qytechs.cn/users/732057
// ==/UserScript==
if (window.trustedTypes && window.trustedTypes.createPolicy) {
window.trustedTypes.createPolicy('default', {
createHTML: string => string,
createScriptURL: string => string,
createScript: string => string,
});
}
function wait(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
function inArray(array, element) {
return array.indexOf(element) !== -1;
}
var runflag = true;
var firstEnterThisPage = true;
async function dismissCurrent() {
let clickedSomething = false;
let foundAusblenden = false;
for (const item of document.querySelectorAll('ytd-menu-service-item-renderer')) {
if (item.icon === (localStorage.getItem('videoOrCreator') === "video" ? "REMOVE" : "NOT_INTERESTED")) {
clickedSomething = true;
item.click();
}
// else if (item.icon === "__") {
// foundAusblenden = item;
// }
}
if (!clickedSomething && foundAusblenden !== false) {
foundAusblenden.click();
}
return true;
}
async function dismissAll() {
let list = document.querySelectorAll('ytd-rich-grid-media button[aria-label]');
while (firstEnterThisPage && list.length < 1) {
await wait(1000);
list = document.querySelectorAll('ytd-rich-grid-media button[aria-label]');
}
firstEnterThisPage = false;
let i = 0;
for (let item of list) {
item.click();
await wait(50);
await dismissCurrent();
await wait(100);
i++;
if (i >= parseInt(localStorage.getItem('maximumNumberOfBlocksPerSession'))) break;
}
if (runflag) {
runflag = false;
// await dismissAll();
}
window.location.reload();
}
window.dismissAll = function() {
dismissAll();
}
window.openGmcSettings = function() {
let settings = document.getElementById('J_settings');
settings.style.display = '';
swal({
content: settings,
buttons: {
// confirm: {
// text: "save",
// value: 1
// },
cancel: "close",
},
}).then(async (value) => {
settings.style.display = 'none';
// if (value !== 1) return false
});
}
function createButton() {
var elementForInsertNewButton = document.querySelector('#start') || document.querySelector('#logo-icon') || document.querySelector('#country-code');
var dismissAllLink = document.createElement('a');
dismissAllLink.id = 'J_dismiss_all';
dismissAllLink.href = 'javascript:';
dismissAllLink.style.display = 'inline-flex';
dismissAllLink.style.marginLeft = '2em';
dismissAllLink.style.alignItems = 'center';
dismissAllLink.style.verticalAlign = 'middle';
dismissAllLink.style.color = 'gray';
dismissAllLink.style.fontSize = '2em';
dismissAllLink.style.lineHeight = '2em';
dismissAllLink.style.textDecoration = 'none';
dismissAllLink.onclick = window.dismissAll;
dismissAllLink.textContent = '⟳';
var openGmcSettingsLink = document.createElement('a');
openGmcSettingsLink.id = 'J_open_settings';
openGmcSettingsLink.href = 'javascript:';
openGmcSettingsLink.style.display = 'inline-flex';
openGmcSettingsLink.style.marginTop = '1px';
openGmcSettingsLink.style.marginLeft = '16px';
openGmcSettingsLink.style.alignItems = 'center';
openGmcSettingsLink.style.verticalAlign = 'middle';
openGmcSettingsLink.style.color = 'gray';
openGmcSettingsLink.style.fontSize = '2em';
openGmcSettingsLink.style.lineHeight = '2em';
openGmcSettingsLink.style.textDecoration = 'none';
openGmcSettingsLink.onclick = window.openGmcSettings;
openGmcSettingsLink.textContent = '⋮';
elementForInsertNewButton.appendChild(dismissAllLink);
elementForInsertNewButton.appendChild(openGmcSettingsLink);
}
createButton();
// settings
document.addEventListener('alpine:init', () => {
var maximumNumberOfBlocksPerSession = localStorage.getItem('maximumNumberOfBlocksPerSession');
if(typeof maximumNumberOfBlocksPerSession === 'undefined') {
maximumNumberOfBlocksPerSession = 12;
localStorage.setItem('maximumNumberOfBlocksPerSession', maximumNumberOfBlocksPerSession);
}
Alpine.store('maximumNumberOfBlocksPerSession', {
value: maximumNumberOfBlocksPerSession,
valueHasChanged(){
localStorage.setItem('maximumNumberOfBlocksPerSession', this.value);
}
})
var autoMode = localStorage.getItem('autoMode');
if(typeof autoMode === 'undefined') {
autoMode = false;
localStorage.setItem('autoMode', autoMode);
}
Alpine.store('autoMode', {
on: autoMode,
toggle() {
this.on = ! this.on
localStorage.setItem('autoMode', this.on);
}
})
var videoOrCreator = localStorage.getItem('videoOrCreator');
if(typeof videoOrCreator === 'undefined') {
videoOrCreator = 'video';
localStorage.setItem('videoOrCreator', videoOrCreator);
}
Alpine.store('videoOrCreator', {
value: videoOrCreator,
toggle() {
this.value = this.value === "creator" ? "video" : "creator";
localStorage.setItem('videoOrCreator', this.value);
}
})
if(localStorage.getItem('autoMode') && localStorage.getItem('autoMode') !== 'false') window.dismissAll()
});
var gmcSettings = document.createElement('div');
gmcSettings.id = 'J_settings';
gmcSettings.innerHTML = `
<span>Maximum number of blocks per session:<input type="text" x-data="$store.maximumNumberOfBlocksPerSession" x-model="value" x-init="$watch('value', value => $store.maximumNumberOfBlocksPerSession.valueHasChanged())"></span>
<button x-data @click="$store.autoMode.toggle()">Automatically refresh the page and process all</button> ---> <span x-data="$store.autoMode" x-text="on"></span>
<button x-data @click="$store.videoOrCreator.toggle()">Block video or creator</button> ---> <span x-data="$store.videoOrCreator" x-text="value"></span>
`;
document.querySelector('body').appendChild(gmcSettings);