/** * Handle multi channel notifications * */ 'use strict'; /* globals apiRequest animate */ checkMessages(); // start to look for messages function checkMessages() { let notifications = document.getElementById('notifications'); if (notifications && notifications.childNodes.length === 0) { let dataOrigin = notifications.getAttribute('data'); getMessages(dataOrigin); } } function getMessages(dataOrigin) { let apiEndpoint = '/api/notification/'; let responseData = apiRequest(apiEndpoint, 'GET'); let messages = buildMessage(responseData, dataOrigin); if (messages.length > 0) { // restart itself setTimeout(() => getMessages(dataOrigin), 500); } } function buildMessage(responseData, dataOrigin) { // filter relevant messages let messages; if (dataOrigin) { messages = responseData.filter(function (value) { return dataOrigin.split(' ').includes(value.group.split(':')[0]); }, dataOrigin); } else { messages = responseData; } let notifications = document.getElementById('notifications'); let currentNotifications = notifications.childElementCount; for (let i = 0; i < messages.length; i++) { const messageData = messages[i]; if (!document.getElementById(messageData.id)) { let messageBox = buildPlainBox(messageData); notifications.appendChild(messageBox); } updateMessageBox(messageData); if (messageData.group.startsWith('download:')) { animateIcons(messageData.group); } } clearNotifications(responseData); if (currentNotifications > 0 && messages.length === 0) { location.replace(location.href); } return messages; } function buildPlainBox(messageData) { let messageBox = document.createElement('div'); messageBox.classList.add(messageData.level, 'notification'); messageBox.id = messageData.id; messageBox.innerHTML = `
`; return messageBox; } function updateMessageBox(messageData) { let messageBox = document.getElementById(messageData.id); let children = messageBox.children; children[0].textContent = messageData.title; children[1].innerHTML = messageData.messages.join('