1 parent
5dc9db0b1c
commit
83440f20e2
28 files changed
+1925
-213
No files matched your search
@@ -132,11 +132,49 @@ function bindEvents() {
|
||||
$("#logout-btn").addEventListener("click", logout);
|
||||
$("#compose-btn").addEventListener("click", () => openCompose("new"));
|
||||
$("#compose-fullscreen").addEventListener("click", toggleComposeFullscreen);
|
||||
$("#compose-fields-toggle").addEventListener("click", toggleComposeFields);
|
||||
$("#compose-to").addEventListener("invalid", () => setComposeFieldsCollapsed(false));
|
||||
$("#compose-form").addEventListener("submit", sendMessage);
|
||||
$("#compose-attach").addEventListener("click", () => $("#compose-files").click());
|
||||
$("#compose-files").addEventListener("change", async (event) => { await uploadComposeFiles(event.target.files); event.target.value = ""; });
|
||||
$("#compose-delete-draft").addEventListener("click", deleteComposeDraft);
|
||||
$("#compose-save-draft").addEventListener("click", saveComposeDraftToImap);
|
||||
$("#compose-attach").addEventListener("click", () => { state.composeInsertRange = captureEditorRange(); $("#compose-files").click(); });
|
||||
$("#compose-files").addEventListener("change", async (event) => {
|
||||
const files = [...event.target.files];
|
||||
const htmlMode = $("#compose-mode").value === "html";
|
||||
const images = htmlMode ? files.filter((file) => /^image\/(png|jpeg|gif|webp)$/i.test(file.type)) : [];
|
||||
const attachments = htmlMode ? files.filter((file) => !/^image\/(png|jpeg|gif|webp)$/i.test(file.type)) : files;
|
||||
if (images.length) await uploadInlineImage(images, state.composeInsertRange);
|
||||
if (attachments.length) await uploadComposeFiles(attachments);
|
||||
state.composeInsertRange = null;
|
||||
event.target.value = "";
|
||||
});
|
||||
$("#editor-image").addEventListener("click", () => { state.composeInsertRange = captureEditorRange(); $("#compose-images").click(); });
|
||||
$("#editor-image-edit").addEventListener("click", () => openInlineImageEditor());
|
||||
$("#compose-image-actions").addEventListener("click", (event) => {
|
||||
const image = state.composeSelectedImage;
|
||||
if (!image) return;
|
||||
const widthButton = event.target.closest("[data-image-width]");
|
||||
const alignButton = event.target.closest("[data-image-align]");
|
||||
if (widthButton) {
|
||||
applyInlineImageDisplay(image, Number(widthButton.dataset.imageWidth), inlineImageAlignment(image));
|
||||
scheduleDraftSave();
|
||||
return;
|
||||
}
|
||||
if (alignButton) {
|
||||
const currentWidth = /^\d+(?:\.\d+)?%$/.test(image.style.width || "") ? Number.parseFloat(image.style.width) : 100;
|
||||
applyInlineImageDisplay(image, currentWidth, alignButton.dataset.imageAlign);
|
||||
scheduleDraftSave();
|
||||
}
|
||||
});
|
||||
$("#compose-image-more").addEventListener("click", () => openInlineImageEditor());
|
||||
$("#compose-image-detach").addEventListener("click", () => {
|
||||
const image = state.composeSelectedImage;
|
||||
if (!image) return;
|
||||
image.remove();
|
||||
setSelectedInlineImage(null);
|
||||
syncComposeInlineAttachments();
|
||||
scheduleDraftSave();
|
||||
});
|
||||
$("#compose-images").addEventListener("change", async (event) => { await uploadInlineImage(event.target.files, state.composeInsertRange); state.composeInsertRange = null; event.target.value = ""; });
|
||||
$("#image-edit-form").addEventListener("submit", applyInlineImageEditor);
|
||||
$("#image-edit-reset").addEventListener("click", resetImageCropControls);
|
||||
@@ -173,6 +211,9 @@ function bindEvents() {
|
||||
updateComposeMessageSize();
|
||||
}));
|
||||
$("#compose-editor").addEventListener("input", () => { if (state.composeSelectedImage && !state.composeSelectedImage.isConnected) setSelectedInlineImage(null); scheduleDraftSave(); scheduleUnusedInlineAttachmentCleanup(); updateComposeMessageSize(); });
|
||||
$("#compose-editor").addEventListener("scroll", positionInlineImageUi, { passive: true });
|
||||
window.addEventListener("resize", positionInlineImageUi, { passive: true });
|
||||
$("#compose-image-resize").addEventListener("pointerdown", beginInlineImageResize);
|
||||
$("#compose-editor").addEventListener("click", (event) => {
|
||||
const image = event.target.closest?.("img[data-rustbox-cid]");
|
||||
setSelectedInlineImage(image || null);
|
||||
@@ -192,14 +233,38 @@ function bindEvents() {
|
||||
const range = captureEditorRange();
|
||||
await uploadInlineImage(images, range);
|
||||
});
|
||||
$("#compose-editor").addEventListener("dragover", (event) => { if ([...event.dataTransfer.types].includes("Files")) event.preventDefault(); });
|
||||
$("#compose-editor").addEventListener("dragstart", (event) => {
|
||||
const image = event.target.closest?.("img[data-rustbox-cid]");
|
||||
if (!image || !event.dataTransfer) return;
|
||||
setSelectedInlineImage(image);
|
||||
event.dataTransfer.effectAllowed = "move";
|
||||
event.dataTransfer.setData("application/x-rustbox-inline-image", image.dataset.rustboxCid || "");
|
||||
});
|
||||
$("#compose-editor").addEventListener("dragover", (event) => {
|
||||
const types = [...(event.dataTransfer?.types || [])];
|
||||
if (types.includes("Files") || types.includes("application/x-rustbox-inline-image")) {
|
||||
event.preventDefault();
|
||||
if (event.dataTransfer) event.dataTransfer.dropEffect = types.includes("Files") ? "copy" : "move";
|
||||
}
|
||||
});
|
||||
$("#compose-editor").addEventListener("drop", async (event) => {
|
||||
const files = [...event.dataTransfer.files];
|
||||
const inlineCid = event.dataTransfer?.getData("application/x-rustbox-inline-image") || "";
|
||||
const range = editorRangeFromPoint(event.clientX, event.clientY);
|
||||
if (inlineCid) {
|
||||
event.preventDefault();
|
||||
const image = [...$("#compose-editor").querySelectorAll("img[data-rustbox-cid]")]
|
||||
.find((candidate) => String(candidate.dataset.rustboxCid || "") === inlineCid);
|
||||
if (image && range) moveInlineImageToRange(image, range);
|
||||
return;
|
||||
}
|
||||
const files = [...(event.dataTransfer?.files || [])];
|
||||
if (!files.length) return;
|
||||
event.preventDefault();
|
||||
const allImages = files.every((file) => /^image\/(png|jpeg|gif|webp)$/i.test(file.type));
|
||||
if ($("#compose-mode").value === "html" && allImages) await uploadInlineImage(files, editorRangeFromPoint(event.clientX, event.clientY));
|
||||
else await uploadComposeFiles(files);
|
||||
const htmlMode = $("#compose-mode").value === "html";
|
||||
const images = htmlMode ? files.filter((file) => /^image\/(png|jpeg|gif|webp)$/i.test(file.type)) : [];
|
||||
const attachments = htmlMode ? files.filter((file) => !/^image\/(png|jpeg|gif|webp)$/i.test(file.type)) : files;
|
||||
if (images.length) await uploadInlineImage(images, range);
|
||||
if (attachments.length) await uploadComposeFiles(attachments);
|
||||
});
|
||||
$("#reply-btn").addEventListener("click", () => openCompose("reply"));
|
||||
$("#reply-all-btn").addEventListener("click", () => openCompose("reply-all"));
|
||||
@@ -259,6 +324,7 @@ function bindEvents() {
|
||||
} catch (error) { toast(error.message, "error"); }
|
||||
});
|
||||
$("#load-more").addEventListener("click", async () => { state.page += 1; await loadMessages(false); });
|
||||
$("#load-all").addEventListener("click", loadAllMessages);
|
||||
$("#message-list").addEventListener("scroll", scheduleMessageListStateSave, { passive: true });
|
||||
window.addEventListener("offline", () => setConnectivityState(false));
|
||||
window.addEventListener("online", async () => {
|
||||
|
||||
Reference in new issue
Block a user