ShadeX91 / Sort Twitch clips

// ==UserScript==
// @name         Sort Twitch clips
// @version      0.1
// @description  Sorts the twitch.tv/my-clips page by plays.
// @author       ShadeX91
// @match        https://clips.twitch.tv/my-clips
// @require http://code.jquery.com/jquery-latest.js
// @require https://gist.githubusercontent.com/raw/2625891/waitForKeyElements.js
// ==/UserScript==

waitForKeyElements(".table__header", initialize);

function initialize() {
        
    $('.table__header > .table__cell').click(function(){
        var table = $(this).parents('table').eq(0);
        var rows = table.find('tr.table__row').toArray().sort(comparer($(this).index()));
        this.asc = !this.asc;
        if (!this.asc){rows = rows.reverse();}
        for (var i = 0; i < rows.length; i++){table.append(rows[i]);}
    });
    
    function comparer(index) {
        return function(a, b) {
            var valA = getCellValue(a, index), valB = getCellValue(b, index);
            // column indizes: title: 0, channel: 1, game: 2, plays: 3, created: 4
            var result;
            switch(index) {
                case 0:                    
                case 1:
                case 2:
                    result = valA.localeCompare(valB);
                    break;
                case 3:
                    result = valA - valB;
                    break;
                case 4:
                    valA = dateStringToNumber(valA);
                    valB = dateStringToNumber(valB);
                    result = valA - valB;
                    break;
                default:
                    result = valA.localeCompare(valB);
            }
             
            return result;
        };
    }
    function getCellValue(row, index){ 
        var val = $(row).children('td').eq(index);
        var result;
        if(val.find('span').length > 0)
            result = val.find('span');
        else if(val.find('a').length > 0)
            result = val.find('a');
        else
            result = val;
        return result.html();
    }

    function dateStringToNumber(text) {
        var days = text.search(" day");
        var months = text.search(" month");
        var weeks = text.search(" week");
        var years = text.search(" year");
        
        var index = Math.max(days, months, weeks, years);
        var count = parseInt(text.substr(0, index));
        if(weeks != -1) 
            count *= 7;
        else if(months != -1)
            count *= 30;
        else if(years != -1)
            count *= 365;
        
        return count;
    }
}