Feature: Shitpost Mode -> upload multiple files at once

This commit is contained in:
2026-05-13 05:49:11 +02:00
parent d85d8276ed
commit f613ae309e
21 changed files with 1463 additions and 539 deletions

View File

@@ -79,7 +79,7 @@
const files = e.dataTransfer.files;
if (files && files.length > 0) {
if (uploader && uploader.handleFile) {
const ok = uploader.handleFile(files[0]);
const ok = uploader.handleFile(files);
if (ok !== false) {
showModal();
}
@@ -151,12 +151,12 @@
if (targetUploader && targetUploader.handleFile) {
if (isUploadPage || isModalOpen) {
targetUploader.handleFile(file);
targetUploader.handleFile([file]);
e.preventDefault();
} else if (!isTyping) {
e.preventDefault();
showModal();
targetUploader.handleFile(file);
targetUploader.handleFile([file]);
}
}
return;

View File

@@ -123,7 +123,7 @@ window.TagAutocomplete = (() => {
const name = document.createElement('span');
name.className = 'tag-suggestion-name';
name.textContent = entry.tag;
const meta = document.createElement('span');
meta.className = 'tag-suggestion-meta';
const scoreStr = typeof entry.score === 'number' ? entry.score.toFixed(2) : '0.00';
@@ -132,13 +132,36 @@ window.TagAutocomplete = (() => {
row.appendChild(name);
row.appendChild(meta);
// Desktop: mousedown fires before focusout, preventing premature close
row.addEventListener('mousedown', (e) => {
e.preventDefault();
// Partial Selection Support
row.addEventListener('mouseup', (ev) => {
const sel = window.getSelection?.()?.toString().trim();
if (!sel || sel === entry.tag) return;
row.addEventListener('click', (e) => e.stopImmediatePropagation(), { once: true, capture: true });
ev.stopPropagation();
window._showSelTagPopover?.(sel, row, (confirmed) => {
window.getSelection?.()?.removeAllRanges();
input.value = confirmed;
dropdown.style.display = 'none';
if (form.requestSubmit) form.requestSubmit();
else form.submit();
});
});
// Desktop: click listener handles the actual selection
row.addEventListener('click', (e) => {
const sel = window.getSelection?.()?.toString().trim();
if (sel && sel !== entry.tag) {
e.preventDefault();
e.stopPropagation();
return;
}
e.stopPropagation();
input.value = entry.tag;
dropdown.style.display = 'none';
form.requestSubmit();
if (form.requestSubmit) form.requestSubmit();
else form.submit();
});
// Mobile: distinguish tap from scroll using touch distance

View File

@@ -28,7 +28,7 @@ window.F0ckUpload = class {
const tagInput = this.form.querySelector('.tag-input');
if (tagInput) {
tagInput.addEventListener('keydown', (e) => {
if (e.key === 'Enter') {
if (e.key === 'Enter' && !e.ctrlKey && !e.metaKey) {
e.preventDefault();
this.addTag(tagInput.value);
tagInput.value = '';

File diff suppressed because it is too large Load Diff