Mercurial > ec-userscripts
view tweetdeck-large-image.user.js @ 135:59c8866710f8
[mandarake-direct-link] skip redundant node type check
author | nanaya <me@nanaya.net> |
---|---|
date | Mon, 08 Jan 2024 21:53:12 +0900 |
parents | 8de2d53a4cb1 |
children |
line wrap: on
line source
// ==UserScript== // @name Tweetdeck large image // @namespace https://nanaya.net // @version 2.0.9 // @description No more stupid link for images in tweetdeck // @author nanaya // @match https://tweetdeck.twitter.com/* // @grant none // @downloadURL https://hg.nanaya.net/ec-userscripts/raw-file/tip/tweetdeck-large-image.user.js // ==/UserScript== 'use strict'; const fix = function (link) { // basic sanity check if (!link.classList.contains('js-media-image-link')) { return; } // don't run again if already run on passed link if (link._ecUserscript) { return; } link._ecUserscript = true; const image = link.querySelector('.media-img'); let url; // sometimes the image is just background image of the link. // strip all query strings and original :size suffix if (image == null) { url = window.getComputedStyle(link).backgroundImage.replace(/^url\(('|")?(.+?)\1\)$/, '$2'); } else { url = image.src; } const parsedUrl = new URL(url); if (parsedUrl.searchParams.get('name') == null) { url = url.replace(/(\..+:).+/, '$1orig'); } else { if (parsedUrl.pathname.match(/\.[^.]+$/) !== null) { parsedUrl.searchParams.delete('format'); } parsedUrl.searchParams.set('name', 'orig'); url = parsedUrl.href; } link.setAttribute('href', url); }; // loop through passed nodes (or body if called without arguments) const run = function (nodes) { if (nodes == null) { nodes = [document.body]; } for (let i = 0; i < nodes.length; i++) { // first try fixing itself fix(nodes[i]); // and then find all the links inside const links = nodes[i].querySelectorAll('.js-media-image-link'); for (let j = 0; j < links.length; j++) { fix(links[j]); } } }; const onMutate = function (mutations) { for (const mutation in mutations) { run(mutation.addedNodes); } }; // the observer const observer = new window.MutationObserver(onMutate); // start the observer observer.observe(document, { childList: true, subtree: true }); // initial run on existing document run();