59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// ==UserScript==
 | 
						|
// @name         Misskey Always Show Replies
 | 
						|
// @namespace    https://bubbletea.dev/
 | 
						|
// @version      1.0
 | 
						|
// @description  Automatically clicks the "Show replies" button on Misskey and misskey instances
 | 
						|
// @author       shibao
 | 
						|
// @include      /^https://.*misskey.*$/
 | 
						|
// @downloadURL	 https://gitea.bubbletea.dev/shibao/misskey-always-show-replies/raw/branch/stable/misskey-always-show-replies.user.js
 | 
						|
// @updateURL    https://gitea.bubbletea.dev/shibao/misskey-always-show-replies/raw/branch/stable/misskey-always-show-replies.user.js
 | 
						|
// @grant        none
 | 
						|
// ==/UserScript==
 | 
						|
 | 
						|
// from https://developer.mozilla.org/en-US/docs/Web/API/Node#recurse_through_child_nodes
 | 
						|
function eachNode(rootNode, callback) {
 | 
						|
  if (!callback) {
 | 
						|
    const nodes = [];
 | 
						|
    eachNode(rootNode, function (node) {
 | 
						|
      nodes.push(node);
 | 
						|
    });
 | 
						|
    return nodes;
 | 
						|
  }
 | 
						|
 | 
						|
  if (false === callback(rootNode)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
 | 
						|
  if (rootNode.hasChildNodes()) {
 | 
						|
    const nodes = rootNode.childNodes;
 | 
						|
    for (let i = 0, l = nodes.length; i < l; ++i) {
 | 
						|
      if (false === eachNode(nodes[i], callback)) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
(function () {
 | 
						|
  "use strict";
 | 
						|
 | 
						|
  const observer = new MutationObserver(function (mutationList) {
 | 
						|
    for (const mutation of mutationList) {
 | 
						|
      for (const addedNode of mutation.addedNodes) {
 | 
						|
        eachNode(addedNode, function (node) {
 | 
						|
          node.nodeName == "DIV" &&
 | 
						|
            node.innerHTML == "Show replies" &&
 | 
						|
            node.closest("button._button")?.click();
 | 
						|
        });
 | 
						|
      }
 | 
						|
    }
 | 
						|
  });
 | 
						|
 | 
						|
  observer.observe(document, {
 | 
						|
    childList: true,
 | 
						|
    subtree: true,
 | 
						|
    attributes: true,
 | 
						|
    attributeFilter: ["role"],
 | 
						|
  });
 | 
						|
})();
 |