Initial commit
This commit is contained in:
18
flake.nix
Normal file
18
flake.nix
Normal 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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
BIN
icons/yt-share-cleaner-128.png
Normal file
BIN
icons/yt-share-cleaner-128.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.6 KiB |
BIN
icons/yt-share-cleaner-16.png
Normal file
BIN
icons/yt-share-cleaner-16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
BIN
icons/yt-share-cleaner-256.png
Normal file
BIN
icons/yt-share-cleaner-256.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
BIN
icons/yt-share-cleaner-32.png
Normal file
BIN
icons/yt-share-cleaner-32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.8 KiB |
BIN
icons/yt-share-cleaner-64.png
Normal file
BIN
icons/yt-share-cleaner-64.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.6 KiB |
28
manifest.json
Normal file
28
manifest.json
Normal 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
44
yt-share-cleaner.js
Normal 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);
|
||||||
|
})();
|
Reference in New Issue
Block a user