103 lines
3.4 KiB
JavaScript
103 lines
3.4 KiB
JavaScript
/* This file is part of inventur.
|
|
* inventur is a simple web app using rocket to help maintain inventory data.
|
|
* Copyright (C) 2024 Johannes Randerath
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
let ncol = 1;
|
|
let todelete = "";
|
|
function create_table() {
|
|
let form = document.getElementById('form_create_table');
|
|
form.submit();
|
|
form.reset();
|
|
document.getElementById('dynamic_columns').innerHTML = "";
|
|
ncol = 1;
|
|
}
|
|
function set_modal_target(modal_target) {
|
|
document.getElementById('modal_caller').innerHTML = modal_target;
|
|
}
|
|
function start_ajax(path, listener) {
|
|
let req = new XMLHttpRequest();
|
|
req.open('GET', path, true);
|
|
req.send();
|
|
req.onReadyStateChange = function() {
|
|
if (req.readyState == XMLHttpRequest.DONE) {
|
|
callback();
|
|
}
|
|
};
|
|
};
|
|
function import_table() {
|
|
console.log("1");
|
|
Papa.parse(document.getElementById('import_file').files[0], {
|
|
complete: function process(result) {
|
|
console.log("2");
|
|
let csv = result.data;
|
|
let req = new XMLHttpRequest();
|
|
req.open("POST", "/table/import", true);
|
|
req.responseType = 'blob';
|
|
req.setRequestHeader('Content-Type', 'application/json');
|
|
let cols = csv[0];
|
|
let rows = csv.slice(1);
|
|
if (rows[rows.length - 1].length != cols.length) {
|
|
rows = rows.slice(0, rows.length-1);
|
|
}
|
|
req.send(JSON.stringify({
|
|
name: document.getElementById('import_name').value,
|
|
columns: cols,
|
|
rows: rows,
|
|
}));
|
|
req.onload = function(resp) {
|
|
if (this.readyState == 4) {
|
|
window.location.href = req.responseURL;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
};
|
|
function add_column() {
|
|
ncol += 1;
|
|
document.getElementById('dynamic_columns').innerHTML += `
|
|
<div class='row mt-3' id='columns'>
|
|
<div class='col-auto align-bottom'>
|
|
<div class='form-text me-1' id='field_index'>
|
|
<strong>${ncol}</strong>
|
|
</div>
|
|
</div>
|
|
<div class='col-auto'>
|
|
<input type='text' class='form-control' name='field_names' id='field_name' aria-describedby='field_name_label'>
|
|
</div>
|
|
<div class='col-auto'>
|
|
<select class='form-select' aria-label='data type' name='field_types'>
|
|
<option value='0' selected>Text</option>
|
|
<option value='1'>Number</option>
|
|
</select>
|
|
</div>
|
|
</div>`;
|
|
};
|
|
function confirm_delete(form) {
|
|
document.getElementById(`form_edit_${form}`).reset();
|
|
$('#confirm_delete_modal').modal('show');
|
|
document.getElementById('confirm_delete_modal_entity').innerHTML = form;
|
|
document.getElementById('confirm_delete_modal_button').onclick = function () {
|
|
document.getElementById(`form_delete_${form}`).submit();
|
|
}
|
|
}
|
|
|
|
function submit_and_reset(form) {
|
|
let f = document.getElementById(form);
|
|
f.submit();
|
|
f.reset();
|
|
}
|