# HG changeset patch # User nanaya # Date 1673793405 -32400 # Node ID b9b84779a672adaf44c653a93eca9dca7bf93a66 # Parent ef21ef445fc68ef9878a4e281953fb18d9dba02d Combine tweetdeck fixes diff -r ef21ef445fc6 -r b9b84779a672 tweetdeck-column-fix.user.js --- a/tweetdeck-column-fix.user.js Sun Jan 15 23:33:41 2023 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -// ==UserScript== -// @name Tweetdeck column fix -// @namespace https://nanaya.net -// @version 1.1.0 -// @description No weird column alignment and color for scrollbar -// @author nanaya -// @match https://tweetdeck.twitter.com/* -// @grant GM_addStyle -// @downloadURL https://hg.nanaya.net/ec-userscripts/raw-file/tip/tweetdeck-column-fix.user.js -// ==/UserScript== - -'use strict'; - -/* global GM_addStyle */ -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; - } -`); diff -r ef21ef445fc6 -r b9b84779a672 tweetdeck-fixes.user.js --- /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(); diff -r ef21ef445fc6 -r b9b84779a672 tweetdeck-large-image.user.js --- a/tweetdeck-large-image.user.js Sun Jan 15 23:33:41 2023 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -// ==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();