🏠 Home 

Sort menu for arist channels on YouTube

add the sort menu to artist channels, as it is hidden from them

// ==UserScript==
// @name         Sort menu for arist channels on YouTube
// @namespace    https://github.com/adeleine1412
// @icon         https://github.com/adeleine1412/youtube-artist-sort-menu/raw/master/img/icon.png
// @icon64       https://github.com/adeleine1412/youtube-artist-sort-menu/raw/master/img/icon.png
// @version      1.10.1
// @description  add the sort menu to artist channels, as it is hidden from them
// @author       adeleine
// @match        https://www.youtube.com/*
// @license      MIT
// @resource     css https://github.com/adeleine1412/youtube-artist-sort-menu/raw/master/css/style.min.css
// @resource     html https://github.com/adeleine1412/youtube-artist-sort-menu/raw/master/html/sort-menu.html
// @grant        GM_getResourceText
// @grant        GM_addStyle
// ==/UserScript==
(function () {
'use strict';
// Load latest styles from the repository
GM_addStyle(GM_getResourceText("css"));
// Node selction and observer options
const targetNode = document.querySelector('body');
const config = { attributes: true, childList: true, subtree: true };
const callback = function (mutationsList, observer) {
for (let mutation of mutationsList) {
// Skip if it has the default sort-menu (non-artist channels)
if (document.querySelector('#sort-menu').innerHTML == "") {
// Create new element and append html code from the github rebo
let sort_menu = document.querySelector('#sort-menu');
let html = document.createElement('div');
html.innerHTML = GM_getResourceText("html");
sort_menu.appendChild(html);
// Hide dropdown when clicking outside of it
window.addEventListener('click', function (e) {
document.querySelector('.adeleine-sort-menu-wrapper>.dropdown').classList.remove('active');
});
// Show dropdown and stop propagation to the dropdown clicking-outside event
document.querySelector('.adeleine-sort-menu').addEventListener('click', function (e) {
e.stopPropagation();
document.querySelector('.adeleine-sort-menu-wrapper>.dropdown').classList.toggle('active');
});
}
}
};
// Create an observer instance linked to the callback function and start observing
const observer = new MutationObserver(callback);
observer.observe(targetNode, config);
})();