NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==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; } }