// ==UserScript== // @name Imgur: fix HTML escape sequences in the old design // @namespace http://tampermonkey.net/ // @version 1.1.1 // @description Imgur's "old design" sometimes includes HTML escape sequences in post descriptions, such as having """ and "'" instead of quotation marks. This replaces them with the appropriate characters. // @author Corrodias // @match https://imgur.com/gallery/* // @icon https://www.google.com/s2/favicons?sz=64&domain=imgur.com // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; const mutationObserver = new MutationObserver(mutations => { for (const mutation of mutations) { processMutation(mutation); } }); function processMutation(mutation) { for (const node of mutation.addedNodes) { if (node.nodeType !== Node.ELEMENT_NODE) continue; // Only act if a new post has been loaded. if (!node.classList.contains('post-image-container')) return; replaceText(node); } } function replaceText(post) { // This is empty if the current page is not a post. const description = post.getElementsByClassName('post-image-description'); for (const a of description) { a.textContent = a.textContent .replaceAll('"', '"') .replaceAll(''', "'") .replaceAll('>', '>') .replaceAll('<', '<') .replaceAll('&', '&'); } } // Monitor dynamically loaded content, for when the user nagivates to a new post. Observe as little as possible. const postContent = document.body.getElementsByClassName('post-images'); for (const a of postContent) { mutationObserver.observe(a, { attributes: false, childList: true, subtree: true }); } // Also run the replacement now in case this is a post. replaceText(document.body); })();