diff options
Diffstat (limited to 'themes/alps/assets/attachments.js')
-rw-r--r-- | themes/alps/assets/attachments.js | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/themes/alps/assets/attachments.js b/themes/alps/assets/attachments.js index a57b4c5..612808a 100644 --- a/themes/alps/assets/attachments.js +++ b/themes/alps/assets/attachments.js @@ -85,17 +85,40 @@ function attachFile(file) { let formData = new FormData(); formData.append("attachments", file); + const handleError = msg => { + attachments = attachments.filter(a => a !== attachment); + node.classList.add("error"); + node.querySelector(".progress").remove(); + node.querySelector(".size").remove(); + node.querySelector("button").remove(); + node.querySelector(".error").innerText = "Error: " + msg; + updateState(); + }; + xhr.open("POST", "/compose/attachment"); xhr.upload.addEventListener("progress", ev => { attachment.progress = ev.loaded / ev.total; updateState(); }); xhr.addEventListener("load", () => { - // TODO: Handle errors - const resp = JSON.parse(xhr.responseText); + let resp; + try { + resp = JSON.parse(xhr.responseText); + } catch { + resp = { "error": "Error: invalid response" }; + } + + if (xhr.status !== 200) { + handleError(resp["error"]); + return; + } + attachment.uuid = resp[0]; updateState(); }); + xhr.addEventListener("error", () => { + handleError("an unexpected problem occured"); + }); xhr.send(formData); updateState(); @@ -105,6 +128,7 @@ function attachmentNodeFor(file) { const node = document.createElement("div"), progress = document.createElement("span"), filename = document.createElement("span"), + error = document.createElement("span"), size = document.createElement("span"), button = document.createElement("button"); node.classList.add("upload"); @@ -116,6 +140,9 @@ function attachmentNodeFor(file) { filename.innerText = file.name; node.appendChild(filename); + error.classList.add("error"); + node.appendChild(error); + size.classList.add("size"); size.innerText = formatSI(file.size) + "B"; node.appendChild(size); |