109 lines
2.8 KiB
JavaScript
109 lines
2.8 KiB
JavaScript
(function () {
|
|
"use strict";
|
|
|
|
var UPLOAD_URL = "/api/upload";
|
|
|
|
function $(id) {
|
|
return document.getElementById(id);
|
|
}
|
|
|
|
function setStatus(message) {
|
|
var status = $("status");
|
|
status.textContent = message || "";
|
|
}
|
|
|
|
function setError(message) {
|
|
var error = $("error");
|
|
error.textContent = message || "";
|
|
}
|
|
|
|
function clearResult() {
|
|
var result = $("result");
|
|
var rowsInfo = $("rows-info");
|
|
var tableOutput = $("table-output");
|
|
rowsInfo.textContent = "";
|
|
tableOutput.textContent = "";
|
|
result.hidden = true;
|
|
}
|
|
|
|
function showResult(rows, table) {
|
|
var result = $("result");
|
|
var rowsInfo = $("rows-info");
|
|
var tableOutput = $("table-output");
|
|
rowsInfo.textContent = "Rows: " + rows;
|
|
tableOutput.textContent = table || "";
|
|
result.hidden = false;
|
|
}
|
|
|
|
function uploadFile(file) {
|
|
var formData = new FormData();
|
|
formData.append("csv", file);
|
|
|
|
return fetch(UPLOAD_URL, {
|
|
method: "POST",
|
|
body: formData
|
|
}).then(function (response) {
|
|
return response.json().then(function (data) {
|
|
return { ok: response.ok, status: response.status, data: data };
|
|
});
|
|
});
|
|
}
|
|
|
|
function handleSubmit(event) {
|
|
event.preventDefault();
|
|
|
|
setError("");
|
|
clearResult();
|
|
|
|
var fileInput = $("csv");
|
|
if (!fileInput.files || fileInput.files.length === 0) {
|
|
setError("Please choose a CSV file before uploading.");
|
|
return;
|
|
}
|
|
|
|
var file = fileInput.files[0];
|
|
var button = $("upload-button");
|
|
button.disabled = true;
|
|
setStatus("Uploading " + file.name + "...");
|
|
|
|
uploadFile(file).then(function (result) {
|
|
button.disabled = false;
|
|
|
|
if (!result.ok) {
|
|
setStatus("");
|
|
var serverMsg = result.data && result.data.error ? result.data.error : "";
|
|
var msg = "Upload failed (HTTP " + result.status + ").";
|
|
if (serverMsg) {
|
|
msg += " " + serverMsg;
|
|
}
|
|
setError(msg);
|
|
return;
|
|
}
|
|
|
|
if (result.data && typeof result.data.error === "string" && result.data.error.length > 0) {
|
|
setStatus("");
|
|
setError(result.data.error);
|
|
return;
|
|
}
|
|
|
|
var table = result.data && typeof result.data.table === "string" ? result.data.table : "";
|
|
var rows = result.data && typeof result.data.rows === "number" ? result.data.rows : 0;
|
|
|
|
setStatus("Upload complete.");
|
|
showResult(rows, table);
|
|
}).catch(function (err) {
|
|
button.disabled = false;
|
|
setStatus("");
|
|
var msg = err && err.message ? err.message : String(err);
|
|
setError("Network error while uploading: " + msg);
|
|
});
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
var form = $("upload-form");
|
|
if (form) {
|
|
form.addEventListener("submit", handleSubmit);
|
|
}
|
|
});
|
|
})();
|