NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name clien.net Top Comments
// @description Reorder comments by number of Likes
// @namespace https://openuserjs.org/scripts/idthi/
// @match https://www.clien.net/service/board/*
// @grant GM_addStyle
// @version 1.0
// @author deth
// @updateURL https://openuserjs.org/meta/idthi/clien.net_Top_Comments.meta.js
// @downloadURL https://openuserjs.org/install/idthi/clien.net_Top_Comments.user.js
// @copyright 2022, idthi (https://openuserjs.org/users/idthi)
// @license MIT
// ==/UserScript==
// jshint esversion: 11
GM_addStyle(`
span.hearts { letter-spacing: -0.2em; }
`);
const comments = [...document.querySelectorAll("div.comment_row")];
const get_likes = x => parseInt(x?.querySelector("button.comment_symph>strong")?.innerText) || 0;
comments.forEach(x => x.likes = get_likes(x));
{
// https://en.wikipedia.org/wiki/Braille_Patterns
const box_chars = ["","⡀","⡄","⡆","⡇","⣇","⣧","⣷","⣿"];
const max_top_comment = 64;
[...comments]
.sort((x, y) => y.likes - x.likes)
.slice(0, max_top_comment)
.filter(x => x.likes > 1)
.forEach((x, i) => {
const hearts = document.createElement("span");
hearts.classList.add("hearts");
const len = box_chars.length - 1;
hearts.innerText
= box_chars[len].repeat(x.likes / len)
+ box_chars[x.likes % len];
hearts.style.color = `hsl(${Math.min(i, 16) / 16.0 * 270.0}deg 100% 50%)`;
x.querySelector("div.comment_content_symph")?.appendChild(hearts);
});
}
{
const sorted = comments
.reduce((acc, x) => {
if (x.classList.contains("re") && acc.length > 0) {
const last = acc.at(-1);
last.replies.push(x);
last.likes = Math.max(x.likes, last.likes);
} else {
acc.push({ comment: x, likes: x.likes, replies: [] });
}
return acc;
}, [])
.sort((xs, ys) => ys.likes - xs.likes)
.flatMap(xs => [xs.comment, ...xs.replies.sort((x, y) => y.likes - x.likes)]);
sorted[0]?.parentNode?.append(...sorted);
}