On MetaFilter.com, adds a comment number like "comment 1 of 30" to each comment.
当前为
// ==UserScript==
// @name MetaFilter number all comments
// @version 10
// @grant none
// @match http://*.metafilter.com/*
// @match https://*.metafilter.com/*
// @description On MetaFilter.com, adds a comment number like "comment 1 of 30" to each comment.
// @locale en-us
// @run-at document-idle
// @namespace https://greasyfork.org/users/324881
// ==/UserScript==
function addCountToComments() {
// first, clear all counts in case this runs more than once on a page.
let allCommentCountSpans = Array.from(document.getElementsByClassName('tehhundUserScriptCommentCount'));
for (let currentSpan of allCommentCountSpans) { currentSpan.remove(); }
// then add counts to every comment div.
let allCommentDivs = document.getElementsByClassName('comments');
allCommentDivs = Array.from(allCommentDivs).filter( function(div) { return div.previousSibling.tagName == 'A'; }); // Some "comment" divs are not actually comments. All comments, and only comments, are preceeded by an anchor tag. So this filters down to only real comment divs.
for (let [i,divToHighlight] of allCommentDivs.entries()) {
divToHighlight.lastChild.innerHTML += '<span class=\'tehhundUserScriptCommentCount\'>Comment ' + (i+1) + ' of ' + allCommentDivs.length + '. </span>';
}
}
function runIfCommentAdded(mutationsList, observer) { // When a mutation event occurs, check if it was adding a comment and if so renumber the comments.
for (let mutation of mutationsList) { // Loop over all mutations for this event.
try {
if (mutation.target.previousSibling.tagName == 'A') { // If the target's previousSibling is an anchor tag, it's probably an added comment so renumber the comments. Otherwise do nothing.
addCountToComments();
}
} catch(e) { /* previousSibling is null if the mutation was adding a Favorite, and that throws an error on the console every time. This try/catch discards the error. */ }
}
}
addCountToComments(); // Run once when the page is idle
// After the initial run, observe the main content div for changes such as new comments and run addCountToComments() again.
const mutationObserver = new MutationObserver(runIfCommentAdded);
mutationObserver.observe(document.getElementById('posts'), { attributes: true, childList: true, subtree: true })