Skip to content

Commit 18fa562

Browse files
feat: add level progression bar to student's page
1 parent 3229886 commit 18fa562

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

src/main/resources/static/dashboard.html

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ <h4 class="mb-1"><i class="bi bi-bar-chart"></i> My Stats</h4>
351351
<div class="d-flex flex-wrap gap-2 mb-3">
352352
<button class="btn btn-primary" id="refreshStatsBtn"><i class="bi bi-arrow-clockwise me-1"></i> Refresh stats</button>
353353
</div>
354+
<div id="levelProgression" class="mb-3"></div>
354355
<div id="statsResponse" class="response-area"></div>
355356
</div>
356357
`);
@@ -364,24 +365,32 @@ <h4 class="mb-1"><i class="bi bi-bar-chart"></i> My Stats</h4>
364365
try {
365366
const s = (await apiCall('GET', `/api/stats/${userId}`)).data;
366367
const percent = (s.currentExperience / s.maxLvlExperience) * 100;
367-
const progressBar = `
368-
<div class="mt-3">
369-
<strong>Level ${s.level} progress:</strong> ${s.currentExperience} / ${s.maxLvlExperience} XP
370-
<div class="progress mt-1" style="height: 20px;">
371-
<div class="progress-bar bg-success" role="progressbar" style="width: ${percent}%;" aria-valuenow="${percent}" aria-valuemin="0" aria-valuemax="100">${Math.round(percent)}%</div>
368+
369+
const progressHtml = `
370+
<div class="card p-3">
371+
<h5><i class="bi bi-graph-up"></i> Level Progression</h5>
372+
<strong>Level ${s.level}</strong><br>
373+
<div class="progress mt-2" style="height: 25px;">
374+
<div class="progress-bar bg-success" role="progressbar" style="width: ${percent}%;" aria-valuenow="${percent}" aria-valuemin="0" aria-valuemax="100">
375+
${Math.round(percent)}%
376+
</div>
372377
</div>
378+
<small class="text-muted">${s.currentExperience} / ${s.maxLvlExperience} XP to next level</small>
373379
</div>
374380
`;
375-
const html = `
381+
382+
const statsHtml = `
376383
<strong>Level:</strong> ${s.level}<br>
377384
<strong>XP:</strong> ${s.currentExperience} / ${s.maxLvlExperience}<br>
378385
<strong>Avg Reading Time:</strong> ${s.averageReadingTime} min<br>
379386
<strong>Books Read:</strong> ${s.readingCount}<br>
380-
${progressBar}
381387
`;
382-
showResponse('statsResponse', html);
388+
389+
$('#levelProgression').html(progressHtml);
390+
showResponse('statsResponse', statsHtml);
383391
} catch(e) {
384392
showResponse('statsResponse', null, e.message);
393+
$('#levelProgression').html('<div class="alert alert-danger">Failed to load progression</div>');
385394
}
386395
}
387396
async function updateStreak() {

0 commit comments

Comments
 (0)