LA_8 / index.html
Nra's picture
Update index.html
755e60a verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exam Chapter Viewer</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background-color: #f0f2f5;
color: #333;
display: flex;
justify-content: center;
align-items: flex-start;
min-height: 100vh;
margin: 0;
padding: 40px;
}
.container {
width: 90%;
max-width: 600px;
background-color: #ffffff;
padding: 30px;
border-radius: 12px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
color: #1c1e21;
margin-bottom: 30px;
}
.controls {
display: flex;
gap: 20px;
margin-bottom: 30px;
}
select {
width: 100%;
padding: 12px;
font-size: 16px;
border: 1px solid #dddfe2;
border-radius: 6px;
cursor: pointer;
}
select:disabled {
background-color: #e4e6eb;
cursor: not-allowed;
}
#chapter-links a {
display: block;
padding: 12px;
margin-bottom: 8px;
background-color: #e7f3ff;
color: #1877f2;
text-decoration: none;
border-radius: 6px;
transition: background-color 0.2s, transform 0.2s;
}
#chapter-links a:hover {
background-color: #d0e7ff;
transform: translateY(-2px);
}
</style>
</head>
<body>
<div class="container">
<h1>📚 Lakshita's Learning App - Class 8</h1>
<div class="controls">
<select id="exam-select">
<option value="">-- Select Exam --</option>
</select>
<select id="subject-select" disabled>
<option value="">-- Select Subject --</option>
</select>
</div>
<div id="chapter-links"></div>
<div style="margin-top: 40px; padding: 20px; border-top: 2px solid #eee; text-align: center;">
<h2>✨ How to Use This Magic Study Machine! ✨</h2>
<p>Tired of searching for notes? Just follow this super-easy recipe for success!</p>
<ol style="list-style: none; padding: 0;">
<li style="font-size: 18px; margin-bottom: 10px;"><b>Step 1️⃣:</b> Pick your exam (like FA2 or SA1) from the first box.</li>
<li style="font-size: 18px; margin-bottom: 10px;"><b>Step 2️⃣:</b> Choose your subject... are you a Biology brainiac 🧠 or a Physics pro ⚛️?</li>
<li style="font-size: 18px;"><b>Step 3️⃣:</b> BAM! 🚀 All the chapters will appear below. Just click to open!</li>
</ol>
<p style="font-weight: bold; margin-top: 20px;">Happy studying! You've got this! 😎</p>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
const examSelect = document.getElementById('exam-select');
const subjectSelect = document.getElementById('subject-select');
const chapterLinksDiv = document.getElementById('chapter-links');
let fileData = {}; // To store parsed data like { "FA2": { "BIO": [...] } }
// 1. Fetch the list of files
fetch('filelist.json')
.then(response => {
if (!response.ok) {
throw new Error("Could not find filelist.json. Please run the python script first.");
}
return response.json();
})
.then(filenames => {
// 2. Parse filenames and structure the data
filenames.forEach(name => {
const parts = name.replace('.html', '').split('_');
if (parts.length < 3) return;
const exam = parts[0];
const subject = parts[1];
if (!fileData[exam]) {
fileData[exam] = {};
}
if (!fileData[exam][subject]) {
fileData[exam][subject] = [];
}
fileData[exam][subject].push(name);
});
// 3. Populate the first dropdown (Exams)
const exams = Object.keys(fileData).sort();
exams.forEach(exam => {
const option = document.createElement('option');
option.value = exam;
option.textContent = exam;
examSelect.appendChild(option);
});
})
.catch(error => {
chapterLinksDiv.innerHTML = `<p style="color:red;"><b>Error:</b> ${error.message}</p>`;
console.error(error);
});
// 4. Handle Exam selection change
examSelect.addEventListener('change', () => {
const selectedExam = examSelect.value;
// Reset subject dropdown and links
subjectSelect.innerHTML = '<option value="">-- Select Subject --</option>';
subjectSelect.disabled = true;
chapterLinksDiv.innerHTML = '';
if (selectedExam && fileData[selectedExam]) {
const subjects = Object.keys(fileData[selectedExam]).sort();
subjects.forEach(subject => {
const option = document.createElement('option');
option.value = subject;
option.textContent = subject;
subjectSelect.appendChild(option);
});
subjectSelect.disabled = false;
}
});
// 5. Handle Subject selection change
subjectSelect.addEventListener('change', () => {
const selectedExam = examSelect.value;
const selectedSubject = subjectSelect.value;
chapterLinksDiv.innerHTML = ''; // Clear previous links
if (selectedExam && selectedSubject && fileData[selectedExam][selectedSubject]) {
const files = fileData[selectedExam][selectedSubject].sort();
files.forEach(filename => {
const chapterPart = filename.replace('.html', '').split('_').slice(2).join(' ');
const displayName = chapterPart.replace("CH", "Chapter").trim();
const link = document.createElement('a');
link.href = `data/${filename}`;
link.textContent = displayName;
link.target = '_blank'; // Open link in a new tab
chapterLinksDiv.appendChild(link);
});
}
});
});
</script>
</body>
</html>