Просмотр файла public/themes/default/src/js/messages.js

Размер файла: 1.6Kb
$(document).ready(function () {
    const INTERVAL = 60000;
    const SOUND = new Audio('/assets/ding.mp3');
    const $item = $('.js-messages-block .app-nav__item');
    const originalTitle = document.title.trim();

    function updateBadge(data) {
        if (!$item.length || !data?.success || data.countMessages <= 0) return;

        const count = data.countMessages;
        const badge = $item.find('.badge');

        badge.length ? badge.text(count) : $item.append(`<span class="badge bg-notify">${count}</span>`);

        const prevCount = parseInt(localStorage.getItem('messageCount') || '0');

        if (count > prevCount) {
            SOUND.play().catch(() => {});
            document.title = `🔴 ${originalTitle}`;
        }

        localStorage.setItem('messageCount', count);
    }

    $(window).on('storage', e => {
        if (e.originalEvent.key === 'messageData') {
            updateBadge(JSON.parse(e.originalEvent.newValue));
        }
    });

    setInterval(() => {
        const now = Date.now();
        const lastReq = parseInt(localStorage.getItem('messageTime') || '0');

        if (now - lastReq < INTERVAL - 100) return;

        if (localStorage.getItem('messageLock')) return;
        localStorage.setItem('messageLock', '1');

        localStorage.setItem('messageTime', now);

        $.get('/messages/new').then(data => {
            localStorage.setItem('messageData', JSON.stringify(data));
            updateBadge(data);
            localStorage.removeItem('messageLock');
        }).catch(() => {
            localStorage.removeItem('messageLock');
        });
    }, INTERVAL);
});