class SubjectSelector extends HTMLElement {
connectedCallback() {
this.attachShadow({ mode: 'open' });
this.shadowRoot.innerHTML = `
`;
const btn = this.shadowRoot.getElementById('selectorBtn');
const dropdown = this.shadowRoot.getElementById('dropdown');
const searchInput = this.shadowRoot.getElementById('searchInput');
const subjectList = this.shadowRoot.getElementById('subjectList');
// Toggle dropdown
btn.addEventListener('click', () => {
dropdown.classList.toggle('show');
if (dropdown.classList.contains('show') && subjectList.innerHTML === '') {
this.loadSubjects();
}
});
// Close dropdown when clicking outside
document.addEventListener('click', (e) => {
if (!this.shadowRoot.contains(e.target)) {
dropdown.classList.remove('show');
}
});
// Search functionality
searchInput.addEventListener('input', () => {
const searchTerm = searchInput.value.toLowerCase();
const items = subjectList.querySelectorAll('.subject-item');
items.forEach(item => {
const text = item.textContent.toLowerCase();
if (text.includes(searchTerm)) {
item.style.display = 'block';
} else {
item.style.display = 'none';
}
});
});
// Initialize Feather icons
if (window.feather) {
window.feather.replace({ 'stroke-width': 2 });
}
}
loadSubjects() {
const subjectList = this.shadowRoot.getElementById('subjectList');
// Common academic subjects
const subjects = [
{ name: "Mathematics", level: "basic", path: "math.html?level=basic" },
{ name: "Mathematics", level: "intermediate", path: "math.html?level=intermediate" },
{ name: "Mathematics", level: "advanced", path: "math.html?level=advanced" },
{ name: "Physics", level: "basic", path: "science.html?subject=physics&level=basic" },
{ name: "Physics", level: "intermediate", path: "science.html?subject=physics&level=intermediate" },
{ name: "Chemistry", level: "basic", path: "science.html?subject=chemistry&level=basic" },
{ name: "Chemistry", level: "intermediate", path: "science.html?subject=chemistry&level=intermediate" },
{ name: "Biology", level: "basic", path: "science.html?subject=biology&level=basic" },
{ name: "Biology", level: "intermediate", path: "science.html?subject=biology&level=intermediate" },
{ name: "Computer Science", level: "basic", path: "tech.html?subject=cs&level=basic" },
{ name: "Computer Science", level: "intermediate", path: "tech.html?subject=cs&level=intermediate" },
{ name: "History", level: "basic", path: "history.html?level=basic" },
{ name: "History", level: "intermediate", path: "history.html?level=intermediate" },
{ name: "Geography", level: "basic", path: "geography.html?level=basic" },
{ name: "Art", level: "basic", path: "art.html?level=basic" },
{ name: "Music", level: "basic", path: "music.html?level=basic" },
{ name: "Literature", level: "basic", path: "literature.html?level=basic" },
{ name: "Philosophy", level: "basic", path: "philosophy.html?level=basic" },
{ name: "Economics", level: "basic", path: "economics.html?level=basic" },
{ name: "Psychology", level: "basic", path: "psychology.html?level=basic" },
{ name: "Spanish", level: "basic", path: "languages.html?lang=spanish&level=basic" },
{ name: "French", level: "basic", path: "languages.html?lang=french&level=basic" },
{ name: "German", level: "basic", path: "languages.html?lang=german&level=basic" },
{ name: "Chinese", level: "basic", path: "languages.html?lang=chinese&level=basic" }
];
subjectList.innerHTML = subjects.map(subject => `
${subject.name} (${subject.level})
`).join('');
// Initialize Feather icons again after loading content
if (window.feather) {
window.feather.replace({ 'stroke-width': 2 });
}
}
}
customElements.define('subject-selector', SubjectSelector);