Here you go, it adds a "sort by merit" button right before the "reply" button. Works well even on large threads, tried it with all posts from the anniversary art thread.
// ==UserScript==
// @name Bitcointalk Sort By Merit
// @version 1.0
// @grant none
// @include https://bitcointalk.org/index.php?topic=*
// @run-at document-end
// ==/UserScript==
const sortBtn = document.createElement("a")
sortBtn.href = "javascript:void(0)"
sortBtn.textContent = "sort by merit"
const threadButtons = document.querySelector("td.mirrortab_back")
threadButtons.prepend(document.createTextNode(" | "))
threadButtons.prepend(sortBtn)
sortBtn.addEventListener("click", sortByMerit)
function sortByMerit() {
const table = document.querySelector("#bodyarea .bordercolor > tbody")
const posts = [...table.rows]
.map(post => {
try {
const merit = [...post.querySelectorAll(".td_headerandpost .smalltext i > a")]
.map(e => {
return parseInt(e.nextSibling.textContent.match(/\((.*)\)/)[1])
})
.reduce((acc, e) => acc + e, 0)
return { merit, post }
} catch (e) {
console.error(e)
}
})
.sort(({ merit: merit1 }, { merit: merit2 }) => merit2 - merit1)
posts.forEach(({ post, merit }) => {
try {
table.append(post)
} catch (e) {}
})
}