From b657b1ae2ba818432fa001b07ed40e04348bb011 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Mon, 18 Apr 2022 10:25:50 +0300 Subject: [PATCH] Adding Raw Link Copy feature #165 --- pug/widgets/instances.pug | 4 +- src/assets/javascripts/helpers/imgur.js | 41 +++++++--- src/assets/javascripts/helpers/instagram.js | 19 +++++ src/assets/javascripts/helpers/reddit.js | 12 +++ src/assets/javascripts/helpers/tiktok.js | 22 ++++- src/assets/javascripts/helpers/twitter.js | 14 ++++ .../javascripts/helpers/youtube/youtube.js | 19 +++++ src/pages/options/imgur/imgur.html | 27 ++++--- src/pages/options/instagram/instagram.html | 18 +++-- src/pages/options/lbry/lbry.html | 18 +++-- src/pages/options/maps/maps.html | 9 ++- src/pages/options/medium/medium.html | 18 +++-- src/pages/options/peertube/peertube.html | 18 +++-- src/pages/options/pixiv/pixiv.html | 18 +++-- src/pages/options/reddit/reddit.html | 36 +++++---- src/pages/options/search/search.html | 81 ++++++++++--------- .../options/sendTargets/sendTargets.html | 18 +++-- src/pages/options/speedtest/speedtest.html | 18 +++-- src/pages/options/spotify/spotify.html | 18 +++-- src/pages/options/tiktok/tiktok.html | 18 +++-- src/pages/options/translate/translate.html | 36 +++++---- src/pages/options/twitter/twitter.html | 27 ++++--- src/pages/options/wikipedia/wikipedia.html | 27 ++++--- src/pages/options/youtube/youtube.html | 54 +++++++------ .../options/youtubeMusic/youtubeMusic.html | 9 ++- src/pages/popup/popup.html | 16 ++-- src/pages/popup/popup.js | 31 ++++++- src/pages/popup/style.css | 4 + src/pages/stylesheets/styles.css | 19 ++--- 29 files changed, 428 insertions(+), 241 deletions(-) diff --git a/pug/widgets/instances.pug b/pug/widgets/instances.pug index 4f20d466..950bd46b 100644 --- a/pug/widgets/instances.pug +++ b/pug/widgets/instances.pug @@ -10,6 +10,6 @@ mixin instances(myPlaceholder) .some-block.option-block input.custom-instance(placeholder=myPlaceholder type="url") button.add.add-instance(type="submit") - svg(xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor") - path(d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z") + svg(xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor") + path(d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z") .checklist.custom-checklist \ No newline at end of file diff --git a/src/assets/javascripts/helpers/imgur.js b/src/assets/javascripts/helpers/imgur.js index 20d7c5b3..a376e404 100644 --- a/src/assets/javascripts/helpers/imgur.js +++ b/src/assets/javascripts/helpers/imgur.js @@ -8,7 +8,7 @@ let redirects = { "rimgo": { "normal": [], "tor": [], - "i2p": [] + "i2p": [] } } const getRedirects = () => redirects; @@ -17,7 +17,7 @@ const getCustomRedirects = function () { "rimgo": { "normal": [...rimgoNormalRedirectsChecks, ...rimgoNormalCustomRedirects], "tor": [...rimgoTorRedirectsChecks, ...rimgoTorCustomRedirects], - "i2p": [...rimgoI2pRedirectsChecks, ...rimgoI2pCustomRedirects] + "i2p": [...rimgoI2pRedirectsChecks, ...rimgoI2pCustomRedirects] }, }; }; @@ -41,10 +41,10 @@ function setRedirects(val) { setRimgoTorRedirectsChecks(rimgoTorRedirectsChecks); for (const item of rimgoI2pRedirectsChecks) - if (!redirects.rimgo.i2p.includes(item)) { - var index = rimgoI2pRedirectsChecks.indexOf(item); - if (index !== -1) rimgoI2pRedirectsChecks.splice(index, 1); - } + if (!redirects.rimgo.i2p.includes(item)) { + var index = rimgoI2pRedirectsChecks.indexOf(item); + if (index !== -1) rimgoI2pRedirectsChecks.splice(index, 1); + } setRimgoI2pRedirectsChecks(rimgoI2pRedirectsChecks); } @@ -149,17 +149,30 @@ function redirect(url, type) { return `${randomInstance}${url.pathname}${url.search}`; } +function reverse(url) { + let protocolHost = commonHelper.protocolHost(url); + if ( + ![...redirects.rimgo.normal, + ...redirects.rimgo.tor, + ...redirects.rimgo.i2p, + ...rimgoNormalCustomRedirects, + ...rimgoTorCustomRedirects, + ...rimgoI2pCustomRedirects].includes(protocolHost) + ) return; + return `https://imgur.com${url.pathname}${url.search}`; +} + function switchInstance(url) { let protocolHost = commonHelper.protocolHost(url); let imgurList = [ ...redirects.rimgo.normal, ...redirects.rimgo.tor, - ...redirects.rimgo.i2p, + ...redirects.rimgo.i2p, ...rimgoNormalCustomRedirects, ...rimgoTorCustomRedirects, - ...rimgoI2pCustomRedirects, + ...rimgoI2pCustomRedirects, ]; if (!imgurList.includes(protocolHost)) return null; @@ -193,12 +206,12 @@ async function init() { "rimgoNormalCustomRedirects", "rimgoTorRedirectsChecks", "rimgoTorCustomRedirects", - "rimgoI2pRedirectsChecks", - "rimgoI2pCustomRedirects", + "rimgoI2pRedirectsChecks", + "rimgoI2pCustomRedirects", "imgurProtocol", ], - r => { + r => { disable = r.disableImgur ?? false; protocol = r.imgurProtocol ?? "normal"; @@ -212,8 +225,8 @@ async function init() { rimgoTorRedirectsChecks = r.rimgoTorRedirectsChecks ?? [...redirects.rimgo.tor]; rimgoTorCustomRedirects = r.rimgoTorCustomRedirects ?? []; - rimgoI2pRedirectsChecks = r.rimgoI2pRedirectsChecks ?? [...redirects.rimgo.i2p]; - rimgoI2pCustomRedirects = r.rimgoI2pCustomRedirects ?? []; + rimgoI2pRedirectsChecks = r.rimgoI2pRedirectsChecks ?? [...redirects.rimgo.i2p]; + rimgoI2pCustomRedirects = r.rimgoI2pCustomRedirects ?? []; resolve(); } @@ -230,6 +243,7 @@ export default { getDisable, setDisable, + getProtocol, setProtocol, @@ -248,6 +262,7 @@ export default { setRimgoI2pCustomRedirects, redirect, + reverse, isImgur, init, switchInstance, diff --git a/src/assets/javascripts/helpers/instagram.js b/src/assets/javascripts/helpers/instagram.js index d151dc6b..3528575d 100644 --- a/src/assets/javascripts/helpers/instagram.js +++ b/src/assets/javascripts/helpers/instagram.js @@ -121,6 +121,23 @@ function redirect(url, type, initiator) { return `${randomInstance}/u${url.pathname}${url.search}`; // Likely a user profile, redirect to '/u/...' } +function reverse(url) { + let protocolHost = commonHelper.protocolHost(url); + if ( + ![...redirects.bibliogram.normal, + ...redirects.bibliogram.tor, + ...bibliogramNormalCustomRedirects, + ...bibliogramTorCustomRedirects].includes(protocolHost) + ) return; + if (url.pathname.startsWith('/p')) + return `https://instagram.com${url.pathname.replace('/p', '')}${url.search}`; + + if (url.pathname.startsWith('/u')) + return `https://instagram.com${url.pathname.replace('/u', '')}${url.search}`; + + return `https://instagram.com${url.pathname}${url.search}`; +} + function switchInstance(url) { let protocolHost = commonHelper.protocolHost(url); @@ -249,6 +266,8 @@ export default { getDisable, setDisable, + reverse, + getProtocol, setProtocol, diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js index 77a77d43..9d427c2e 100644 --- a/src/assets/javascripts/helpers/reddit.js +++ b/src/assets/javascripts/helpers/reddit.js @@ -366,6 +366,18 @@ function redirect(url, type, initiator) { } } +function reverse(url) { + let protocolHost = commonHelper.protocolHost(url); + if ( + ![...redirects.nitter.normal, + ...redirects.nitter.tor, + ...nitterNormalCustomRedirects, + ...nitterTorCustomRedirects].includes(protocolHost) + ) return; + if(url.pathname.includes('/pics/w:null_')) + return `https://reddit.com${url.pathname}${url.search}`; +} + function switchInstance(url) { let protocolHost = commonHelper.protocolHost(url); diff --git a/src/assets/javascripts/helpers/tiktok.js b/src/assets/javascripts/helpers/tiktok.js index 905cf3ec..44f46ba8 100644 --- a/src/assets/javascripts/helpers/tiktok.js +++ b/src/assets/javascripts/helpers/tiktok.js @@ -95,8 +95,10 @@ function isTiktok(url, initiator) { } function redirect(url, type) { - // https://www.tiktok.com/@keysikaspol/video/7061265241887345946 + // https://www.tiktok.com/@keysikaspol/video/7061265241887345946?for_redirection=@keysikaspol + // https://proxitok.pussthecat.org/video/7061265241887345946 // https://www.tiktok.com/@keysikaspol + // https://proxitok.herokuapp.com/video/7061265241887345946 if (type != "main_frame") return null; @@ -106,11 +108,23 @@ function redirect(url, type) { if (instancesList.length === 0) return null; let randomInstance = commonHelper.getRandomInstance(instancesList); - let pathName = url.pathname.replace(new RegExp(/@.*\/(?=video)/), ""); + let pathName = url.pathname.replace(/@.*\/(?=video)/, ""); return `${randomInstance}${pathName}`; } +function reverse(url) { + let protocolHost = commonHelper.protocolHost(url); + if ( + ![...redirects.proxiTok.normal, + ...redirects.proxiTok.tor, + ...proxiTokNormalCustomRedirects, + ...proxiTokTorCustomRedirects].includes(protocolHost) + ) return; + + return `https://tiktok.com${url.pathname}${url.search}`; +} + async function init() { return new Promise(resolve => { fetch('/instances/data.json').then(response => response.text()).then(data => { @@ -129,7 +143,7 @@ async function init() { "tiktokProtocol" ], r => { - redirects.proxiTok = dataJson.proxiTok; + redirects.proxiTok = dataJson.proxiTok; disable = r.disableTiktok ?? false; protocol = r.tiktokProtocol ?? "normal"; @@ -158,6 +172,8 @@ export default { getDisable, setDisable, + reverse, + getProtocol, setProtocol, diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js index e58af78b..ddcfe19a 100644 --- a/src/assets/javascripts/helpers/twitter.js +++ b/src/assets/javascripts/helpers/twitter.js @@ -208,6 +208,7 @@ function redirect(url, initiator) { if (instancesList.length === 0) return null; let randomInstance = commonHelper.getRandomInstance(instancesList) + // https://pbs.twimg.com/profile_images/648888480974508032/66_cUYfj_400x400.jpg if (url.host.split(".")[0] === "pbs" || url.host.split(".")[0] === "video") return `${randomInstance}/pic/${encodeURIComponent(url.href)}`; @@ -219,6 +220,17 @@ function redirect(url, initiator) { return `${randomInstance}${url.pathname}${url.search}`; } +function reverse(url) { + let protocolHost = commonHelper.protocolHost(url); + if ( + ![...redirects.nitter.normal, + ...redirects.nitter.tor, + ...nitterNormalCustomRedirects, + ...nitterTorCustomRedirects].includes(protocolHost) + ) return; + return `https://twitter.com${url.pathname}${url.search}`; +} + function switchInstance(url) { let protocolHost = commonHelper.protocolHost(url); @@ -451,6 +463,8 @@ export default { getDisable, setDisable, + reverse, + getEnableCustomSettings, setEnableCustomSettings, diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js index 4574d6e5..a0b0bfcb 100644 --- a/src/assets/javascripts/helpers/youtube/youtube.js +++ b/src/assets/javascripts/helpers/youtube/youtube.js @@ -371,6 +371,23 @@ function redirect(url, details, initiator) { return 'CANCEL'; } +function reverse(url) { + let protocolHost = commonHelper.protocolHost(url); + + if (![ + ...redirects.invidious.normal, + ...redirects.invidious.tor, + ...invidiousNormalCustomRedirects, + ...invidiousTorCustomRedirects, + ...redirects.piped.normal, + ...redirects.piped.tor, + ...pipedNormalCustomRedirects, + ...pipedTorCustomRedirects, + ].includes(protocolHost)) return; + + return `https://youtube.com${url.pathname}${url.search}`; +} + function switchInstance(url) { let protocolHost = commonHelper.protocolHost(url); if ( @@ -658,6 +675,8 @@ export default { getDisable, setDisable, + reverse, + getEnableCustomSettings, getProtocol, getOnlyEmbeddedVideo, diff --git a/src/pages/options/imgur/imgur.html b/src/pages/options/imgur/imgur.html index c9d48622..a97c1c28 100644 --- a/src/pages/options/imgur/imgur.html +++ b/src/pages/options/imgur/imgur.html @@ -84,10 +84,11 @@
- - - - +
@@ -111,10 +112,11 @@
- - - - +
@@ -131,10 +133,11 @@
- - - - +
diff --git a/src/pages/options/instagram/instagram.html b/src/pages/options/instagram/instagram.html index 01556fd8..bc52cd3b 100644 --- a/src/pages/options/instagram/instagram.html +++ b/src/pages/options/instagram/instagram.html @@ -83,10 +83,11 @@
- - - - +
@@ -110,10 +111,11 @@
- - - - +
diff --git a/src/pages/options/lbry/lbry.html b/src/pages/options/lbry/lbry.html index 074ae4b3..d5d459f7 100644 --- a/src/pages/options/lbry/lbry.html +++ b/src/pages/options/lbry/lbry.html @@ -83,10 +83,11 @@
- - - - +
@@ -110,10 +111,11 @@
- - - - +
diff --git a/src/pages/options/maps/maps.html b/src/pages/options/maps/maps.html index d7c551b6..d4288761 100644 --- a/src/pages/options/maps/maps.html +++ b/src/pages/options/maps/maps.html @@ -83,10 +83,11 @@
- - - - +
diff --git a/src/pages/options/medium/medium.html b/src/pages/options/medium/medium.html index 193dbbb8..303524f7 100644 --- a/src/pages/options/medium/medium.html +++ b/src/pages/options/medium/medium.html @@ -83,10 +83,11 @@
- - - - +
@@ -110,10 +111,11 @@
- - - - +
diff --git a/src/pages/options/peertube/peertube.html b/src/pages/options/peertube/peertube.html index 5ebff097..dd034bed 100644 --- a/src/pages/options/peertube/peertube.html +++ b/src/pages/options/peertube/peertube.html @@ -83,10 +83,11 @@
- - - - +
@@ -110,10 +111,11 @@
- - - - +
diff --git a/src/pages/options/pixiv/pixiv.html b/src/pages/options/pixiv/pixiv.html index 36825094..7adbcf2c 100644 --- a/src/pages/options/pixiv/pixiv.html +++ b/src/pages/options/pixiv/pixiv.html @@ -91,10 +91,11 @@
- - - - +
@@ -118,10 +119,11 @@
- - - - +
diff --git a/src/pages/options/reddit/reddit.html b/src/pages/options/reddit/reddit.html index 2ded8094..80aa77c5 100644 --- a/src/pages/options/reddit/reddit.html +++ b/src/pages/options/reddit/reddit.html @@ -96,10 +96,11 @@
- - - - +
@@ -123,10 +124,11 @@
- - - - +
@@ -146,10 +148,11 @@
- - - - +
@@ -173,10 +176,11 @@
- - - - +
diff --git a/src/pages/options/search/search.html b/src/pages/options/search/search.html index 622c0799..01e8511e 100644 --- a/src/pages/options/search/search.html +++ b/src/pages/options/search/search.html @@ -98,10 +98,11 @@
- - - - +
@@ -125,10 +126,11 @@
- - - - +
@@ -145,10 +147,11 @@
- - - - +
@@ -168,10 +171,11 @@
- - - - +
@@ -195,10 +199,11 @@
- - - - +
@@ -215,10 +220,11 @@
- - - - +
@@ -238,10 +244,11 @@
- - - - +
@@ -265,10 +272,11 @@
- - - - +
@@ -285,10 +293,11 @@
- - - - +
diff --git a/src/pages/options/sendTargets/sendTargets.html b/src/pages/options/sendTargets/sendTargets.html index d514b8f0..c54c1582 100644 --- a/src/pages/options/sendTargets/sendTargets.html +++ b/src/pages/options/sendTargets/sendTargets.html @@ -83,10 +83,11 @@
- - - - +
@@ -110,10 +111,11 @@
- - - - +
diff --git a/src/pages/options/speedtest/speedtest.html b/src/pages/options/speedtest/speedtest.html index 50a195e2..5ac5cdaa 100644 --- a/src/pages/options/speedtest/speedtest.html +++ b/src/pages/options/speedtest/speedtest.html @@ -83,10 +83,11 @@
- - - - +
@@ -110,10 +111,11 @@
- - - - +
diff --git a/src/pages/options/spotify/spotify.html b/src/pages/options/spotify/spotify.html index cfcf34b3..0496875a 100644 --- a/src/pages/options/spotify/spotify.html +++ b/src/pages/options/spotify/spotify.html @@ -83,10 +83,11 @@
- - - - +
@@ -110,10 +111,11 @@
- - - - +
diff --git a/src/pages/options/tiktok/tiktok.html b/src/pages/options/tiktok/tiktok.html index 52b09bbb..67fc2488 100644 --- a/src/pages/options/tiktok/tiktok.html +++ b/src/pages/options/tiktok/tiktok.html @@ -83,10 +83,11 @@
- - - - +
@@ -110,10 +111,11 @@
- - - - +
diff --git a/src/pages/options/translate/translate.html b/src/pages/options/translate/translate.html index 53436c91..8f63ace9 100644 --- a/src/pages/options/translate/translate.html +++ b/src/pages/options/translate/translate.html @@ -327,10 +327,11 @@
- - - - +
@@ -354,10 +355,11 @@
- - - - +
@@ -376,10 +378,11 @@
- - - - +
@@ -403,10 +406,11 @@
- - - - +
diff --git a/src/pages/options/twitter/twitter.html b/src/pages/options/twitter/twitter.html index 6d8e0e6f..d7b14abf 100644 --- a/src/pages/options/twitter/twitter.html +++ b/src/pages/options/twitter/twitter.html @@ -165,10 +165,11 @@
- - - - +
@@ -192,10 +193,11 @@
- - - - +
@@ -212,10 +214,11 @@
- - - - +
diff --git a/src/pages/options/wikipedia/wikipedia.html b/src/pages/options/wikipedia/wikipedia.html index b7fcc40a..246c269b 100644 --- a/src/pages/options/wikipedia/wikipedia.html +++ b/src/pages/options/wikipedia/wikipedia.html @@ -84,10 +84,11 @@
- - - - +
@@ -111,10 +112,11 @@
- - - - +
@@ -131,10 +133,11 @@
- - - - +
diff --git a/src/pages/options/youtube/youtube.html b/src/pages/options/youtube/youtube.html index 67c86786..569e7f12 100644 --- a/src/pages/options/youtube/youtube.html +++ b/src/pages/options/youtube/youtube.html @@ -779,10 +779,11 @@
- - - - +
@@ -806,10 +807,11 @@
- - - - +
@@ -1146,10 +1148,11 @@
- - - - +
@@ -1173,10 +1176,11 @@
- - - - +
@@ -1257,10 +1261,11 @@
- - - - +
@@ -1284,10 +1289,11 @@
- - - - +
diff --git a/src/pages/options/youtubeMusic/youtubeMusic.html b/src/pages/options/youtubeMusic/youtubeMusic.html index eae611d6..9286ed64 100644 --- a/src/pages/options/youtubeMusic/youtubeMusic.html +++ b/src/pages/options/youtubeMusic/youtubeMusic.html @@ -76,10 +76,11 @@
- - - - +
diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html index 2f83116c..2c4f76d5 100644 --- a/src/pages/popup/popup.html +++ b/src/pages/popup/popup.html @@ -169,26 +169,32 @@
- + Instance - + Settings + + + + + Copy Raw +
- - + \ No newline at end of file diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js index 14f59dfc..53e8c103 100644 --- a/src/pages/popup/popup.js +++ b/src/pages/popup/popup.js @@ -59,6 +59,7 @@ async function wholeInit() { await mediumHelper.init(); }; +let copyRawElement = document.getElementById('copy_raw'); wholeInit().then(() => { disableTwitterElement.checked = !twitterHelper.getDisable(); disableYoutubeElement.checked = !youtubeHelper.getDisable(); @@ -79,6 +80,7 @@ wholeInit().then(() => { let changeInstanceElement = document.getElementById("change-instance") changeInstanceElement.addEventListener("click", switchInstance); + copyRawElement.addEventListener("click", copyRaw); }) disableTwitterElement.addEventListener("change", @@ -153,7 +155,6 @@ document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage() ); - function switchInstance() { browser.tabs.query({ active: true, currentWindow: true }, function (tabs) { let currTab = tabs[0]; @@ -197,6 +198,34 @@ function switchInstance() { return false; } +function copyRaw() { + browser.tabs.query({ active: true, currentWindow: true }, function (tabs) { + let currTab = tabs[0]; + if (currTab) { + let url = currTab.url; + let tabUrl + try { tabUrl = new URL(url); } + catch (_) { return false; } + let newUrl; + newUrl = youtubeHelper.reverse(tabUrl); + if (!newUrl) newUrl = twitterHelper.reverse(tabUrl); + if (!newUrl) newUrl = instagramHelper.reverse(tabUrl); + if (!newUrl) newUrl = tiktokHelper.reverse(tabUrl); + if (!newUrl) newUrl = imgurHelper.reverse(tabUrl); + if (newUrl) { + navigator.clipboard.writeText(newUrl); + const oldHtml = copyRawElement.innerHTML; + copyRawElement.innerHTML = ` + + + + Copied`; + setTimeout(() => copyRawElement.innerHTML = oldHtml, 1000); + } + } + }) +} + let popupFrontends; generalHelper.init().then(() => { popupFrontends = generalHelper.getPopupFrontends(); diff --git a/src/pages/popup/style.css b/src/pages/popup/style.css index a2fc1256..4cc56145 100644 --- a/src/pages/popup/style.css +++ b/src/pages/popup/style.css @@ -3,6 +3,10 @@ body { min-height: auto; } +html, body { + margin: 0; +} + .hide { display: none !important; } \ No newline at end of file diff --git a/src/pages/stylesheets/styles.css b/src/pages/stylesheets/styles.css index 01a3d89d..5377edf3 100644 --- a/src/pages/stylesheets/styles.css +++ b/src/pages/stylesheets/styles.css @@ -193,7 +193,6 @@ hr { border: none; } - div.some-block { padding: 0 15px; justify-content: space-between; @@ -280,14 +279,11 @@ div.buttons { } div.buttons-popup { - border: 2px solid var(--bg-secondary); border-radius: 5px; display: flex; - margin: 0 15px; - margin-bottom: 15px; - margin-top: 5px; flex-wrap: wrap; - justify-content: center; + margin: 0 10px 7px 10px; + justify-content: start; align-items: center; } @@ -299,7 +295,7 @@ div.buttons-popup { color: var(--text); font-size: 16px; font-weight: bold; - margin: 5px 0px; + margin: 0; padding: 5px 5px; text-decoration: none; cursor: pointer; @@ -311,10 +307,15 @@ div.buttons-popup { } .button svg { - width: 26px; - height: 26px; + width: auto; + height: auto; padding: 0; + margin-right: 5px; +} + +body.rtl { margin-right: 0; + margin-left: 5px; } .button:hover svg {