Octech2722 9bdb6edf15 feat: Convert web clipper to Manifest V3 with UX enhancements
- Complete Manifest V3 conversion for Chrome extension future compatibility
- Add progressive status notifications with real-time feedback
- Optimize performance with non-blocking async operations
- Convert to ES module architecture with service worker
- Replace browser.* APIs with chrome.* throughout
- Add smart content script injection (dynamic, only when needed)
- Enhance error handling with graceful degradation
- Preserve all existing functionality while improving UX
- Faster save operations with clean error-free console logs

Breaking Changes: None - fully backward compatible
Performance: Significantly improved save operation speed
UX: Added real-time status updates during save operations
2025-09-29 19:03:05 -05:00

29 lines
874 B
JavaScript

export function randomString(len) {
let text = "";
const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (let i = 0; i < len; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
}
export function getBaseUrl() {
let output = getPageLocationOrigin() + location.pathname;
if (output[output.length - 1] !== '/') {
output = output.split('/');
output.pop();
output = output.join('/');
}
return output;
}
export function getPageLocationOrigin() {
// location.origin normally returns the protocol + domain + port (eg. https://example.com:8080)
// but for file:// protocol this is browser dependant and in particular Firefox returns "null" in this case.
return location.protocol === 'file:' ? 'file://' : location.origin;
}