TLDR: скрипт сортирует комментарии под статьей в порядке добавления, без учета уровня вложенности и дискуссий. Можно просматривать раз в несколько дней до появления чувства дежавю.
Поймал себя на мысли что за длинными дискуссиями на хабре неудобно следить, особенно если они растягиваются на несколько дней. Особенно если там есть какая-то живучая подветка, где участники поливают друг друга истиной в течение нескольких дней. Особенно если в этом потоке истины нужно просто извлечь мнения и факты не погружаясь в саму дискуссию. Возможно кому-то еще это окажется полезным.
Быстрый вариант для выполнения в консоли разработчика:
(function() {
function sortComments() {
let comments = Array.from(
document.querySelectorAll(".comment")
);
comments.sort(function (a,b) {
let timeA = a.querySelector("time");
let timeB = b.querySelector("time");
timeA = ( timeA !== null ) ? timeA.innerText : "";
timeB = ( timeB !== null ) ? timeB.innerText : "";
return timeB.localeCompare(timeA);
});
let rendered = "";
for (let i = 0; i < comments.length; i++) {
rendered += comments[i].innerHTML + "<br/>";
}
document.querySelector("#comments").innerHTML = rendered;
document.querySelector("#comments").scrollIntoView();
}
sortComments();
})();
Вариант для GreaseMonkey (в правом верхнем углу появляется кнопка):
// ==UserScript==
// @name Сортировка комментариев по дате
// @version 1
// @grant none
// @include https://habr.com/post/*
// @include https://habr.com/company/*/blog/*
// ==/UserScript==
(function() {
function sortComments() {
let comments = Array.from(
document.querySelectorAll(".comment")
);
comments.sort(function (a,b) {
let timeA = a.querySelector("time");
let timeB = b.querySelector("time");
timeA = ( timeA !== null ) ? timeA.innerText : "";
timeB = ( timeB !== null ) ? timeB.innerText : "";
return timeB.localeCompare(timeA);
});
let rendered = "";
for (let i = 0; i < comments.length; i++) {
rendered += comments[i].innerHTML + "<br/><br/>";
}
document.querySelector("#comments").innerHTML = rendered;
document.querySelector("#comments").scrollIntoView();
}
let sortButton = document.createElement("div");
sortButton.style["position"] = "fixed";
sortButton.style["top"] = 0;
sortButton.style["right"] = 0;
sortButton.style["height"] = "1.3em";
sortButton.style["width"] = "11em";
sortButton.style["border"] = "1px solid grey";
sortButton.style["text-align"] = "center";
sortButton.style["cursor"] = "pointer";
sortButton.style["z-index"] = 999;
sortButton.innerText = "Комментарии по дате";
sortButton.addEventListener("click", function (event) {
event.preventDefault();
sortComments();
event.target.remove();
});
document.body.appendChild(sortButton);
})();
Хотелось бы видеть такой функционал как часть сайта, потому что «комментарии полезней статьи» — это классика. И что-то интересное можно поймать и неделю спустя после публикации.
Автор: PerlPower