/* * Copyright (c) 2022. Micha Espey * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. * */ function addAddress(url) { location.href = url } function editAddress(id) { if (document.getElementById('edit_button_' + id).value === 'Save') { // save const url = "/address/update"; fetch(url, { method: "POST", body: JSON.stringify({ id: id, owner: document.getElementById('owner_' + id).value, first: document.getElementById('first_' + id).value, last: document.getElementById('last_' + id).value, street: document.getElementById('street_' + id).value, zip: document.getElementById('zip_' + id).value, city: document.getElementById('city_' + id).value, phone: document.getElementById('phone_' + id).value, }) }) .then( response => response.text() ).then( json => { let jsonObject = JSON.parse(json) if (jsonObject.status === 200) { setInfo('Data successfully saved.') } else { setError(jsonObject.message); } } ); document.getElementById('first_' + id).disabled = true document.getElementById('last_' + id).disabled = true document.getElementById('street_' + id).disabled = true document.getElementById('zip_' + id).disabled = true document.getElementById('city_' + id).disabled = true document.getElementById('phone_' + id).disabled = true document.getElementById('edit_button_' + id).value = 'Edit' } else { //switch to edit document.getElementById('first_' + id).disabled = false document.getElementById('last_' + id).disabled = false document.getElementById('street_' + id).disabled = false document.getElementById('zip_' + id).disabled = false document.getElementById('city_' + id).disabled = false document.getElementById('phone_' + id).disabled = false document.getElementById('edit_button_' + id).value = 'Save' } } function deleteAddress(id) { if (confirm('Are you sure?')) { const url = "/address/delete"; fetch(url, { method: "POST", body: JSON.stringify({ id: id }) }) .then( response => response.text() ).then( json => { let jsonObject = JSON.parse(json) if (jsonObject.status === 200) { setInfo('Data successfully saved.') } else { setError(jsonObject.message); } } ); let row = document.getElementById('row_' + id) row.parentNode.removeChild(row) } } function upCase(text) { return text[0].toUpperCase() + text.substring(1); } function sortBy(column) { // clear titles const titles = ['first', 'last', 'street', 'zip', 'city', 'phone'] titles.forEach((title) => document.getElementById(title).innerHTML = upCase(title) ) console.log("col", column) console.log("curcol", currentColumn) if (currentColumn === column) { console.log("in switch") // switch direction on every call on same column if (currentSortOrder === 'asc') { currentSortOrder = 'desc' } else { currentSortOrder = 'asc' } console.log("col", column) } else { currentColumn = column } let currentTitleElement = document.getElementById(column) let currentTitle = currentTitleElement.innerHTML let newTitle if (currentSortOrder === 'asc') { newTitle = currentTitle[0] + currentTitle.substring(1) + ' ⬇' } else { newTitle = currentTitle[0] + currentTitle.substring(1) + ' ⬆' } currentTitleElement.innerHTML = newTitle const table = document.getElementById('address_table'); let dirty = true; // loop until clean while (dirty) { // assume we are finished dirty = false const rows = table.rows; for (let i = 1; i < (rows.length - 2); i++) { let x = rows[i] let rowXId = x.id let rowXNumber = rowXId.match(/\d+/) let valueX = document.getElementById(column + '_' + rowXNumber).value let y = rows[i + 1] let rowYId = y.id let rowYNumber = rowYId.match(/\d+/) let valueY = document.getElementById(column + '_' + rowYNumber).value let sortOrder if (currentSortOrder === 'asc') { sortOrder = 1 } else { sortOrder = -1 } if (valueX.localeCompare(valueY) === sortOrder) { x.parentNode.insertBefore(y, x); dirty = true } } } } function setInfo(info) { const infoBox = document.getElementById('info_box') infoBox.innerHTML = info infoBox.style.display = 'block' infoBox.classList.add('panel_float') setTimeout(() => { infoBox.style.display = 'none' }, 2500) } function setError(error) { const errorBox = document.getElementById('error_box') const errorText = document.getElementById('error_text') const infoButton = document.getElementById('info_button') if (errorBox.style.display === 'block') { errorBox.style.display = 'none' return } if (infoButton != null) { infoButton.disabled = true } errorText.innerHTML = error errorBox.style.display = 'block' errorBox.classList.add('panel_float') } function closeError() { const errorBox = document.getElementById('error_box') const infoButton = document.getElementById('info_button') if (infoButton) { infoButton.disabled = false } errorBox.style.display = 'none' } // global scope let currentSortOrder = 'desc' let currentColumn = 'last' document.addEventListener('DOMContentLoaded', () => { const table = document.getElementById('address_table') || false if (table) { sortBy('last') } })