🏠 Home 

RPS Comment Orderer

Fixes comment ordering on RPS articles


Install this script?
// ==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()