This script displays images in the comments of old Reddit. It also allows you to expand the image by clicking on it and set image size through a custom GUI!
// ==UserScript== // @name Old Reddit show image in comments // @namespace http://tampermonkey.net/ // @version 1.4 // @description This script displays images in the comments of old Reddit. It also allows you to expand the image by clicking on it and set image size through a custom GUI! // @author minnie // @match https://old.reddit.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=reddit.com // @grant none // @license MIT // ==/UserScript== (function() { // Default pixel size and storage key const STORAGE_KEY = 'imagePixelSize'; let pixelSize = localStorage.getItem(STORAGE_KEY) || '300'; // Default to 300 if no value in localStorage function replaceLinks() { // Select all <a> tags that are children of <p> elements const links = document.querySelectorAll('p > a'); links.forEach(link => { // Check if the link's inner HTML matches '<image>' if (link.innerHTML === '<image>') { // Create a new <img> element const img = document.createElement('img'); // Set the src attribute of the <img> to the href of the <a> img.src = link.href; // Apply any styles from the <a> to the <img> img.style = link.style.cssText; img.style.height = `${pixelSize}px`; // Set height to user-defined pixel size img.style.width = 'auto'; // Set width to auto // Replace the <a> with the <img> in the DOM link.parentNode.replaceChild(img, link); // Add click event listener to expand the image img.addEventListener('click', () => { expandImage(img); }); } }); } function observeDynamicContent() { const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { // Check if there are added nodes and if any is an element node if (mutation.addedNodes.length && Array.from(mutation.addedNodes).some(node => node.nodeType === 1)) { replaceLinks(); } }); }); // Start observing the document body for added nodes observer.observe(document.body, { childList: true, subtree: true }); } function expandImage(image) { // Create a new div element for the overlay const overlay = document.createElement('div'); const expandedImage = document.createElement('img'); expandedImage.src = image.src; overlay.id = 'expandedImage'; // Apply CSS styles to the overlay overlay.classList.add("expandedImage"); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.display = 'flex'; overlay.style.justifyContent = 'center'; overlay.style.alignItems = 'center'; overlay.style.zIndex = '1000'; // Apply CSS to the expanded image expandedImage.style.width = 'auto'; // Maintain aspect ratio expandedImage.style.height = '90%'; // Maintain aspect ratio expandedImage.style.borderRadius = '3px'; // Append the expanded image to the overlay overlay.appendChild(expandedImage); // Add custom CSS const expandedImageCSS = document.createElement('style'); const css = ` div#expandedImage { background-color: rgba(0, 0, 0, 0.7) !important; backdrop-filter: blur(4px) grayscale(50%); } `; expandedImageCSS.textContent = css; document.head.appendChild(expandedImageCSS); // Append the overlay to the body document.body.appendChild(overlay); // Add click event listener to remove the overlay overlay.addEventListener('click', () => { overlay.remove(); }); } function createSettingsGUI() { // Create and style the overlay const overlay = document.createElement('div'); overlay.id = 'settingsOverlay'; overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backdropFilter = 'blur(3px)'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.8)'; overlay.style.display = 'flex'; overlay.style.justifyContent = 'center'; overlay.style.alignItems = 'center'; overlay.style.zIndex = '1001'; // Create and style the settings box const settingsBox = document.createElement('div'); settingsBox.style.cssText = ` font-size: 1.3rem; background-color: white; padding: 20px 30px; border-radius: 5px; text-align: center; box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); `; settingsBox.innerHTML = ` <h3 style="margin-bottom: 10px;">Image Settings</h3> <p style="opacity: 70%">Change the size of the images. <span style="color: red; font-weight: bold;">THIS WILL RELOAD THE TAB!</span></p> <label for="pixel-size">Pixel Size:</label> <input style="font-size: 1.3rem;" type="number" id="pixel-size" value="${pixelSize}" style="width: 100px;"/> <button id="apply-settings" style="margin-top: 10px;">Apply</button> `; overlay.appendChild(settingsBox); document.body.appendChild(overlay); // Apply settings document.getElementById('apply-settings').addEventListener('click', () => { pixelSize = document.getElementById('pixel-size').value; localStorage.setItem(STORAGE_KEY, pixelSize); document.body.removeChild(overlay); window.location.reload(); replaceLinks(); // Apply the new pixel size to all images }); } function initialize() { // Add button to open settings window.addEventListener('load', () => { const openBtn = document.createElement("button"); openBtn.innerText = "Image Settings"; openBtn.style.border = '1px white solid'; openBtn.onclick = () => { createSettingsGUI(); }; const targetElement = document.querySelector("div.panestack-title span.title"); if (targetElement) { targetElement.appendChild(openBtn); } else { console.error('Target element not found'); } }); replaceLinks(); observeDynamicContent(); } initialize(); })();