Repository navigation
Expand file tree
/
Copy pathscript.js
More file actions
107 lines (82 loc) · 2.69 KB
/
Copy pathscript.js
File metadata and controls
107 lines (82 loc) · 2.69 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
const transactionForm = document.getElementById("transaction-form");
const descriptionInput = document.getElementById("description");
const amountInput = document.getElementById("amount");
const typeInput = document.getElementById("type");
const totalIncome = document.getElementById("total-income");
const totalExpenses = document.getElementById("total-expenses");
const netBalance = document.getElementById("net-balance");
const transactionsList = document.getElementById("transactions-list");
// LOAD TRANSACTIONS FROM LOCAL STORAGE
let transactions =
JSON.parse(localStorage.getItem("transactions")) || [];
// SHOW SAVED TRANSACTIONS WHEN PAGE LOADS
renderTransactions();
updateSummary();
// SAVE TO LOCAL STORAGE
function saveTransactions() {
localStorage.setItem("transactions", JSON.stringify(transactions));
}
// ADD NEW TRANSACTION
transactionForm.addEventListener("submit", function (event) {
event.preventDefault();
const description = descriptionInput.value;
const amount = parseFloat(amountInput.value);
const type = typeInput.value;
if (description && !isNaN(amount) && type) {
const transaction = {
description: description,
amount: amount,
type: type,
};
transactions.push(transaction);
saveTransactions();
updateSummary();
renderTransactions();
transactionForm.reset();
}
});
// UPDATE SUMMARY
function updateSummary() {
let income = 0;
let expenses = 0;
transactions.forEach(function (transaction) {
if (transaction.type === "income") {
income += transaction.amount;
} else if (transaction.type === "expense") {
expenses += transaction.amount;
}
});
totalIncome.textContent = income.toFixed(2);
totalExpenses.textContent = expenses.toFixed(2);
netBalance.textContent = (income - expenses).toFixed(2);
}
// ADD TRANSACTION TO SCREEN
function addTransactionToList(transaction, index) {
const li = document.createElement("li");
li.classList.add(transaction.type);
li.innerHTML = `
<div class="transaction-info">
<strong>
${transaction.description}: $${transaction.amount.toFixed(2)}
</strong>
<small>${transaction.type}</small>
</div>
<button class="delete-btn">×</button>
`;
const deleteButton = li.querySelector(".delete-btn");
// DELETE TRANSACTION
deleteButton.addEventListener("click", function () {
transactions.splice(index, 1);
saveTransactions();
updateSummary();
renderTransactions();
});
transactionsList.appendChild(li);
}
// RENDER ALL TRANSACTIONS
function renderTransactions() {
transactionsList.innerHTML = "";
transactions.forEach(function (transaction, index) {
addTransactionToList(transaction, index);
});
}