3518555d1e
R2 S3 Signature V4 client in [src/R2/R2Client.php](/Users/tyemeclifford/Documents/GH/CloudflareR2-Manager/src/R2/R2Client.php) SQLite mirror, usage ledger, settings, local tags, permission labels, and signed URL history under [src/Repository](/Users/tyemeclifford/Documents/GH/CloudflareR2-Manager/src/Repository) Simple password auth and CSRF protection Uploads, folders, sync, copy/move/delete, downloads, presigned URLs, CORS JSON management, and usage/billing-style summaries Setup docs in [README.md](/Users/tyemeclifford/Documents/GH/CloudflareR2-Manager/README.md) and config template in [.env.example](/Users/tyemeclifford/Documents/GH/CloudflareR2-Manager/.env.example) Important R2 caveat: Cloudflare’s current R2 S3 compatibility docs say ACLs and object-tagging APIs are not implemented, so the app stores tags and permission labels locally in SQLite while keeping file bytes on R2. I used Cloudflare’s official docs for S3 compatibility, presigned URLs, and CORS.
15 lines
356 B
JavaScript
15 lines
356 B
JavaScript
document.addEventListener('click', (event) => {
|
|
const button = event.target.closest('[data-confirm]');
|
|
if (button && !window.confirm(button.dataset.confirm)) {
|
|
event.preventDefault();
|
|
}
|
|
});
|
|
|
|
document.addEventListener('focus', (event) => {
|
|
const input = event.target.closest('[data-copyable]');
|
|
if (input) {
|
|
input.select();
|
|
}
|
|
}, true);
|
|
|