// ==UserScript== // @name Sort Reports // @namespace http://tampermonkey.net/ // @version 2024-09-18 // @description Sort Reports // @author You // @match https://f95zone.to/reports/queue/* // @icon https://www.google.com/s2/favicons?sz=64&domain=f95zone.to // @grant none // @updateURL https://git.zonies.xyz/Ryahn/F95Zone-Scripts/raw/branch/main/report-organizer.js // @downloadURL https://git.zonies.xyz/Ryahn/F95Zone-Scripts/raw/branch/main/report-organizer.js // ==/UserScript== (function() { 'use strict'; window.onload = function() { const reportTable = document.querySelector('.structItemContainer'); if (!reportTable) return; const sortContainer = document.createElement('div'); sortContainer.style.textAlign = 'right'; sortContainer.innerHTML = ` `; reportTable.parentNode.insertBefore(sortContainer, reportTable); document.getElementById('sortType').addEventListener('change', function() { const sortValue = this.value; const rows = Array.from(reportTable.querySelectorAll('.structItem')); switch (sortValue) { case 'dateAsc': sortRows(rows, '.structItem-latestDate', true, 'date'); break; case 'dateDesc': sortRows(rows, '.structItem-latestDate', false, 'date'); break; case 'sectionAsc': sortRows(rows, '.structItem-forum a', true); break; case 'sectionDesc': sortRows(rows, '.structItem-forum a', false); break; case 'prefixAsc': sortRows(rows, '.structItem-title', true, 'prefix'); break; case 'prefixDesc': sortRows(rows, '.structItem-title', false, 'prefix'); break; } }); function sortRows(rows, selector, asc = true, type = 'text') { const sortedRows = rows.sort((a, b) => { let valA = a.querySelector(selector); let valB = b.querySelector(selector); if (!valA || !valB) { return asc ? (valA ? -1 : 1) : (valB ? -1 : 1); } if (type === 'date') { valA = parseInt(valA.getAttribute('data-time')) * 1000; valB = parseInt(valB.getAttribute('data-time')) * 1000; return asc ? valA - valB : valB - valA; } if (type === 'prefix') { valA = valA.innerText.trim().split(' - ')[0]; valB = valB.innerText.trim().split(' - ')[0]; return asc ? valA.localeCompare(valB) : valB.localeCompare(valA); } valA = valA.innerText.trim(); valB = valB.innerText.trim(); return asc ? valA.localeCompare(valB) : valB.localeCompare(valA); }); sortedRows.forEach(row => reportTable.appendChild(row)); } }; })();