Skip to content

Commit d15200e

Browse files
Implement participants section in activity cards and update styles
1 parent f72135a commit d15200e

File tree

3 files changed

+55
-18
lines changed

3 files changed

+55
-18
lines changed

src/app.py

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -77,24 +77,6 @@
7777
"participants": ["ethan@mergington.edu"]
7878
}
7979
}
80-
"Chess Club": {
81-
"description": "Learn strategies and compete in chess tournaments",
82-
"schedule": "Fridays, 3:30 PM - 5:00 PM",
83-
"max_participants": 12,
84-
"participants": ["michael@mergington.edu", "daniel@mergington.edu"]
85-
},
86-
"Programming Class": {
87-
"description": "Learn programming fundamentals and build software projects",
88-
"schedule": "Tuesdays and Thursdays, 3:30 PM - 4:30 PM",
89-
"max_participants": 20,
90-
"participants": ["emma@mergington.edu", "sophia@mergington.edu"]
91-
},
92-
"Gym Class": {
93-
"description": "Physical education and sports activities",
94-
"schedule": "Mondays, Wednesdays, Fridays, 2:00 PM - 3:00 PM",
95-
"max_participants": 30,
96-
"participants": ["john@mergington.edu", "olivia@mergington.edu"]
97-
}
9880
}
9981

10082

src/static/app.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ document.addEventListener("DOMContentLoaded", () => {
2525
<p>${details.description}</p>
2626
<p><strong>Schedule:</strong> ${details.schedule}</p>
2727
<p><strong>Availability:</strong> ${spotsLeft} spots left</p>
28+
29+
<div class="participants-section" aria-live="polite">
30+
<h5 class="participants-title">Participants</h5>
31+
<ul class="participants-list" aria-label="Participants for ${name}"></ul>
32+
<p class="no-participants info ${details.participants.length ? "hidden" : ""}">No participants yet</p>
33+
</div>
2834
`;
2935

3036
activitiesList.appendChild(activityCard);
@@ -34,6 +40,20 @@ document.addEventListener("DOMContentLoaded", () => {
3440
option.value = name;
3541
option.textContent = name;
3642
activitySelect.appendChild(option);
43+
44+
// Populate participants list
45+
const participantsUl = activityCard.querySelector(".participants-list");
46+
const noParticipantsP = activityCard.querySelector(".no-participants");
47+
if (details.participants && details.participants.length) {
48+
details.participants.forEach((email) => {
49+
const li = document.createElement("li");
50+
li.textContent = email;
51+
participantsUl.appendChild(li);
52+
});
53+
noParticipantsP.classList.add("hidden");
54+
} else {
55+
noParticipantsP.classList.remove("hidden");
56+
}
3757
});
3858
} catch (error) {
3959
activitiesList.innerHTML = "<p>Failed to load activities. Please try again later.</p>";

src/static/styles.css

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,38 @@ footer {
142142
padding: 20px;
143143
color: #666;
144144
}
145+
146+
.participants-section {
147+
margin-top: 12px;
148+
padding-top: 12px;
149+
border-top: 1px dashed #eceff1;
150+
}
151+
152+
.participants-title {
153+
margin-bottom: 8px;
154+
font-size: 14px;
155+
color: #1a237e;
156+
font-weight: 600;
157+
}
158+
159+
.participants-list {
160+
list-style: disc;
161+
padding-left: 20px;
162+
margin: 0 0 8px 0;
163+
}
164+
165+
.participants-list li {
166+
background: linear-gradient(90deg, #ffffff, #fbfbff);
167+
border: 1px solid #ececec;
168+
padding: 6px 10px;
169+
margin-bottom: 6px;
170+
border-radius: 6px;
171+
font-size: 14px;
172+
color: #333;
173+
}
174+
175+
.no-participants {
176+
margin-top: 6px;
177+
font-size: 14px;
178+
color: #0c5460;
179+
}

0 commit comments

Comments
 (0)