english-easy/progress.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>&copy; 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>