NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Instagram image viewer // @namespace https://arnoldsk.lv // @version 0.1 // @description Adds a way to open large image srcset URLs // @author ArnoldsK // @match https://www.instagram.com/* // @grant none // @updateURL https://openuserjs.org/meta/arnoldsk/Instagram_large_image_viewer.meta.js // @downloadURL https://openuserjs.org/install/arnoldsk/Instagram_large_image_viewer.user.js // @copyright 2019, arnoldsk (https://openuserjs.org/users/arnoldsk) // @license MIT // ==/UserScript== setInterval(() => { 'use strict'; const imgs = document.getElementsByTagName("img"); // Add listeners to the images for (const img of imgs) { const srcset = img.getAttribute("srcset"); if (srcset) { // Remove the dumb click blocking img.parentElement.nextSibling.style.pointerEvents = "none"; // Add hover events img.removeEventListener("mouseover", onMouseenter); img.addEventListener("mouseover", onMouseenter); } } }, 500); function onMouseenter(e) { console.log("hover"); const img = e.target; const srcset = img.getAttribute("srcset"); if (srcset) { const sets = srcset.split(",").map(set => ({ url: set.split(" ")[0], size: set.split(" ")[1], })); // Create a new menu element const menu = document.createElement("div"); // Configure the menu menu.className = "srcset-menu"; menu.style.display = "flex"; menu.style.flexDirection = "row"; menu.style.position = "absolute"; menu.style.bottom = 0; menu.style.left = "50%"; menu.style.transform = "translateX(-50%)"; menu.style.background = "#000"; menu.style.opacity = 0.5; // Add set links for (const set of sets) { const link = document.createElement("a"); // Configure the link link.href = set.url; link.target = "_blank"; link.innerHTML = set.size; link.style.fontSize = "10px"; link.style.display = "inline-block"; link.style.padding = "2px 5px"; link.style.color = "#fff"; menu.append(link); } // Append the menu to the image parent's parent (next to the ex click blocker) const targetElement = img.parentElement.parentElement; // Remove old menus const oldMenus = targetElement.getElementsByClassName("srcset-menu"); // Remove existing menus if (oldMenus) { for (const oldMenu of oldMenus) { oldMenu.remove(); } } targetElement.appendChild(menu); } }