refactor/add headers to client side scripts

This commit is contained in:
SowinskiBraeden committed 2025-05-21 11:33:26 -07:00
1 parent ce9345fad9
commit e50047b26a
9 files changed
+182 -154

No files matched your search

-3
View File
@@ -1,3 +0,0 @@
let rate = document.getElementsByClassName("countryButton").value;
document.getElementById("exchange").innerHTML
+4 -4
View File
@@ -1,12 +1,12 @@
/** /**
* Function takes in a number and formats it to currency * Function takes in a number and formats it to currency
* @param {integer} * @param {number} value
* @returns nuber formatted in currency * @returns {string} number formatted in currency
*/ */
document.addEventListener("DOMContentLoaded", () => { document.addEventListener("DOMContentLoaded", () => {
const number = document.querySelectorAll(".planGoal"); const number = document.querySelectorAll(".planGoal");
number.forEach(value => { number.forEach((value) => {
num = parseFloat(value.textContent); num = parseFloat(value.textContent);
if (num >= 999999) { if (num >= 999999) {
value.textContent = "$" + (num /= 1000000) + "M"; value.textContent = "$" + (num /= 1000000) + "M";
+65
View File
@@ -0,0 +1,65 @@
// Basic client-side form submission handler to process JSON response
document.addEventListener('DOMContentLoaded', () => {
const form = document.getElementById('editPlanForm');
const errorMessagesDiv = document.getElementById('formErrorMessages');
// Store initial form values
const initialValues = {
name: form.name.value,
retirementAge: form.retirementAge.value,
retirementExpenses: form.retirementExpenses.value,
retirementAssets: form.retirementAssets.value,
retirementLiabilities: form.retirementLiabilities.value
};
const resetButton = document.getElementById('resetButton');
resetButton.addEventListener('click', function() {
form.name.value = initialValues.name;
form.retirementAge.value = initialValues.retirementAge;
form.retirementExpenses.value = initialValues.retirementExpenses;
form.retirementAssets.value = initialValues.retirementAssets;
form.retirementLiabilities.value = initialValues.retirementLiabilities;
if (errorMessagesDiv) {
errorMessagesDiv.style.display = 'none'; // Hide error message on reset
errorMessagesDiv.textContent = '';
}
});
if (form) {
form.addEventListener('submit', async function(event) {
event.preventDefault(); // Prevent traditional form submission
errorMessagesDiv.textContent = '';
errorMessagesDiv.style.display = 'none';
const formData = new FormData(form);
const data = {};
formData.forEach((value, key) => {
data[key] = value;
});
try {
const response = await fetch(form.action, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
const result = await response.json();
if (response.ok && result.success) {
// alert('Plan updated successfully!'); // Optional: show an alert
window.location.href = `/plans/<%= plan._id %>`; // Redirect to plan detail page
} else {
errorMessagesDiv.textContent = result.message || 'An error occurred while updating the plan.';
errorMessagesDiv.style.display = 'block';
}
} catch (error) {
console.error('Error submitting form:', error);
errorMessagesDiv.textContent = 'A network error occurred. Please try again.';
errorMessagesDiv.style.display = 'block';
}
});
}
});
+1
View File
@@ -13,6 +13,7 @@ if(page !== "login" && page !== "signup" && page !== "forgotPassword" && page !=
factButton.addEventListener("click", () => { factButton.addEventListener("click", () => {
factMenu.classList.toggle("hidden"); factMenu.classList.toggle("hidden");
}); });
factSubmitButton.addEventListener("click", () => { factSubmitButton.addEventListener("click", () => {
fetch("/fact", { fetch("/fact", {
method: "POST", method: "POST",
+24
View File
@@ -1,9 +1,17 @@
/**
* getLocation gets the geolocation of user on page load.
*/
function getLocation() { function getLocation() {
if (navigator.geolocation) { if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(getLatestExchange, error); navigator.geolocation.getCurrentPosition(getLatestExchange, error);
} }
} }
/**
* update the currency exchange rate dropdown
* or display error
* @param {object} data
*/
function update(data) { function update(data) {
if (data.data.message != "error") { if (data.data.message != "error") {
document.getElementById("loading").style = "display: none"; document.getElementById("loading").style = "display: none";
@@ -48,6 +56,10 @@ function update(data) {
} }
} }
/**
* switchButton changes the selected exchange rate icon
* @param {element} clickedButton
*/
function switchButton(clickedButton) { function switchButton(clickedButton) {
document.getElementById("dropdown-country-button").value = clickedButton.value; document.getElementById("dropdown-country-button").value = clickedButton.value;
updateExchange(document.getElementById("dropdown-country-button").value); updateExchange(document.getElementById("dropdown-country-button").value);
@@ -60,10 +72,18 @@ function switchButton(clickedButton) {
`; `;
} }
/**
* updateExchange updates the exchange rate
* @param {number} exRate
*/
function updateExchange(exRate) { function updateExchange(exRate) {
document.getElementById("exchange").innerHTML = "$1.00 = $" +`${(1 * exRate).toFixed(2)}`; document.getElementById("exchange").innerHTML = "$1.00 = $" +`${(1 * exRate).toFixed(2)}`;
} }
/**
* getLatestExchange gets rates from API from a given location.
* @param {object} position coordinates
*/
async function getLatestExchange(position) { async function getLatestExchange(position) {
let lat = position.coords.latitude; let lat = position.coords.latitude;
let lon = position.coords.longitude; let lon = position.coords.longitude;
@@ -73,6 +93,10 @@ async function getLatestExchange(position) {
update(data); update(data);
} }
/**
* error displays error message
* @param {string} err
*/
function error(err) { function error(err) {
const data = { const data = {
data: { data: {
+8
View File
@@ -1,3 +1,7 @@
/**
* editPlan redirect
* @param {string} planId
*/
function editPlan(planId) { function editPlan(planId) {
if (planId) { if (planId) {
window.location.href = `/plans/${planId}/edit`; window.location.href = `/plans/${planId}/edit`;
@@ -7,6 +11,10 @@ function editPlan(planId) {
} }
} }
/**
* deletePlan handler
* @param {string} planId
*/
async function deletePlan(planId) { async function deletePlan(planId) {
if (!planId) { if (!planId) {
console.error('deletePlan called without a planId'); console.error('deletePlan called without a planId');
+78
View File
@@ -0,0 +1,78 @@
document.addEventListener('DOMContentLoaded', () => {
const openModalBtn = document.getElementById('openNewPlanModalBtn');
const newPlanDialog = document.getElementById('newPlanDialog');
const newPlanForm = document.getElementById('newPlanForm');
const submitNewPlanBtn = document.getElementById('submitNewPlanBtn');
const newPlanError = document.getElementById('newPlanError');
const resetNewPlanFormBtn = document.getElementById('resetNewPlanFormBtn');
openModalBtn.addEventListener('click', () => {
newPlanDialog.showModal();
// Error reset is now handled by 'close' event, but good to clear on open too
newPlanError.style.display = 'none';
newPlanError.textContent = '';
});
// Handles form reset and error clearing when dialog is closed by any means (Esc, Cancel button, backdrop click, successful submit)
newPlanDialog.addEventListener('close', () => {
newPlanForm.reset();
newPlanError.style.display = 'none';
newPlanError.textContent = '';
});
// Close dialog if user clicks on the backdrop
newPlanDialog.addEventListener('click', (event) => {
if (event.target === newPlanDialog) {
newPlanDialog.close(); // This will trigger the 'close' event listener above
}
});
resetNewPlanFormBtn.addEventListener('click', () => {
newPlanForm.reset();
newPlanError.style.display = 'none';
newPlanError.textContent = '';
});
newPlanForm.addEventListener('submit', async (event) => {
event.preventDefault();
submitNewPlanBtn.disabled = true;
submitNewPlanBtn.textContent = 'Saving...';
newPlanError.style.display = 'none';
const formData = new FormData(newPlanForm);
const data = Object.fromEntries(formData.entries());
try {
const response = await fetch('/newPlan', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
if (response.ok) {
const result = await response.json();
if (result.success) {
newPlanDialog.close(); // This will trigger the 'close' event listener
window.location.reload(); // Reload to see the new plan
} else {
newPlanError.textContent = result.message || 'Failed to create plan. Please try again.';
newPlanError.style.display = 'block';
}
} else {
const errorData = await response.json();
newPlanError.textContent = errorData.message || `Error: ${response.status} - ${response.statusText}`;
newPlanError.style.display = 'block';
}
} catch (error) {
console.error('Error submitting new plan:', error);
newPlanError.textContent = 'An unexpected error occurred. Please try again.';
newPlanError.style.display = 'block';
}
finally {
submitNewPlanBtn.disabled = false;
submitNewPlanBtn.textContent = 'Save Plan';
}
});
});
+1 -67
View File
@@ -55,73 +55,7 @@
</div> </div>
</main> </main>
<script> <script src="/static/scripts/editPlanModals.js"></script>
// Basic client-side form submission handler to process JSON response
document.addEventListener('DOMContentLoaded', () => {
const form = document.getElementById('editPlanForm');
const errorMessagesDiv = document.getElementById('formErrorMessages');
// Store initial form values
const initialValues = {
name: form.name.value,
retirementAge: form.retirementAge.value,
retirementExpenses: form.retirementExpenses.value,
retirementAssets: form.retirementAssets.value,
retirementLiabilities: form.retirementLiabilities.value
};
const resetButton = document.getElementById('resetButton');
resetButton.addEventListener('click', function() {
form.name.value = initialValues.name;
form.retirementAge.value = initialValues.retirementAge;
form.retirementExpenses.value = initialValues.retirementExpenses;
form.retirementAssets.value = initialValues.retirementAssets;
form.retirementLiabilities.value = initialValues.retirementLiabilities;
if (errorMessagesDiv) {
errorMessagesDiv.style.display = 'none'; // Hide error message on reset
errorMessagesDiv.textContent = '';
}
});
if (form) {
form.addEventListener('submit', async function(event) {
event.preventDefault(); // Prevent traditional form submission
errorMessagesDiv.textContent = '';
errorMessagesDiv.style.display = 'none';
const formData = new FormData(form);
const data = {};
formData.forEach((value, key) => {
data[key] = value;
});
try {
const response = await fetch(form.action, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
const result = await response.json();
if (response.ok && result.success) {
// alert('Plan updated successfully!'); // Optional: show an alert
window.location.href = `/plans/<%= plan._id %>`; // Redirect to plan detail page
} else {
errorMessagesDiv.textContent = result.message || 'An error occurred while updating the plan.';
errorMessagesDiv.style.display = 'block';
}
} catch (error) {
console.error('Error submitting form:', error);
errorMessagesDiv.textContent = 'A network error occurred. Please try again.';
errorMessagesDiv.style.display = 'block';
}
});
}
});
</script>
<%- include('./partials/navBar') %> <%- include('./partials/navBar') %>
<%- include('./partials/scriptLoader') %> <%- include('./partials/scriptLoader') %>
+1 -80
View File
@@ -65,84 +65,5 @@
<%- include("./partials/navBar") %> <%- include("./partials/navBar") %>
<%- include("./partials/scriptLoader") %> <%- include("./partials/scriptLoader") %>
<script> <script src="/static/scripts/planModals.js"></script>
document.addEventListener('DOMContentLoaded', () => {
const openModalBtn = document.getElementById('openNewPlanModalBtn');
const newPlanDialog = document.getElementById('newPlanDialog');
const newPlanForm = document.getElementById('newPlanForm');
const submitNewPlanBtn = document.getElementById('submitNewPlanBtn');
const newPlanError = document.getElementById('newPlanError');
const resetNewPlanFormBtn = document.getElementById('resetNewPlanFormBtn');
openModalBtn.addEventListener('click', () => {
newPlanDialog.showModal();
// Error reset is now handled by 'close' event, but good to clear on open too
newPlanError.style.display = 'none';
newPlanError.textContent = '';
});
// Handles form reset and error clearing when dialog is closed by any means (Esc, Cancel button, backdrop click, successful submit)
newPlanDialog.addEventListener('close', () => {
newPlanForm.reset();
newPlanError.style.display = 'none';
newPlanError.textContent = '';
});
// Close dialog if user clicks on the backdrop
newPlanDialog.addEventListener('click', (event) => {
if (event.target === newPlanDialog) {
newPlanDialog.close(); // This will trigger the 'close' event listener above
}
});
resetNewPlanFormBtn.addEventListener('click', () => {
newPlanForm.reset();
newPlanError.style.display = 'none';
newPlanError.textContent = '';
});
newPlanForm.addEventListener('submit', async (event) => {
event.preventDefault();
submitNewPlanBtn.disabled = true;
submitNewPlanBtn.textContent = 'Saving...';
newPlanError.style.display = 'none';
const formData = new FormData(newPlanForm);
const data = Object.fromEntries(formData.entries());
try {
const response = await fetch('/newPlan', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
if (response.ok) {
const result = await response.json();
if (result.success) {
newPlanDialog.close(); // This will trigger the 'close' event listener
window.location.reload(); // Reload to see the new plan
} else {
newPlanError.textContent = result.message || 'Failed to create plan. Please try again.';
newPlanError.style.display = 'block';
}
} else {
const errorData = await response.json();
newPlanError.textContent = errorData.message || `Error: ${response.status} - ${response.statusText}`;
newPlanError.style.display = 'block';
}
} catch (error) {
console.error('Error submitting new plan:', error);
newPlanError.textContent = 'An unexpected error occurred. Please try again.';
newPlanError.style.display = 'block';
}
finally {
submitNewPlanBtn.disabled = false;
submitNewPlanBtn.textContent = 'Save Plan';
}
});
});
</script>
<%- include("./partials/footer") %> <%- include("./partials/footer") %>