Support clipboard paste image uploads with UI cleanup (closes #40)
This commit is contained in:
@@ -1,12 +1,17 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## Changes 5/27/2025
|
## Changes 5/27/2025 v1.3.9
|
||||||
|
|
||||||
- Support for mounting CIFS (SMB) network shares via Docker volumes
|
- Support for mounting CIFS (SMB) network shares via Docker volumes
|
||||||
- New `scripts/scan_uploads.php` script to generate metadata for imported files and folders
|
- New `scripts/scan_uploads.php` script to generate metadata for imported files and folders
|
||||||
- `SCAN_ON_START` environment variable to trigger automatic scanning on container startup
|
- `SCAN_ON_START` environment variable to trigger automatic scanning on container startup
|
||||||
- Documentation for configuring CIFS share mounting and scanning
|
- Documentation for configuring CIFS share mounting and scanning
|
||||||
|
|
||||||
|
- Clipboard Paste Upload Support (single image):
|
||||||
|
- Users can now paste images directly into the FileRise web interface.
|
||||||
|
- Pasted images are renamed to `image<TIMESTAMP>.png` and added to the upload queue using the existing drag-and-drop logic.
|
||||||
|
- Implemented using a `.isClipboard` flag and a delayed UI cleanup inside `xhr.addEventListener("load", ...)`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Changes 5/26/2025
|
## Changes 5/26/2025
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { loadAdminConfigFunc } from './auth.js';
|
|||||||
import { showToast, toggleVisibility, attachEnterKeyListener } from './domUtils.js';
|
import { showToast, toggleVisibility, attachEnterKeyListener } from './domUtils.js';
|
||||||
import { sendRequest } from './networkUtils.js';
|
import { sendRequest } from './networkUtils.js';
|
||||||
|
|
||||||
const version = "v1.3.8";
|
const version = "v1.3.9";
|
||||||
const adminTitle = `${t("admin_panel")} <small style="font-size:12px;color:gray;">${version}</small>`;
|
const adminTitle = `${t("admin_panel")} <small style="font-size:12px;color:gray;">${version}</small>`;
|
||||||
|
|
||||||
// ————— Inject updated styles —————
|
// ————— Inject updated styles —————
|
||||||
|
|||||||
@@ -669,6 +669,18 @@ function submitFiles(allFiles) {
|
|||||||
}
|
}
|
||||||
allSucceeded = false;
|
allSucceeded = false;
|
||||||
}
|
}
|
||||||
|
if (file.isClipboard) {
|
||||||
|
setTimeout(() => {
|
||||||
|
window.selectedFiles = [];
|
||||||
|
updateFileInfoCount();
|
||||||
|
const progressContainer = document.getElementById("uploadProgressContainer");
|
||||||
|
if (progressContainer) progressContainer.innerHTML = "";
|
||||||
|
const fileInfoContainer = document.getElementById("fileInfoContainer");
|
||||||
|
if (fileInfoContainer) {
|
||||||
|
fileInfoContainer.innerHTML = `<span id="fileInfoDefault">No files selected</span>`;
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
// ─── Only now count this chunk as finished ───────────────────
|
// ─── Only now count this chunk as finished ───────────────────
|
||||||
finishedCount++;
|
finishedCount++;
|
||||||
@@ -847,4 +859,39 @@ function initUpload() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { initUpload };
|
export { initUpload };
|
||||||
|
|
||||||
|
// -------------------------
|
||||||
|
// Clipboard Paste Handler (Mimics Drag-and-Drop)
|
||||||
|
// -------------------------
|
||||||
|
document.addEventListener('paste', function handlePasteUpload(e) {
|
||||||
|
const items = e.clipboardData?.items;
|
||||||
|
if (!items) return;
|
||||||
|
|
||||||
|
const files = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < items.length; i++) {
|
||||||
|
const item = items[i];
|
||||||
|
if (item.kind === 'file') {
|
||||||
|
const file = item.getAsFile();
|
||||||
|
if (file) {
|
||||||
|
const ext = file.name.split('.').pop() || 'png';
|
||||||
|
const renamedFile = new File([file], `image${Date.now()}.${ext}`, { type: file.type });
|
||||||
|
renamedFile.isClipboard = true;
|
||||||
|
|
||||||
|
Object.defineProperty(renamedFile, 'customRelativePath', {
|
||||||
|
value: renamedFile.name,
|
||||||
|
writable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
files.push(renamedFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (files.length > 0) {
|
||||||
|
processFiles(files);
|
||||||
|
showToast('Pasted file added to upload list.', 'success');
|
||||||
|
}
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user