Mercurial > ec-userscripts
view 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 source
// ==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();