Initial commit

This commit is contained in:
2025-08-25 15:18:35 -04:00
commit 4d385d0d8b
8 changed files with 90 additions and 0 deletions

18
flake.nix Normal file
View File

@@ -0,0 +1,18 @@
{
description = "yt-share-cleaner - remove tracking from YouTube share URLs";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
};
outputs = { self, nixpkgs }: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
devShells.${system}.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [
web-ext
];
};
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

28
manifest.json Normal file
View File

@@ -0,0 +1,28 @@
{
"manifest_version": 3,
"name": "yt-share-cleaner",
"version": "0.0.1",
"description": "Cleans tracking from share URLs on YouTube",
"icons": {
"16": "icons/yt-share-cleaner-16.png",
"32": "icons/yt-share-cleaner-32.png",
"64": "icons/yt-share-cleaner-64.png",
"128": "icons/yt-share-cleaner-128.png",
"256": "icons/yt-share-cleaner-256.png"
},
"permissions": [
"activeTab",
"clipboardRead",
"clipboardWrite"
],
"content_scripts": [
{
"js": ["yt-share-cleaner.js"],
"matches": ["*://*.youtube.com/*"]
}
]
}

44
yt-share-cleaner.js Normal file
View File

@@ -0,0 +1,44 @@
(function() {
// 'use strict';
function isShareLink(url) {
// test if input is a share link, return True or False
const regex = /https:\/\/youtu\.be\/[A-Za-z0-9\_-]+\?si=.+/i;
const isShareLink = regex.test(url);
return(isShareLink)
}
function cleanUrl(url){
// clean tracker from URL if it is a share link
if (isShareLink(url)) {
// replace tracker portion with empty string
const cleanedUrl = url.replace(/\?si=[^&]+&?/, "");
return(cleanedUrl)
}
// return original url if it is not a share link
console.log("Not a share link, clipboard contents unmodified.")
return(url)
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function onMouseUp() {
// wait half a second after clicking before reading clipboard
await sleep(500);
let clipText = await navigator.clipboard.readText();
let newText = cleanUrl(clipText);
if (clipText !== newText) {
const newClip = await navigator.clipboard.writeText(newText);
console.log("Modified clipboard with cleaned share link: %o", newText);
clipText = undefined;
newText = undefined;
}
clipText = undefined;
newText = undefined;
}
document.addEventListener('mouseup', onMouseUp, false);
})();