File size: 1,688 Bytes
afbe749
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
document.addEventListener('DOMContentLoaded', () => {
    // Respect any early-applied theme (set inline in head) to avoid flicker
    const initialTheme = document.documentElement.getAttribute('data-theme') || localStorage.getItem('theme') || 'light';
    document.documentElement.setAttribute('data-theme', initialTheme);

    // Avoid creating duplicate toggle if one already exists
    if (document.querySelector('.theme-toggle')) return;

    // Create and insert theme toggle button
    const themeToggle = document.createElement('button');
    themeToggle.className = 'theme-toggle';
    themeToggle.setAttribute('aria-label', 'Toggle dark mode');

    // Set initial accessible label/title/icon state
    themeToggle.title = initialTheme === 'dark' ? 'Mode clair' : 'Mode sombre';

    // Find the nav-links container and insert the button
    const navLinks = document.querySelector('.nav-links');
    if (navLinks) {
        navLinks.appendChild(themeToggle);
    }

    // Toggle theme function
    const toggleTheme = () => {
        const currentTheme = document.documentElement.getAttribute('data-theme') || 'light';
        const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
        
        document.documentElement.setAttribute('data-theme', newTheme);
        localStorage.setItem('theme', newTheme);
        themeToggle.title = newTheme === 'dark' ? 'Mode clair' : 'Mode sombre';

        // Add animation class
        themeToggle.classList.add('theme-toggle-animation');
        setTimeout(() => themeToggle.classList.remove('theme-toggle-animation'), 300);
    };

    // Add click event listener
    themeToggle.addEventListener('click', toggleTheme);
});