YouTube: Move "New To You" to front

Moves the "New To You" button to the front of the list, right after "All".

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name       YouTube: Move "New To You" to front
// @namespace  https://mathemaniac.org/
// @version    1.1.0
// @description  Moves the "New To You" button to the front of the list, right after "All".
// @match        https://www.youtube.com/
// @copyright  2023, Sebastian Paaske Tørholm
// @license    MIT
// @grant none
// ==/UserScript==
/* jshint -W097 */
'use strict';

// Changelog:
// 1.1.0: Re-do the sorting when returning to front page from a video as well.


var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
var config = { childList: true, characterData: false, attributes: false, subtree: true };
var observer = new MutationObserver( function (mutations) {
    mutations.forEach( function (mutation) {
        if (mutation.type == 'childList') {
            let chips = document.querySelector('#chips');
            if (chips && ! chips.querySelector('yt-chip-cloud-chip-renderer:has([title="All"]) + yt-chip-cloud-chip-renderer:has([title="New to you"])')) {
                moveButton();
            }
        }
    });
});

observer.observe(document.querySelector('body'), config);

var interval;

function moveButton () {
    let chips = document.querySelector('#chips');
    if (! chips) return;

    let all = chips.querySelector('yt-chip-cloud-chip-renderer:has([title="All"])');
    let newToYou = chips.querySelector('yt-chip-cloud-chip-renderer:has([title="New to you"])');

    if (!all || !newToYou) return;

    newToYou.remove();
    all.insertAdjacentElement('afterend', newToYou);
    clearInterval(interval);
}

interval = setInterval(moveButton, 100);