Update Hide sticky elements to 1.1.0
- Handle sticky elements added after the they're hidden, for example: https://web.archive.org/web/20220909140854/https://www.scientificamerican.com/article/we-asked-gpt-3-to-write-an-academic-paper-about-itself-mdash-then-we-tried-to-get-it-published/
This commit is contained in:
		
							parent
							
								
									505e5fd682
								
							
						
					
					
						commit
						a2b8370309
					
				| 
						 | 
					@ -4,7 +4,8 @@
 | 
				
			||||||
// @match       http*://*/*
 | 
					// @match       http*://*/*
 | 
				
			||||||
// @grant       GM_registerMenuCommand
 | 
					// @grant       GM_registerMenuCommand
 | 
				
			||||||
// @grant       GM_unregisterMenuCommand
 | 
					// @grant       GM_unregisterMenuCommand
 | 
				
			||||||
// @version     1.0.0
 | 
					// @grant       GM_addStyle
 | 
				
			||||||
 | 
					// @version     1.1.0
 | 
				
			||||||
// @author      blankie
 | 
					// @author      blankie
 | 
				
			||||||
// @description Adds a button to the monkey menu to hide sticky elements
 | 
					// @description Adds a button to the monkey menu to hide sticky elements
 | 
				
			||||||
// @inject-into content
 | 
					// @inject-into content
 | 
				
			||||||
| 
						 | 
					@ -12,29 +13,65 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"use strict";
 | 
					"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let stickyElements = [];
 | 
					let stickyElements = new Set();
 | 
				
			||||||
 | 
					let style = null;
 | 
				
			||||||
 | 
					let observer = new MutationObserver(function(mutations) {
 | 
				
			||||||
 | 
					    for (let mutation of mutations) {
 | 
				
			||||||
 | 
					        handleOneNode(mutation.target);
 | 
				
			||||||
 | 
					        for (let node of mutation.addedNodes) {
 | 
				
			||||||
 | 
					            handleNode(node);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        for (let node of mutation.removedNodes) {
 | 
				
			||||||
 | 
					            handleNode(node, true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let hideStickyElements = true;
 | 
					let hideStickyElements = true;
 | 
				
			||||||
let menuId;
 | 
					let menuId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function hideAllStickyElements() {
 | 
					function handleOneNode(node, removed = false) {
 | 
				
			||||||
    for (let element of document.body.querySelectorAll("*")) {
 | 
					    if (node.nodeType !== Node.ELEMENT_NODE) {
 | 
				
			||||||
        let style = getComputedStyle(element);
 | 
					        return;
 | 
				
			||||||
        if (style.position !== "sticky" && style.position !== "fixed") {
 | 
					 | 
				
			||||||
            continue;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let originalDisplayValue = element.style.getPropertyValue("display");
 | 
					    let computedStyle = getComputedStyle(node);
 | 
				
			||||||
        let originalDisplayPriority = element.style.getPropertyPriority("display");
 | 
					    let isSticky = computedStyle.position === "sticky" || computedStyle.position === "fixed";
 | 
				
			||||||
        element.style.setProperty("display", "none", "important");
 | 
					    if (!stickyElements.has(node) && isSticky && !removed) {
 | 
				
			||||||
        stickyElements.push([element, originalDisplayValue, originalDisplayPriority]);
 | 
					        node.classList.add("hseSticky");
 | 
				
			||||||
 | 
					        stickyElements.add(node);
 | 
				
			||||||
 | 
					    } else if (stickyElements.has(node) && (!isSticky || removed)) {
 | 
				
			||||||
 | 
					        node.classList.remove("hseSticky");
 | 
				
			||||||
 | 
					        stickyElements.delete(node);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function unhideAllStickyElements() {
 | 
					function handleNode(node, removed = false) {
 | 
				
			||||||
    for (let [element, originalDisplayValue, originalDisplayPriority] of stickyElements) {
 | 
					    if (node.nodeType !== Node.ELEMENT_NODE) {
 | 
				
			||||||
        element.style.setProperty("display", originalDisplayValue, originalDisplayPriority);
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    stickyElements = [];
 | 
					
 | 
				
			||||||
 | 
					    handleOneNode(node, removed);
 | 
				
			||||||
 | 
					    for (let element of node.querySelectorAll("*")) {
 | 
				
			||||||
 | 
					        handleOneNode(element, removed);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function hideAllStickyElements() {
 | 
				
			||||||
 | 
					    style = GM_addStyle(".hseSticky { display: none !important; }");
 | 
				
			||||||
 | 
					    handleNode(document.body);
 | 
				
			||||||
 | 
					    observer.observe(document.body, {subtree: true, childList: true, attributes: true});
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function unhideAllStickyElements() {
 | 
				
			||||||
 | 
					    observer.disconnect();
 | 
				
			||||||
 | 
					    style.remove();
 | 
				
			||||||
 | 
					    style = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (let element of stickyElements) {
 | 
				
			||||||
 | 
					        element.classList.remove("hseSticky");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    stickyElements.clear();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue