gaiaonline announcement remover

announcement are awful.

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         gaiaonline announcement remover
// @version      1.1
// @description  announcement are awful.
// @author       don't @ me bro
// @match        *://www.gaiaonline.com/*
// @grant        none
// @run-at       document-start
// @namespace https://greasyfork.org/users/1262821
// ==/UserScript==

(function() {
    'use strict';

    function filterAndRemoveDivs() {
    const notifyBubble = document.getElementById('notifyBubbleContainer');
    if (notifyBubble) {
        const messageContent = notifyBubble.querySelector('.messageContent');
        if (messageContent) {
            const announcements = messageContent.querySelectorAll('.notify_announcements');
            announcements.forEach(announcement => announcement.parentNode.removeChild(announcement));
            const remainingDivs = messageContent.querySelectorAll('li');
            if (remainingDivs.length === 0) {
                notifyBubble.parentNode.removeChild(notifyBubble);
            }
        }
    }
}


    const observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (!mutation.addedNodes) return;

            for (let i = 0; i < mutation.addedNodes.length; i++) {
                if (mutation.addedNodes[i].nodeType === Node.ELEMENT_NODE) {
                    if (mutation.addedNodes[i].id === 'notifyBubbleContainer' ||
                        mutation.addedNodes[i].querySelector('.notify_announcements')) {
                        filterAndRemoveDivs();
                        break;
                    }
                }
            }
        });
    });


    function startObserving() {
        if (document.body) {
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
            filterAndRemoveDivs();
        } else {
            setTimeout(startObserving, 10);
        }
    }

    startObserving();
})();