Image from clipboard also in replies
This commit is contained in:
@@ -40,6 +40,36 @@ function linkify(s) {
|
||||
.replace(/\n/g, "<br>");
|
||||
}
|
||||
|
||||
// setupClipboardPaste erlaubt Strg+V eines Bildes aus der Zwischenablage direkt
|
||||
// im Formular: das Bild wandert in den File-Input (über DataTransfer, weil sich
|
||||
// .files nicht direkt setzen lässt). Liegt kein Bild vor (Text o. Ä.), tun wir
|
||||
// nichts und lassen den normalen Paste durchlaufen -> preventDefault nur, wenn
|
||||
// wir wirklich ein Bild gegriffen haben. msgEl (optional) zeigt den Hinweis.
|
||||
function setupClipboardPaste(form, msgEl) {
|
||||
form.addEventListener("paste", (e) => {
|
||||
const item = [...(e.clipboardData?.items ?? [])].find(
|
||||
(it) => it.kind === "file" && it.type.startsWith("image/")
|
||||
);
|
||||
if (!item) return;
|
||||
|
||||
const original = item.getAsFile();
|
||||
if (!original) return;
|
||||
e.preventDefault();
|
||||
|
||||
// Browser benennt Clipboard-Bilder uneinheitlich ("grafik.png" o. Ä.) -> neu
|
||||
// verpacken mit sprechendem Namen. Endung aus dem MIME-Typ, sonst png.
|
||||
const ext = (original.type.split("/")[1] || "png").toLowerCase();
|
||||
const file = new File([original], `zwischenablage.${ext}`, { type: original.type });
|
||||
|
||||
const input = form.querySelector("input[name='file']");
|
||||
const dt = new DataTransfer();
|
||||
dt.items.add(file);
|
||||
input.files = dt.files;
|
||||
|
||||
if (msgEl) msgEl.textContent = "Bild aus Zwischenablage übernommen.";
|
||||
});
|
||||
}
|
||||
|
||||
function renderEntry(e) {
|
||||
const el = document.createElement("article");
|
||||
el.className = "card";
|
||||
|
||||
Reference in New Issue
Block a user