Repository navigation
Expand file tree
/
Copy pathscript.js
More file actions
112 lines (88 loc) · 3.63 KB
/
Copy pathscript.js
File metadata and controls
112 lines (88 loc) · 3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const balanceEl = document.getElementById("balance");
const incomeAmountEl = document.getElementById("income-amount");
const expenseAmountEl = document.getElementById("expense-amount");
const transactionListEl = document.getElementById("transaction-list");
const transactionFormEl = document.getElementById("transaction-form");
const descriptionEl = document.getElementById("description");
const amountEl = document.getElementById("amount");
let transactions = JSON.parse(localStorage.getItem("transactions")) || [];
// Event listener for form submission
transactionFormEl.addEventListener("submit", addTransaction);
// Function to add a new transaction
function addTransaction(e) {
e.preventDefault();
const description = descriptionEl.value.trim();
const amount = parseFloat(amountEl.value);
// Validate inputs
if (description === "" || isNaN(amount)) {
alert("Please enter a valid description and amount.");
return;
}
const transaction = {
id: Date.now(),
description,
amount,
};
transactions.push(transaction);
localStorage.setItem("transactions", JSON.stringify(transactions));
updateTransactionList();
updateSummary();
transactionFormEl.reset();
}
// Function to update the transaction list in the DOM
function updateTransactionList() {
transactionListEl.innerHTML = "";
const sortedTransactions = [...transactions].reverse();
sortedTransactions.forEach((transaction) => {
if (transaction.amount === 0) return; // Skip zero-amount transactions
const transactionEl = createTransactionElement(transaction);
transactionListEl.appendChild(transactionEl);
});
}
// Helper function to create a new transaction list item
function createTransactionElement(transaction) {
const li = document.createElement("li");
li.classList.add("transaction");
li.classList.add(transaction.amount > 0 ? "income" : "expense");
const formattedAmount = formatCurrency(Math.abs(transaction.amount));
li.innerHTML = `
<span>${transaction.description}</span>
<span>
${formattedAmount}
<button class="delete-btn" onclick="removeTransaction(${transaction.id})">x</button>
</span>
`;
return li;
}
// Function to update the balance, income, and expense summary
function updateSummary() {
const totalBalance = transactions.reduce((acc, transaction) => acc + transaction.amount, 0);
const income = transactions
.filter((transaction) => transaction.amount > 0)
.reduce((acc, transaction) => acc + transaction.amount, 0);
const expenses = Math.abs(
transactions
.filter((transaction) => transaction.amount < 0)
.reduce((acc, transaction) => acc + transaction.amount, 0)
);
balanceEl.textContent = formatCurrency(totalBalance);
incomeAmountEl.textContent = formatCurrency(income);
expenseAmountEl.textContent = formatCurrency(expenses);
}
// Helper function to format a number as currency
function formatCurrency(number) {
return new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
}).format(number);
}
// Function to remove a transaction by its ID
function removeTransaction(id) {
transactions = transactions.filter((transaction) => transaction.id !== id);
localStorage.setItem("transactions", JSON.stringify(transactions));
updateTransactionList();
updateSummary();
}
// Initial render of transactions and summary on page load
updateTransactionList();
updateSummary();