151 lines
6.2 KiB
HTML
151 lines
6.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>My Progress — English Easy</title>
|
|
<link rel="stylesheet" href="css/style.css">
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div class="header-inner">
|
|
<a href="index.html" class="logo"><span class="logo-icon">E</span>English <span>Easy</span></a>
|
|
<button class="menu-toggle" aria-label="Menu">☰</button>
|
|
<nav>
|
|
<ul class="nav-list">
|
|
<li><a href="index.html">Home</a></li>
|
|
<li><a href="vocabulary.html">Vocabulary</a></li>
|
|
<li><a href="grammar.html">Grammar</a></li>
|
|
<li><a href="pronunciation.html">Pronunciation</a></li>
|
|
<li><a href="exercises.html">Exercises</a></li>
|
|
<li><a href="tests.html">Tests</a></li>
|
|
<li><a href="reading.html">Reading</a></li>
|
|
<li><a href="progress.html">Progress</a></li>
|
|
<li><a href="contact.html">Contact</a></li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<section class="page-header">
|
|
<div class="container">
|
|
<h1>My Progress</h1>
|
|
<p>Track your learning journey and see how much you've achieved.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="section">
|
|
<div class="container" id="progress-root">
|
|
|
|
<div class="level-hero" id="level-hero">
|
|
<div class="level-icon" id="level-icon">🌱</div>
|
|
<div class="level-title" id="level-title">A0 Beginner</div>
|
|
<div class="level-desc" id="level-desc">You are just starting your English journey!</div>
|
|
<div class="level-xp-total" id="level-xp-total">0 XP</div>
|
|
<div class="level-bar"><div class="level-bar-fill" id="level-bar-fill" style="width:0%"></div></div>
|
|
</div>
|
|
|
|
<div class="stat-grid" id="stats-grid">
|
|
<div class="stat-card">
|
|
<div class="stat-icon">✅</div>
|
|
<div class="stat-value" id="stat-exercises">0</div>
|
|
<div class="stat-label">Exercises Done</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-icon">📝</div>
|
|
<div class="stat-value" id="stat-tests">0</div>
|
|
<div class="stat-label">Tests Taken</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-icon">🏆</div>
|
|
<div class="stat-value" id="stat-best">—</div>
|
|
<div class="stat-label">Best Test Score</div>
|
|
</div>
|
|
<div class="stat-card">
|
|
<div class="stat-icon">🔊</div>
|
|
<div class="stat-value" id="stat-words">0</div>
|
|
<div class="stat-label">Words Practiced</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="activity-list">
|
|
<h3>📋 Recent Activity</h3>
|
|
<div id="activity-feed">
|
|
<div class="activity-item"><div class="act-icon">👋</div><div class="act-text">Start learning to see your activity here!</div></div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</section>
|
|
|
|
<footer>
|
|
<div class="container">
|
|
<p>© 2026 <a href="index.html">English Easy</a>. Made for learning English.</p>
|
|
</div>
|
|
</footer>
|
|
|
|
<script src="js/script.js"></script>
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
renderProgress();
|
|
});
|
|
|
|
function renderProgress() {
|
|
var data = getProgress();
|
|
var info = getLevelProgress(data.xp);
|
|
|
|
var icons = ['🌱', '🌿', '🌳', '⭐', '🌟', '👑'];
|
|
var levelIndex = LEVELS.indexOf(info.current);
|
|
document.getElementById('level-icon').textContent = icons[levelIndex] || '🌱';
|
|
document.getElementById('level-title').textContent = info.current.label;
|
|
document.getElementById('level-desc').textContent = info.current.desc;
|
|
document.getElementById('level-xp-total').textContent = data.xp + ' XP';
|
|
document.getElementById('level-bar-fill').style.width = info.percent + '%';
|
|
|
|
document.getElementById('stat-exercises').textContent = data.exercisesDone.length;
|
|
document.getElementById('stat-tests').textContent = data.testsDone;
|
|
document.getElementById('stat-best').textContent = data.bestTestScore > 0 ? data.bestTestScore + '/10' : '—';
|
|
document.getElementById('stat-words').textContent = data.wordsListened;
|
|
|
|
// Activity feed
|
|
var feed = document.getElementById('activity-feed');
|
|
feed.innerHTML = '';
|
|
var activities = [];
|
|
|
|
if (data.exercisesDone.length > 0) {
|
|
activities.push({ icon: '✅', text: 'Completed ' + data.exercisesDone.length + ' exercise' + (data.exercisesDone.length > 1 ? 's' : ''), xp: data.exercisesDone.length * 10 });
|
|
}
|
|
if (data.testsDone > 0) {
|
|
activities.push({ icon: '📝', text: 'Took ' + data.testsDone + ' test' + (data.testsDone > 1 ? 's' : ''), xp: 15 + data.bestTestScore * 2 });
|
|
}
|
|
if (data.wordsListened > 0) {
|
|
activities.push({ icon: '🔊', text: 'Practiced ' + data.wordsListened + ' word' + (data.wordsListened > 1 ? 's' : '') + ' with pronunciation', xp: Math.floor(data.wordsListened / 5) * 5 });
|
|
}
|
|
if (data.readingDone && data.readingDone.length > 0) {
|
|
activities.push({ icon: '📚', text: 'Read ' + data.readingDone.length + ' text' + (data.readingDone.length > 1 ? 's' : ''), xp: 0 });
|
|
}
|
|
|
|
if (activities.length === 0) {
|
|
feed.innerHTML = '<div class="activity-item"><div class="act-icon">👋</div><div class="act-text">Complete exercises and tests to see your activity here!</div></div>';
|
|
} else {
|
|
activities.forEach(function(a) {
|
|
var div = document.createElement('div');
|
|
div.className = 'activity-item';
|
|
div.innerHTML = '<div class="act-icon">' + a.icon + '</div><div class="act-text">' + a.text + '</div><div class="act-xp">+' + a.xp + ' XP</div>';
|
|
feed.appendChild(div);
|
|
});
|
|
|
|
// Total
|
|
var totalDiv = document.createElement('div');
|
|
totalDiv.className = 'activity-item';
|
|
totalDiv.style.borderTop = '2px solid var(--gray-100)';
|
|
totalDiv.style.paddingTop = '16px';
|
|
totalDiv.style.marginTop = '8px';
|
|
totalDiv.innerHTML = '<div class="act-icon">⭐</div><div class="act-text"><strong>Total XP</strong></div><div class="act-xp" style="font-size:18px;">' + data.xp + ' XP</div>';
|
|
feed.appendChild(totalDiv);
|
|
}
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|