Mercurial > ec-userscripts
diff tweetdeck-large-image.user.js @ 115:7774174022af
Backed out changeset b9b84779a672
author | nanaya <me@nanaya.net> |
---|---|
date | Sun, 15 Jan 2023 23:43:44 +0900 |
parents | tweetdeck-fixes.user.js@817b62848b27 |
children | d9dc190bccaf |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tweetdeck-large-image.user.js Sun Jan 15 23:43:44 2023 +0900 @@ -0,0 +1,87 @@ +// ==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'; + +function origLink () { + 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(); +} + +origLink();