// ==UserScript== // @name kbin collapsible comments // @match https://kbin.social/* // @description Collapse and hide comments on kbin.social // @version 1.1 // @namespace https://greasyfork.org/users/1096641 // @downloadURL none // ==/UserScript== (function() { 'use strict'; // This function will run for each comment block function processComment(commentBlock, level) { // Find the header, figure, footer, and content within this comment block var header = commentBlock.querySelector('header'); var figure = commentBlock.querySelector('figure'); var footer = commentBlock.querySelector('footer'); var content = commentBlock.querySelector('.content'); var menu = footer.querySelector('menu'); // Create the collapse/expand button var button = document.createElement('a'); button.innerHTML = ''; button.style.cursor = 'pointer'; button.style.marginLeft = '1rem'; // Add the button to the header header.appendChild(button); // Set a click event for the collapse/expand button button.addEventListener('click', function() { if (content.style.display === 'none') { content.style.display = ''; footer.style.display = ''; figure.style.display = ''; commentBlock.style.height = ''; button.innerHTML = ''; } else { content.style.display = 'none'; footer.style.display = 'none'; figure.style.display = 'none'; commentBlock.style.height = '40px'; commentBlock.style.paddingTop = '0.53rem'; button.innerHTML = ''; } }); // Check if this comment has any children var nextComment = commentBlock.nextElementSibling; if (nextComment && nextComment.classList.contains('comment-level--' + (level + 1))) { // Create the collapse children button var collapseChildrenButton = document.createElement('li'); var collapseChildrenLink = document.createElement('button'); collapseChildrenLink.class = 'stretched-link' collapseChildrenLink.innerHTML = 'hide replies'; collapseChildrenLink.style.cursor = 'pointer'; collapseChildrenButton.appendChild(collapseChildrenLink); // Add the button to the menu in the footer menu.appendChild(collapseChildrenButton); // Set a click event for the collapse children button collapseChildrenLink.addEventListener('click', function() { // Find all following comment blocks var followingComments = commentBlock.nextElementSibling; while (followingComments && followingComments.className.match(/comment-level--(\d)/)[1] > level) { if (followingComments.style.display === 'none') { followingComments.style.display = ''; collapseChildrenLink.innerHTML = 'hide replies'; } else { followingComments.style.display = 'none'; collapseChildrenLink.innerHTML = 'show replies'; } followingComments = followingComments.nextElementSibling; } }); } } // Find all comment blocks on the page var commentBlocks = document.querySelectorAll('blockquote.entry-comment'); // Process each comment block for (var i = 0; i < commentBlocks.length; i++) { var level = parseInt(commentBlocks[i].className.match(/comment-level--(\d)/)[1]); processComment(commentBlocks[i], level); } })();