Skip to content

Commit c16c31d

Browse files
Merge pull request steam-bell-92#1367 from Alvi24-hub/main
Fix: Budget Tracker appears once
2 parents cea3871 + c5d6836 commit c16c31d

3 files changed

Lines changed: 83 additions & 10 deletions

File tree

web-app/css/styles.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7152,4 +7152,10 @@ body.sidebar-collapsed .sidebar-dock .sidebar-footer .sidebar-main-controls {
71527152
#generatePascal:active {
71537153
transform: scale(0.95) !important;
71547154
box-shadow: 0 0 15px rgba(34, 197, 94, 0.2), 0 2px 10px rgba(34, 197, 94, 0.15) !important;
7155+
}
7156+
7157+
.info-modal-overlay.active {
7158+
display: flex !important;
7159+
visibility: visible !important;
7160+
opacity: 1 !important;
71557161
}

web-app/index.html

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,13 +1315,6 @@ <h3>Legal</h3>
13151315
desc: "Converts values between different units",
13161316
tags: "utility,tool",
13171317
},
1318-
{
1319-
project: "budget-tracker",
1320-
title: "Budget Tracker",
1321-
category: "utilities",
1322-
desc: "Track your income and expenses with visual breakdowns",
1323-
tags: "utility,finance,tracker,money",
1324-
},
13251318
{
13261319
project: "tsp-visualizer",
13271320
title: "TSP Visualizer",
@@ -1556,16 +1549,16 @@ <h3>${proj.title}</h3>
15561549
console.log('✅ Focus error fixed');
15571550
}, 100);
15581551
</script>
1559-
1552+
15601553
<!-- Info Modal Popup -->
15611554
<div id="infoModalOverlay" class="info-modal-overlay">
1562-
<div class="info-modal-content">
1555+
<div class="info-modal-content">
15631556
<button class="info-modal-close" id="infoModalClose">&times;</button>
15641557
<h3 id="infoModalTitle">How to Play</h3>
15651558
<ul id="infoModalList"></ul>
15661559
<button class="info-modal-btn" id="infoModalGotIt">Got it</button>
1567-
</div>
15681560
</div>
1561+
</div>
15691562

15701563
<!-- Themed Confirm Modal (used for Clear All) -->
15711564
<div id="confirmModalOverlay" class="confirm-modal-overlay" aria-hidden="true">

web-app/js/main.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,80 @@ var selectedSuggestionIndex = -1;
100100
var projectCards = [];
101101
var recentSearches = JSON.parse(localStorage.getItem("recentSearches") || "[]");
102102

103+
// ============================================
104+
// INFO MODAL FUNCTIONS - FIXED
105+
// ============================================
106+
107+
function showInfoModal(title, steps) {
108+
var overlay = document.getElementById("infoModalOverlay");
109+
var titleEl = document.getElementById("infoModalTitle");
110+
var listEl = document.getElementById("infoModalList");
111+
var closeBtn = document.getElementById("infoModalClose");
112+
var gotItBtn = document.getElementById("infoModalGotIt");
113+
114+
if (!overlay || !titleEl || !listEl) return;
115+
116+
titleEl.textContent = title;
117+
listEl.innerHTML = "";
118+
steps.forEach(function (step) {
119+
const li = document.createElement("li");
120+
li.textContent = step;
121+
listEl.appendChild(li);
122+
});
123+
124+
// Show modal
125+
overlay.style.display = 'flex';
126+
overlay.style.visibility = 'visible';
127+
overlay.style.opacity = '1';
128+
overlay.classList.add("active");
129+
overlay.setAttribute('aria-hidden', 'false');
130+
131+
function closeModal() {
132+
overlay.style.display = 'none';
133+
overlay.style.visibility = 'hidden';
134+
overlay.style.opacity = '0';
135+
overlay.classList.remove("active");
136+
overlay.setAttribute('aria-hidden', 'true');
137+
// Clean up event listeners
138+
if (closeBtn) closeBtn.removeEventListener("click", closeModal);
139+
if (gotItBtn) gotItBtn.removeEventListener("click", closeModal);
140+
overlay.removeEventListener("click", overlayClick);
141+
document.removeEventListener("keydown", escapeHandler);
142+
}
143+
144+
function overlayClick(e) {
145+
if (e.target === overlay) closeModal();
146+
}
147+
148+
function escapeHandler(e) {
149+
if (e.key === 'Escape') closeModal();
150+
}
151+
152+
// Add event listeners
153+
if (closeBtn) {
154+
// Remove old listeners by cloning
155+
const newClose = closeBtn.cloneNode(true);
156+
closeBtn.parentNode.replaceChild(newClose, closeBtn);
157+
newClose.addEventListener("click", function(e) {
158+
e.preventDefault();
159+
e.stopPropagation();
160+
closeModal();
161+
});
162+
}
163+
164+
if (gotItBtn) {
165+
const newGotIt = gotItBtn.cloneNode(true);
166+
gotItBtn.parentNode.replaceChild(newGotIt, gotItBtn);
167+
newGotIt.addEventListener("click", function(e) {
168+
e.preventDefault();
169+
e.stopPropagation();
170+
closeModal();
171+
});
172+
}
173+
174+
overlay.addEventListener("click", overlayClick);
175+
document.addEventListener("keydown", escapeHandler);
176+
}
103177

104178
// Themed confirmation modal (in-page) helper
105179
function showConfirm(message, onConfirm, onCancel) {

0 commit comments

Comments
 (0)