Misc changes.

Layout changes

Smaller filename font, smaller thumbnails, subjectively better multi-file posts.

.uploadCell img:not(.imgExpanded) {
    width: 125px;
    height: 125px;
    object-fit: contain;
  }
  div.panelUploads.multipleUploads figure.uploadCell details summary 
  div.uploadDetails :not(.coloredIcon, .originalNameLink, .hideMobile) {
    display: none;
  }
  .uploadDetails {
    font-size: 9px;
  }
  .divMessage {
      margin: 1em 1em 1em 1em;
  }
  .innerPost {  
    min-width: 100%;
  }

Hide hidden post stubs

1
2
3
.postCell:has(> span.unhideButton.glowOnHover) {
  display: none;
}

JavaScript snippets

Thread trimmer. Set a post limit and how many posts to clear once it hits that limit.
By default, once it hits 500 posts it trims the thread down to 100 posts below the limit.

const threadTrimmer = function () {
    var maxLength = 500;
    var clearDownTo = 400;
    var postLinks = document.querySelectorAll('.postCell');
    if ( postLinks.length > maxLength){
        for (let i=0; i < postLinks.length-clearDownTo; i++){
            postLinks[i].remove();
        }
    }
}
setInterval(threadTrimmer, 10000); //Cleans up once every 10s

Hide replies to hidden posts

const hideReplies = function() {
    const _posts = document.querySelectorAll('.postCell');
    for (let i = 0; i < _posts.length; i++){
       var _post = _posts[i];
       const postLinks = _post.querySelectorAll('.divMessage > a.quoteLink');
       if (postLinks != null && postLinks.length > 0){
           postLinks.forEach(_linkedPost => {
               const _linkID = _linkedPost.href.split('#')[1];
               try {
                   if (document.getElementById(_linkID).firstChild.className == "unhideButton glowOnHover" 
                   || document.getElementById(_linkID).style.display == 'none'){
                       _post.style.display = 'none';
                   }
               } catch (error){
               }
           });
       }
    }
}
setInterval(hideReplies, 2000);

Prevent auto scrolling to the bottom after replying. Use Greasemonkey/Violentmonkey for this one.

// ==UserScript==
// @name        8chan-overrides
// @namespace   Violentmonkey Scripts
// @match       https://8chan.moe/*/res/*
// @grant       none
// @version     1.0
// @author      -
// @description Prevents auto scrolling after replying
// ==/UserScript==

thread.replyCallback = function(status, data) {

  if (status === 'ok') {

    postCommon.storeUsedPostingPassword(api.boardUri, api.threadId, data);
    api.addYou(api.boardUri, data);

    document.getElementById('fieldMessage').value = '';
    document.getElementById('fieldSubject').value = '';
    qr.clearQRAfterPosting();
    postCommon.clearSelectedFiles();

    if (!thread.autoRefresh || !thread.socket) {
      thread.refreshPosts(true);
    }

  } else {
    alert(status + ': ' + JSON.stringify(data));
  }

};

thread.replyCallback.stop = function() {

  thread.replyButton.value = thread.originalButtonText;

  qr.setQRReplyText(thread.originalButtonText);

  thread.replyButton.disabled = false;
  qr.setQRReplyEnabled(true);

};

thread.replyCallback.progress = function(info) {

  if (info.lengthComputable) {
    var newText = 'Uploading ' + Math.floor((info.loaded / info.total) * 100)
        + '%';
    thread.replyButton.value = newText;

    qr.setQRReplyText(newText);
  }

};
Edit
Pub: 18 Apr 2025 01:19 UTC
Edit: 20 Apr 2025 19:13 UTC
Views: 900