// ==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);
})();