Last active
June 12, 2022 15:32
-
-
Save DesertEagleDerek/20f4c08979347376d421bf41d952de76 to your computer and use it in GitHub Desktop.
Remove shorts from YouTube channel pages
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name YouTube shorts hider | |
// @namespace https://gist.githubusercontent.com/DesertEagleDerek/20f4c08979347376d421bf41d952de76/raw/YouTube_Shorts_Hider.user.js | |
// @updateURL https://gist.githubusercontent.com/DesertEagleDerek/20f4c08979347376d421bf41d952de76/raw/YouTube_Shorts_Hider.user.js | |
// @downloadURL https://gist.githubusercontent.com/DesertEagleDerek/20f4c08979347376d421bf41d952de76/raw/YouTube_Shorts_Hider.user.js | |
// @version 0.2 | |
// @author DesertEagleDerek | |
// @description Remove shorts from YouTube channel pages | |
// @homepage http://www.deserteaglederek.com/ | |
// @match https://www.youtube.com/c/* | |
// @run-at document-start | |
// @require https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js | |
// ==/UserScript== | |
//------------------------------------------------------------------------------------------------------------------------------ | |
// DO NOT CHANGE ANYTHING ABOVE THIS LINE! FEEL FREE TO ENABLE OR DISABLE THE OPTIONS BELOW, THOUGH! | |
//------------------------------------------------------------------------------------------------------------------------------ | |
var $startTimer = 500; /* time to wait before checking if the video grid renderer exists */ | |
var $removeTimer = 500; /* time to wait before removing shorts after duplicate loaders have been removed */ | |
//------------------------------------------------------------------------------------------------------------------------------ | |
// DO NOT CHANGE ANYTHING BELOW THIS LINE! THIS IS WHERE ALL OF THE GEEKY CODE STUFF LIVES! | |
//------------------------------------------------------------------------------------------------------------------------------ | |
/* globals jQuery */ | |
/* globals $ */ | |
var $observerAttached; | |
var $timerIdRefresh; | |
jQuery(document).ready(jQueryBegin); | |
function modifyPage() { | |
removeLoaders(); | |
setTimeout(removeShorts, $removeTimer); | |
} | |
function removeShorts() { | |
// remove shorts | |
var $videos = $('ytd-grid-renderer').children('#items').children('ytd-grid-video-renderer').has('ytd-thumbnail-overlay-time-status-renderer[overlay-style="SHORTS"]'); | |
$videos.each(function() { | |
$(this).remove(); | |
}); | |
} | |
function removeLoaders() { | |
// remove left over loading sections | |
var $loader = $('ytd-continuation-item-renderer'); | |
if ($loader.length > 1) { | |
var current = 1; | |
$loader.each(function() { | |
if (current < $loader.length) { | |
$(this).remove(); | |
current += 1; | |
} | |
}); | |
} | |
} | |
function checkForRenderer() { | |
// content section loaded? | |
if ($('ytd-grid-renderer').length >= 1) { | |
// cancel element check timer | |
clearInterval($timerIdRefresh); | |
// remove initial shorts | |
modifyPage(); | |
// monitor page for shorts loaded after scrolling | |
attachObserver(); | |
} | |
} | |
function attachObserver() { | |
// select the target node | |
var target = document.querySelector('ytd-grid-renderer') | |
// create an observer instance | |
var observer = new MutationObserver(function(mutations) { | |
// this happens every time something changes | |
modifyPage(); | |
}); | |
// pass in the target node, as well as the observer options | |
observer.observe(target, { | |
attributes: true, | |
childList: true, | |
characterData: true | |
}); | |
} | |
function jQueryBegin() { | |
// set timer to check for renderer element when the page is ready | |
$timerIdRefresh = setInterval(checkForRenderer, $startTimer); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment