YouTube Uploads Sorter Button

Adds a button to a YouTube channel's videos page which sorts recent uploads by views

Fra 13.07.2022. Se den seneste versjonen.

// ==UserScript==
// @name         YouTube Uploads Sorter Button
// @namespace    http://tampermonkey.net/
// @version      0.13.1
// @description  Adds a button to a YouTube channel's videos page which sorts recent uploads by views
// @author       Lex
// @include      /^https?:\/\/(www\.)?youtube\.com\/(c|channel|user)\//
// @require      https://code.jquery.com/jquery-3.2.1.min.js
// @grant        none
// ==/UserScript==

(function($) {
    'use strict';

    function addButton() {
        if ($("#sortViewButton").length == 0) {
            $("<button>").attr("id", "sortViewButton").html("Sort by Views").click(sortByViews).prependTo("#sort-menu");
        }
    }
    function getViews(e) {
        try {
            let viewsTitle = e.$['video-title'].getAttribute("aria-label");
            if (viewsTitle.search(/No views$/) > -1) // video has no views yet
                return 0;
            else {
                const views = parseInt(/([\d,]+) views( - play Short)?$/.exec(viewsTitle)[1].replace(/,/g, ""));
                return views;
            }
        } catch(err) {
            //console.log(err);
            return 0;
        }
    }
    function sortByViews() {
        let container = $("#contents #items");
        let items = container.children();
        //console.log(items);
        //console.log(getViews(items[0]));
        container.append(items.toArray().sort(function(a, b) {
            return getViews(b) - getViews(a);
        }));
    }

    setTimeout(addButton, 1000);
    addButton(); // try to add the button immediately
    $("#sub-menu:visible").on("DOMNodeInserted", addButton); // but also add button whenever the #sub-menu is changed
})(window.jQuery);