notsmug/content.js
2025-04-26 02:37:06 -04:00

48 lines
1.5 KiB
JavaScript

console.log("NotSmug loaded...");
/*********************************************
* Description - Get highest quality version of an image
* Author - Vilyaem
* *******************************************/
function Upgrade(url) {
return url.replace(/(-[A-Z]\d+)?\.jpg/, '-X5.jpg');
}
/*********************************************
* Description - Get all image URLs possible
* Author - Vilyaem
* *******************************************/
function ExtractImages() {
const allUrls = new Set();
/*extract image urls everywhere, they start with photos.smugmug.com*/
document.querySelectorAll('*').forEach(el => {
/*attributes*/
['src', 'href', 'data-src'].forEach(attr => {
const val = el.getAttribute?.(attr);
if (val && val.includes('photos.smugmug.com') && val.endsWith('.jpg')) {
allUrls.add(Upgrade(val));
}
});
const style = el.getAttribute?.('style') || '';
const matches = [...style.matchAll(/url\(["']?(https:\/\/photos\.smugmug\.com\/.*?\.jpg)["']?\)/g)];
matches.forEach(match => allUrls.add(Upgrade(match[1])));
});
/*scripts and styles*/
document.querySelectorAll('script, style').forEach(node => {
const text = node.textContent;
const matches = [...text.matchAll(/https:\/\/photos\.smugmug\.com\/.*?\.jpg/g)];
matches.forEach(match => allUrls.add(Upgrade(match[0])));
});
return Array.from(allUrls);
}
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.action === "GetImageURLs") {
sendResponse({ urls: ExtractImages() });
}
});