Marking clicked links as visited

by anilsardemann

JavaScript

document.addEventListener('DOMContentLoaded', () => {
    const EXPIRATION_TIME = 7 * 24 * 60 * 60 * 1000;

    function saveVisitedLink(url) {
        let visitedLinks = JSON.parse(localStorage.getItem('visitedLinks')) || [];
        const timestamp = new Date().getTime();
        visitedLinks.push({ url, timestamp });
        localStorage.setItem('visitedLinks', JSON.stringify(visitedLinks));
    }

    function removeExpiredLinks() {
        let visitedLinks = JSON.parse(localStorage.getItem('visitedLinks')) || [];
        const now = new Date().getTime();
        visitedLinks = visitedLinks.filter(link => now - link.timestamp < EXPIRATION_TIME);
        localStorage.setItem('visitedLinks', JSON.stringify(visitedLinks));
    }

    function markVisitedLinks() {
        let visitedLinks = JSON.parse(localStorage.getItem('visitedLinks')) || [];
        document.querySelectorAll('YOURCLASSNAME').forEach(link => {
            if (visitedLinks.some(visited => visited.url === link.href)) {
                link.classList.add('visited');
            }
        });
    }

    document.querySelectorAll('YOURCLASSNAME').forEach(link => {
        link.addEventListener('click', () => {
            saveVisitedLink(link.href);
            removeExpiredLinks();
            markVisitedLinks();
        });
    });

    removeExpiredLinks();
    markVisitedLinks();