"newest" filter restorer

well, what do you think it does, buddy?

Você precisará instalar uma extensão como Tampermonkey, Greasemonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Violentmonkey para instalar este script.

Você precisará instalar uma extensão como Tampermonkey ou Userscripts para instalar este script.

Você precisará instalar uma extensão como o Tampermonkey para instalar este script.

Você precisará instalar um gerenciador de scripts de usuário para instalar este script.

(Eu já tenho um gerenciador de scripts de usuário, me deixe instalá-lo!)

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar uma extensão como o Stylus para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

Você precisará instalar um gerenciador de estilos de usuário para instalar este estilo.

(Eu já possuo um gerenciador de estilos de usuário, me deixar fazer a instalação!)

// ==UserScript==
// @name         "newest" filter restorer
// @namespace    http://tampermonkey.net/
// @version      v0.1
// @description  well, what do you think it does, buddy?
// @author       cv
// @match        *://*.youtube.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @run-at       document-start
// ==/UserScript==

(function() {
    "use strict";

    let isnewestselected = false;
    let newestfilterelement = null;

    function checkurlfornewest() {
        try {
            const url = new URL(window.location.href);
            const spparam = url.searchParams.get("sp");
            isnewestselected = (spparam === "CAI%3D" || spparam === "CAI%253D" ||
                               decodeURIComponent(spparam || "") === "CAI=" ||
                               decodeURIComponent(decodeURIComponent(spparam || "")) === "CAI=");
        } catch (e) {
            isnewestselected = false;
        }
    }
    checkurlfornewest();

    function addnewestfilter() {
        const dialog = document.querySelector("ytd-search-filter-options-dialog-renderer");
        if (!dialog) return false;
        const isopen = dialog.hasAttribute("opened") ||
            (window.getComputedStyle(dialog).display !== "none" &&
            window.getComputedStyle(dialog).visibility !== "hidden");
        if (!isopen) return false;
        let filtergoops = dialog.querySelectorAll("ytd-search-filter-group-renderer");
        let filtergoop = null;
        for (const group of filtergoops) {
            const header = group.querySelector("h4 yt-formatted-string");
            if (header && header.textContent.trim() === "Prioritize") {
                filtergoop = group;
                break;
            }
        }
        if (!filtergoop) {
            filtergoops = document.querySelectorAll("ytd-search-filter-group-renderer");
            for (const group of filtergoops) {
                const header = group.querySelector("h4 yt-formatted-string");
                if (header && header.textContent.trim() === "Prioritize") {
                    filtergoop = group;
                    break;
                }
            }
        }
        if (!filtergoop) return false;
        const existingnewest = filtergoop.querySelector("[data-filter='newest']");
        if (existingnewest) {
            const fs = existingnewest.querySelector("yt-formatted-string");
            if (fs) {
                fs.removeAttribute("is-empty");
                if (!fs.textContent || fs.textContent.trim() === "") {
                    const as = fs.querySelector("yt-attributed-string");
                    if (as && (!as.textContent || as.textContent.trim() === "")) as.remove();
                    fs.textContent = "Newest";
                }
            }
            checkurlfornewest();
            if (isnewestselected) {
                existingnewest.classList.add("selected");
                const link = existingnewest.querySelector("a");
                if (link) {
                    link.setAttribute("aria-selected", "true");
                }
                const dismissicon = existingnewest.querySelector("#dismiss-x");
                if (dismissicon) {
                    dismissicon.setAttribute("hidden", "");
                }
            } else {
                existingnewest.classList.remove("selected");
                const link = existingnewest.querySelector("a");
                if (link) {
                    link.removeAttribute("aria-selected");
                }
                const dismissicon = existingnewest.querySelector("#dismiss-x");
                if (dismissicon) {
                    dismissicon.removeAttribute("hidden");
                }
            }

            const filters = filtergoop.querySelectorAll("ytd-search-filter-renderer:not([data-filter='newest'])");
            const firstfilter = filters[0];
            if (firstfilter && existingnewest.nextSibling !== firstfilter && existingnewest.previousSibling !== firstfilter) {
                firstfilter.parentNode.insertBefore(existingnewest, firstfilter);
            }
            return true;
        }
        const filters = filtergoop.querySelectorAll("ytd-search-filter-renderer");
        let filtertoclone = null;
        for (const filter of filters) {
            const fs = filter.querySelector("yt-formatted-string");
            if (fs && fs.textContent && fs.textContent.trim() !== "" && !fs.hasAttribute("is-empty")) {
                filtertoclone = filter;
                break;
            }
        }
        if (!filtertoclone) filtertoclone = filters[0];
        if (!filtertoclone) return false;
        const firstfilter = filters[0];
        try {
            const currenturl = new URL(window.location.href);
            const spparam = currenturl.searchParams.get("sp");
            isnewestselected = (spparam === "CAI%3D" || spparam === "CAI%253D" ||
                               decodeURIComponent(spparam || "") === "CAI=" ||
                               decodeURIComponent(decodeURIComponent(spparam || "")) === "CAI=");
        } catch (e) {
            isnewestselected = false;
        }
        const newestfilter = filtertoclone.cloneNode(true);
        newestfilter.setAttribute("data-filter", "newest");
        newestfilter.classList.remove("selected");
        if (isnewestselected) {
            newestfilter.classList.add("selected");
            const link = newestfilter.querySelector("a");
            if (link) {
                link.setAttribute("aria-selected", "true");
            }
            const dismissicon = newestfilter.querySelector("#dismiss-x");
            if (dismissicon) {
                dismissicon.setAttribute("hidden", "");
            }
            filtergoop.querySelectorAll("ytd-search-filter-renderer").forEach(filter => {
                if (filter !== newestfilter) {
                    filter.classList.remove("selected");
                    const otherlink = filter.querySelector("a");
                    if (otherlink) {
                        otherlink.removeAttribute("aria-selected");
                    }
                }
            });
        } else {
            newestfilter.classList.remove("selected");
            const link = newestfilter.querySelector("a");
            if (link) {
                link.removeAttribute("aria-selected");
            }
            const dismissicon = newestfilter.querySelector("#dismiss-x");
            if (dismissicon && !isnewestselected) {
                dismissicon.removeAttribute("hidden");
            }
        }
        const formattedstring = newestfilter.querySelector("yt-formatted-string");
        if (formattedstring) {
            formattedstring.removeAttribute("is-empty");
            const attributedstring = formattedstring.querySelector("yt-attributed-string");
            if (attributedstring) attributedstring.remove();
            formattedstring.textContent = "Newest";
            if (!formattedstring.textContent || formattedstring.textContent.trim() === "") {
                formattedstring.innerHTML = "Newest";
            }
        }
        const label = newestfilter.querySelector("#label");
        if (label) {label.setAttribute("title", "Prioritize by upload date")}
        const link = newestfilter.querySelector("a");
        if (link) {
            const currenturl = new URL(window.location.href);
            const searchquery = currenturl.searchParams.get("search_query") || "";
            const newhref = `/results?search_query=${encodeURIComponent(searchquery)}&sp=CAI%253D`; // CAI= stands for.. uh.. CneAwestI=.. according to youtube
            link.href = newhref;
            link.setAttribute("href", newhref);
            if (!link.classList.contains("yt-simple-endpoint")) {
                link.classList.add("yt-simple-endpoint");
            }
            const otherlink = filtergoop.querySelector("ytd-search-filter-renderer:not([data-filter='newest']) a");
            if (otherlink && otherlink.hasAttribute("endpoint")) {
                try {
                    const endpointdata = otherlink.getAttribute("endpoint");
                    if (endpointdata) link.setAttribute("endpoint", endpointdata);
                } catch (e) {}
            }
            link.addEventListener("click", (e) => {
                isnewestselected = true;
                setTimeout(() => {
                    const currenturl = window.location.href;
                    if (!currenturl.includes("sp=CAI") && !currenturl.includes("sp=CAI%3D")) {
                        const url = new URL(window.location.href);
                        url.searchParams.set("sp", "CAI%3D");
                        window.location.href = url.href;
                    }
                }, 100);
            }, false);
        }
        try {
            firstfilter.parentNode.insertBefore(newestfilter, firstfilter);
            newestfilterelement = newestfilter;
            for (let delay of [10, 50, 100, 200]) {
                setTimeout(() => {
                    const fs = newestfilter.querySelector("yt-formatted-string");
                    if (fs) {
                        fs.removeAttribute("is-empty");
                        const as = fs.querySelector("yt-attributed-string");
                        if (as && (!as.textContent || as.textContent.trim() === "")) as.remove();
                        if (!fs.textContent || fs.textContent.trim() === "") {
                            fs.textContent = "Newest";
                        }
                    }
                    const linkafter = newestfilter.querySelector("a");
                    if (linkafter) {
                        const currenturl = new URL(window.location.href);
                        const searchquery = currenturl.searchParams.get("search_query") || "";
                        const newhref = `/results?search_query=${encodeURIComponent(searchquery)}&sp=CAI%253D`;
                        linkafter.href = newhref;
                        linkafter.setAttribute("href", newhref);
                    }
                    const currenturl = new URL(window.location.href);
                    const spparam = currenturl.searchParams.get("sp");
                    const isselected = (spparam === "CAI%3D" || spparam === "CAI%253D" ||
                                       decodeURIComponent(spparam || "") === "CAI=" ||
                                       decodeURIComponent(decodeURIComponent(spparam || "")) === "CAI=");

                    if (isselected) {
                        newestfilter.classList.add("selected");
                        const linkafter = newestfilter.querySelector("a");
                        if (linkafter) {
                            linkafter.setAttribute("aria-selected", "true");
                        }
                        const dismissicon = newestfilter.querySelector("#dismiss-x");
                        if (dismissicon) {
                            dismissicon.setAttribute("hidden", "");
                        }
                    } else {
                        newestfilter.classList.remove("selected");
                        const linkafter = newestfilter.querySelector("a");
                        if (linkafter) {
                            linkafter.removeAttribute("aria-selected");
                        }
                        const dismissicon = newestfilter.querySelector("#dismiss-x");
                        if (dismissicon) {
                            dismissicon.removeAttribute("hidden");
                        }
                    }
                }, delay);
            }
            const goopobserver = new MutationObserver((mutations) => {
                const currentgroup = document.querySelector("ytd-search-filter-group-renderer");
                const currentnewest = currentgroup && currentgroup.querySelector("[data-filter='newest']");
                const currentfirst = currentgroup && currentgroup.querySelector("ytd-search-filter-renderer:not([data-filter='newest'])");
                if (!currentnewest && currentfirst) {
                    setTimeout(() => addnewestfilter(), 50);
                }
            });
            if (filtergoop.parentNode) {
                goopobserver.observe(filtergoop, {
                    childList: true,
                    subtree: false
                });
                setTimeout(() => goopobserver.disconnect(), 10000);
            }
            return true;
        } catch (e) {return false}
    }

    function startfilter() {
        requestAnimationFrame(() => {
            let attempts = 0;
            const maxattempts = 10;
            const tryadd = () => {
                attempts++;
                if (addnewestfilter()) return true;
                if (attempts < maxattempts) {
                    setTimeout(tryadd, 150);
                } else {
                    const waitforbody = () => {
                        if (!document.body) {
                            setTimeout(waitforbody, 100);
                            return;
                        }
                        const observer = new MutationObserver(() => {
                            if (addnewestfilter()) {
                                observer.disconnect();
                            }
                        });
                        observer.observe(document.body, {
                            childList: true,
                            subtree: true
                        });
                        setTimeout(() => observer.disconnect(), 5000);
                    }; waitforbody();
                }
                return false;
            }; tryadd();
        });
    }

    if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", startfilter);
    } else {
        startfilter();
    }

    function setupobservers() {
        if (document.documentElement) {
            let lasturl = location.href;
            const navobserver = new MutationObserver(() => {
                const currenturl = location.href;
                if (currenturl !== lasturl) {
                    lasturl = currenturl;
                    checkurlfornewest();
                    setTimeout(startfilter, 300);
                }
            });
            navobserver.observe(document.documentElement, {
                subtree: true,
                childList: true
            });
        }
        const waitforbody = setInterval(() => {
            if (document.body) {
                clearInterval(waitforbody);
                const filterobserver = new MutationObserver((mutations) => {
                    const filterdialog = document.querySelector("ytd-search-filter-options-dialog-renderer");
                    const isopen = filterdialog && (
                        filterdialog.hasAttribute("opened") ||
                        window.getComputedStyle(filterdialog).display !== "none"
                    );
                    if (isopen) {
                        requestAnimationFrame(() => {
                            requestAnimationFrame(() => {
                                for (let i = 0; i < 8; i++) {
                                    setTimeout(() => {
                                        addnewestfilter();
                                    }, i * 100 + 50);
                                }
                            });
                        });
                    }
                    const filtergoop = document.querySelector("ytd-search-filter-group-renderer");
                    if (filtergoop && isopen) {
                        requestAnimationFrame(() => {
                            setTimeout(() => addnewestfilter(), 50);
                        });
                    }
                });
                filterobserver.observe(document.body, {
                    childList: true,
                    subtree: true,
                    attributes: true,
                    attributeFilter: ["opened", "style", "class"]
                });
                const dialogobserver = new MutationObserver(() => {
                    const filterdialog = document.querySelector("ytd-search-filter-options-dialog-renderer");
                    if (filterdialog) {
                        const dialogopenobserver = new MutationObserver(() => {
                            if (filterdialog.hasAttribute("opened")) {
                                requestAnimationFrame(() => {
                                    requestAnimationFrame(() => {
                                        for (let i = 0; i < 8; i++) {
                                            setTimeout(() => addnewestfilter(), i * 100 + 50);
                                        }
                                    });
                                });
                            }
                        });
                        dialogopenobserver.observe(filterdialog, {
                            attributes: true,
                            attributeFilter: ["opened"]
                        });
                    }
                });
                dialogobserver.observe(document.body, {
                    childList: true,
                    subtree: true
                });
            }
        }, 100);
        setTimeout(() => clearInterval(waitforbody), 10000);
    }

    if (document.readyState === "loading") {
        document.addEventListener("DOMContentLoaded", setupobservers);
    } else {
        setupobservers();
    }

})();