mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-08-24 02:41:42 +02:00
69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
/* global notificationUpdateSettings, fetchGet */
|
|
|
|
/**
|
|
* This script refreshed the notification icon in the top menu
|
|
* on a regular basis so to keep the user apprised about newly arrived
|
|
* notifications without having to reload the page.
|
|
*
|
|
* The refresh rate can be changed via the Django setting NOTIFICATIONS_REFRESH_TIME.
|
|
* See documentation for details.
|
|
*/
|
|
$(() => {
|
|
'use strict';
|
|
|
|
const notificationRefreshTime = notificationUpdateSettings.refreshTime;
|
|
const userNotificationCountViewUrl = notificationUpdateSettings.userNotificationsCountViewUrl;
|
|
const elementNotificationIcon = $('#menu_item_notifications .fa-bell');
|
|
|
|
/**
|
|
* Update the notification icon in the top menu
|
|
*/
|
|
const updateNotificationIcon = () => {
|
|
fetchGet({url: userNotificationCountViewUrl})
|
|
.then((data) => {
|
|
elementNotificationIcon.toggleClass('text-danger', data.unread_count > 0);
|
|
})
|
|
.catch((error) => {
|
|
console.log(`Failed to load HTMl to render notifications item. Error: ${error.message}`);
|
|
});
|
|
};
|
|
|
|
let myInterval;
|
|
|
|
/**
|
|
* Activate automatic refresh every x seconds
|
|
*/
|
|
const activateIconUpdate = () => {
|
|
if (notificationRefreshTime > 0) {
|
|
myInterval = setInterval(
|
|
updateNotificationIcon, notificationRefreshTime * 1000
|
|
);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Deactivate automatic refresh
|
|
*/
|
|
const deactivateIconUpdate = () => {
|
|
if ((notificationRefreshTime > 0) && (typeof myInterval !== 'undefined')) {
|
|
clearInterval(myInterval);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Refresh only on active browser tabs
|
|
*/
|
|
$(window)
|
|
// Tab active
|
|
.focus(() => {
|
|
activateIconUpdate();
|
|
})
|
|
// Tab inactive
|
|
.blur(function() {
|
|
deactivateIconUpdate();
|
|
});
|
|
|
|
// Initial start of refreshing on script loading
|
|
activateIconUpdate();
|
|
});
|