YT Feed Sorter

Sorts the YouTube feed so that all scheduled streams come before finished streams and uploaded videos.

目前為 2022-05-26 提交的版本,檢視 最新版本

// ==UserScript==
// @name         YT Feed Sorter
// @namespace    YTFeedSorter
// @version      0.2
// @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-alternate';
    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);
})();