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);