Fixes comment ordering on RPS articles
// ==UserScript== // @name RPS Comment Orderer // @namespace http://tampermonkey.net/ // @version 1.1 // @description Fixes comment ordering on RPS articles // @author Bzly // @match https://www.rockpapershotgun.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=rockpapershotgun.com // @grant none // @license MIT // ==/UserScript== /* jshint esversion:10 */ function mainSorter() { const order = document.querySelector('div#comments > div.container').getAttribute('data-order') let reverse if (order === 'desc') {reverse = true} else {reverse = false} document.querySelectorAll('ol.replies').forEach(e => { let copy_ol = e.cloneNode(false); let listItems = Array.prototype.slice.call(e.children, 0) sortLi(listItems, reverse).forEach(i => copy_ol.appendChild(i)) e.parentNode.replaceChild(copy_ol, e) }) console.log('Ordered comment replies') } function sortLi(list, reverse=false) { list.sort(function(a, b) { let aCat = Date.parse(a.querySelector('.when').getAttribute('data-date')) let bCat = Date.parse(b.querySelector('.when').getAttribute('data-date')) if (aCat > bCat) return 1 if (bCat > aCat) return -1 return 0 }) if (reverse) {return list.reverse()} else {return list} } const sleepUntil = async (f, timeoutMs) => { return new Promise((resolve, reject) => { const timeWas = new Date(); const wait = setInterval(function() { if (f()) { console.log("resolved after", new Date() - timeWas, "ms"); clearInterval(wait); resolve(); } else if (new Date() - timeWas > timeoutMs) { // Timeout console.log("rejected after", new Date() - timeWas, "ms"); clearInterval(wait); reject(); } }, 20); }); } function callback(mutList) {mutList.forEach((m) => { if (m.type==="attributes") { mainSorter() } })} async function main() { try { await sleepUntil(() => document.querySelector('ol.posts'), 5000) mainSorter() const observer = new MutationObserver(callback); observer.observe(document.querySelector('div#comments > div.container'), {attributes: true, subtree: false }); } catch { console.log('Timeout :(') } } main()