Mercurial > ec-userscripts
annotate tweetdeck-large-image.user.js @ 107:4bc5a633437c
The urls need to be lowercased
| author | nanaya <me@nanaya.net> |
|---|---|
| date | Sun, 15 Jan 2023 23:15:45 +0900 |
| parents | 9c8cde985caf |
| children | 2c4470b73ad9 |
| rev | line source |
|---|---|
| 24 | 1 // ==UserScript== |
| 2 // @name Tweetdeck large image | |
| 3 // @namespace https://myconan.net | |
| 82 | 4 // @version 2.0.9 |
| 24 | 5 // @description No more stupid link for images in tweetdeck |
| 6 // @author nanaya | |
| 7 // @match https://tweetdeck.twitter.com/* | |
| 8 // @grant none | |
| 82 | 9 // @downloadURL https://hg.myconan.net/ec-userscripts/raw-file/tip/tweetdeck-large-image.user.js |
| 24 | 10 // ==/UserScript== |
| 11 | |
| 66 | 12 ;(function () { |
| 13 'use strict' | |
| 33 | 14 |
| 85 | 15 const fix = function (link) { |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
16 // basic sanity check |
| 66 | 17 if (!link.classList.contains('js-media-image-link')) { |
| 18 return | |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
19 } |
|
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
20 |
|
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
21 // don't run again if already run on passed link |
|
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
22 if (link._ecUserscript) { |
| 66 | 23 return |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
24 } |
| 66 | 25 link._ecUserscript = true |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
26 |
| 85 | 27 const image = link.querySelector('.media-img') |
| 28 let url | |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
29 |
|
61
753765f3814e
Not sure why but sometimes link style is null?
nanaya <me@nanaya.pro>
parents:
60
diff
changeset
|
30 // sometimes the image is just background image of the link. |
|
753765f3814e
Not sure why but sometimes link style is null?
nanaya <me@nanaya.pro>
parents:
60
diff
changeset
|
31 // strip all query strings and original :size suffix |
| 60 | 32 if (image == null) { |
| 66 | 33 url = window.getComputedStyle(link).backgroundImage.replace(/^url\(('|")?(.+?)\1\)$/, '$2') |
| 28 | 34 } else { |
| 66 | 35 url = image.src |
| 28 | 36 } |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
37 |
| 85 | 38 const parsedUrl = new URL(url) |
|
63
53d0f935ecb8
Fix orig might be in different format
nanaya <me@nanaya.pro>
parents:
62
diff
changeset
|
39 |
|
53d0f935ecb8
Fix orig might be in different format
nanaya <me@nanaya.pro>
parents:
62
diff
changeset
|
40 if (parsedUrl.searchParams.get('name') == null) { |
| 66 | 41 url = url.replace(/(\..+:).+/, '$1orig') |
|
63
53d0f935ecb8
Fix orig might be in different format
nanaya <me@nanaya.pro>
parents:
62
diff
changeset
|
42 } else { |
|
67
f03e2d169a8a
Only delete format if there's extension in filename
nanaya <me@nanaya.pro>
parents:
66
diff
changeset
|
43 if (parsedUrl.pathname.match(/\.[^.]+$/) !== null) { |
|
f03e2d169a8a
Only delete format if there's extension in filename
nanaya <me@nanaya.pro>
parents:
66
diff
changeset
|
44 parsedUrl.searchParams.delete('format') |
|
f03e2d169a8a
Only delete format if there's extension in filename
nanaya <me@nanaya.pro>
parents:
66
diff
changeset
|
45 } |
| 66 | 46 parsedUrl.searchParams.set('name', 'orig') |
| 47 url = parsedUrl.href | |
|
62
a065dafbe010
Update to handle new tweetdeck?/twitter? url
nanaya <me@nanaya.pro>
parents:
61
diff
changeset
|
48 } |
|
a065dafbe010
Update to handle new tweetdeck?/twitter? url
nanaya <me@nanaya.pro>
parents:
61
diff
changeset
|
49 |
| 66 | 50 link.setAttribute('href', url) |
| 51 } | |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
52 |
| 85 | 53 // loop through passed nodes (or body if called without arguments) |
| 54 const run = function (nodes) { | |
| 55 if (nodes == null) { | |
| 56 nodes = [document.body] | |
| 57 } | |
| 58 | |
| 59 for (let i = 0; i < nodes.length; i++) { | |
| 60 // first try fixing itself | |
| 61 fix(nodes[i]) | |
| 62 | |
| 63 // and then find all the links inside | |
| 64 const links = nodes[i].querySelectorAll('.js-media-image-link') | |
| 65 | |
| 66 for (let j = 0; j < links.length; j++) { | |
| 67 fix(links[j]) | |
| 68 } | |
| 69 } | |
| 70 } | |
| 71 | |
| 72 const onMutate = function (mutations) { | |
| 73 for (const mutation in mutations) { | |
| 66 | 74 run(mutation.addedNodes) |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
75 } |
| 66 | 76 } |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
77 |
|
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
78 // the observer |
| 85 | 79 const observer = new window.MutationObserver(onMutate) |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
80 |
|
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
81 // start the observer |
| 66 | 82 observer.observe(document, { childList: true, subtree: true }) |
|
55
19c391840d4a
Rewrite the whole thing to use observer instead
nanaya <me@nanaya.pro>
parents:
49
diff
changeset
|
83 // initial run on existing document |
| 66 | 84 run() |
| 85 }).call() |
