Mercurial > ec-userscripts
diff tweetdeck-fixes.user.js @ 110:b9b84779a672
Combine tweetdeck fixes
author | nanaya <me@nanaya.net> |
---|---|
date | Sun, 15 Jan 2023 23:36:45 +0900 |
parents | tweetdeck-large-image.user.js@ef21ef445fc6 |
children | 055f5d084706 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tweetdeck-fixes.user.js Sun Jan 15 23:36:45 2023 +0900 @@ -0,0 +1,107 @@ +// ==UserScript== +// @name Tweetdeck large image +// @namespace https://nanaya.net +// @version 2.0.9 +// @description Fixes for TweetDeck +// @author nanaya +// @match https://tweetdeck.twitter.com/* +// @grant none +// @downloadURL https://hg.nanaya.net/ec-userscripts/raw-file/tip/tweetdeck-fixes.user.js +// ==/UserScript== + +'use strict'; + +/* global GM_addStyle */ +// No weird column alignment and color for scrollbar +function fixColumn () { + GM_addStyle(` + .app-columns { + display: flex; + } + .column { + top: 0; + flex: none; + } + .app-columns-container.app-columns-container.app-columns-container.app-columns-container { + bottom: 0; + background-color: #555; + } + `); +} + +// No more stupid link for images in tweetdeck +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(); +} + +fixColumn(); +origLink();