Neopets Topic Tracker

Highlight visited topics on Neopets forums

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Neopets Topic Tracker
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Highlight visited topics on Neopets forums
// @author       Moxsee
// @match        https://www.neopets.com/neoboards/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Function to get the visited topics from localStorage
    function getVisitedTopics() {
        let visited = localStorage.getItem('neopetsVisitedTopics');
        return visited ? JSON.parse(visited) : [];
    }

    // Function to save visited topics to localStorage
    function saveVisitedTopic(topicId) {
        let visited = getVisitedTopics();
        if (!visited.includes(topicId)) {
            visited.push(topicId);
            localStorage.setItem('neopetsVisitedTopics', JSON.stringify(visited));
        }
    }

    // Function to highlight visited topics
    function highlightVisitedTopics() {
        const visited = getVisitedTopics();
        visited.forEach(topicId => {
            const topicElement = document.querySelector(`a[href*="topic=${topicId}"]`);
            if (topicElement) {
                topicElement.style.backgroundColor = '#E6E6FA'; // Highlight color
                topicElement.style.color = '#000'; // Text color
            }
        });
    }

    // Add an event listener to track when a topic is clicked
    function trackTopicVisit() {
        const topics = document.querySelectorAll('a[href*="topic="]');
        topics.forEach(topic => {
            topic.addEventListener('click', function() {
                const topicId = this.href.match(/topic=(\d+)/)[1]; // Extract the topic ID
                saveVisitedTopic(topicId);
            });
        });
    }

    // Run highlighting and tracking functions when the page loads or changes
    document.addEventListener('DOMContentLoaded', function() {
        highlightVisitedTopics();
        trackTopicVisit();
    });

    // Also observe for dynamically loaded content
    const observer = new MutationObserver(() => {
        highlightVisitedTopics();
        trackTopicVisit();
    });

    observer.observe(document.body, { childList: true, subtree: true });
})();