Sorts the YouTube feed so that all scheduled streams come before finished streams and uploaded videos.
当前为
// ==UserScript==
// @name YT Feed Sorter
// @namespace YTFeedSorter
// @version 0.1
// @description Sorts the YouTube feed so that all scheduled streams come before finished streams and uploaded videos.
// @match *://*.youtube.com/*
// @author KFP
// ==/UserScript==
(function() {
'use strict';
const feedSelector = '[page-subtype="subscriptions"] #contents.ytd-section-list-renderer';
const blockSelector = '#items.ytd-grid-renderer';
const liveSelector = '.badge-style-type-live-now';
const soonSelector = '.ytd-toggle-button-renderer';
const sortBlock = block => {
[...block.children].sort((a, b) => {
const ai = a.querySelector(liveSelector) ? 2 : a.querySelector(soonSelector) ? 1 : 0;
const bi = b.querySelector(liveSelector) ? 2 : b.querySelector(soonSelector) ? 1 : 0;
return (ai > bi) ? -1 : (ai < bi) ? 1 : 0;
}).forEach(item => block.appendChild(item));
};
const observer = new MutationObserver(mutations => {
for (const mut of mutations) {
for (const added of mut.addedNodes) {
const block = added.querySelector(blockSelector);
if (block) sortBlock(block);
}
}
});
const initFeed = setInterval(() => {
const feed = document.querySelector(feedSelector);
if (feed) {
feed.querySelectorAll(blockSelector).forEach(sortBlock);
observer.observe(feed, {childList: true});
clearInterval(initFeed);
}
}, 100);
})();