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