Created
September 24, 2022 16:07
-
-
Save kevin-ferrier/8d206a5cdc3eef226b79de660b663bfb to your computer and use it in GitHub Desktop.
Auto-expand posts in new reddit interface (tampermonkey script)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Reddit auto-expand | |
// @namespace http://tampermonkey.net/ | |
// @version 1.0 | |
// @description Auto-expand posts in new reddit | |
// @author Blueshirt | |
// @match https://www.reddit.com/* | |
// @icon https://www.google.com/s2/favicons?sz=64&domain=reddit.com | |
// @grant GM_log | |
// @run-at document-end | |
// ==/UserScript== | |
(function() { | |
'use strict'; | |
var excluded_posts = []; | |
var auto_expand = true; | |
function onKeyup(evt) { | |
// Use https://keycode.info/ to get keys | |
// ` shortcut | |
if (evt.keyCode == 192) { | |
// expando(); | |
auto_expand = !auto_expand; | |
if (auto_expand) { | |
window.alert("Auto-expand enabled."); | |
} | |
else { | |
window.alert("Auto-expand disabled."); | |
} | |
} | |
} | |
function mouseClicked(event) { | |
const elem = event.target; | |
if (elem.className.includes("icon-expand")) { | |
// add the post to the excluded list | |
const post_id = elem.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.id; | |
if (!excluded_posts.includes(post_id)) { | |
excluded_posts.push(post_id); | |
} | |
} | |
if (elem.className.includes("icon-collapse")) { | |
// add the post to the excluded list | |
const post_id = elem.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.id; | |
if (!excluded_posts.includes(post_id)) { | |
excluded_posts.push(post_id); | |
} | |
} | |
} | |
function getPostId(iconElement) { | |
let id = iconElement.id; | |
while(iconElement !== undefined && (id === undefined || id === "")) { | |
iconElement = iconElement.parentElement; | |
id = iconElement.id; | |
} | |
return id; | |
} | |
function autoExpand() { | |
if (auto_expand) { | |
let icons = document.getElementsByClassName("icon-expand"); | |
for (const icon of icons) { | |
const postId = getPostId(icon); | |
if (!excluded_posts.includes(postId)) { | |
let button = icon.parentNode | |
button.click(); | |
} | |
} | |
} | |
} | |
// listen to "`" to enable / disable auto_expand | |
document.addEventListener('keyup', onKeyup, true); | |
// listen to click to add to excluded list | |
document.addEventListener("click", mouseClicked); | |
// listen to page scroll to expand new content | |
const MutationObserver = window.MutationObserver || window.WebKitMutationObserver; | |
var observer = new MutationObserver(function(mutations, observer) { | |
autoExpand(); | |
}); | |
// TODO: probably tuning this can improve performances | |
observer.observe(document, { | |
subtree: true, | |
attributes: true | |
}); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment