(function ($, document, Dashboard, LibraryBrowser) { function notifications() { var self = this; self.getNotificationsSummaryPromise = null; self.total = 0; self.getNotificationsSummary = function () { var apiClient = ConnectionManager.currentApiClient(); if (!apiClient) { return; } self.getNotificationsSummaryPromise = self.getNotificationsSummaryPromise || apiClient.getNotificationSummary(Dashboard.getCurrentUserId()); return self.getNotificationsSummaryPromise; }; self.updateNotificationCount = function () { if (!Dashboard.getCurrentUserId()) { return; } var promise = self.getNotificationsSummary(); if (!promise) { return; } promise.done(function (summary) { var item = $('.btnNotificationsInner').removeClass('levelNormal').removeClass('levelWarning').removeClass('levelError').html(summary.UnreadCount); if (summary.UnreadCount) { item.addClass('level' + summary.MaxUnreadNotificationLevel); } }); }; self.showNotificationsFlyout = function () { var html = '
'; html += '

'; html += '' + Globalize.translate('HeaderNotifications') + ''; html += '' + Globalize.translate('ButtonViewNotifications') + ''; html += '

'; html += '
'; html += '
Loading...'; html += '
'; html += '
'; html += '
'; $(document.body).append(html); $('.notificationsFlyout').panel({}).trigger('create').panel("open").on("panelclose", function () { $(this).off("panelclose").remove(); }); self.isFlyout = true; var startIndex = 0; var limit = 40; var elem = $('.notificationsFlyoutlist'); refreshNotifications(startIndex, limit, elem, null, false).done(function() { self.markNotificationsRead([]); }); }; self.markNotificationsRead = function (ids, callback) { ApiClient.markNotificationsRead(Dashboard.getCurrentUserId(), ids, true).done(function () { self.getNotificationsSummaryPromise = null; self.updateNotificationCount(); if (callback) { callback(); } }); }; self.showNotificationsList = function (startIndex, limit, elem, btn) { refreshNotifications(startIndex, limit, elem, btn, true); }; } function refreshNotifications(startIndex, limit, elem, btn, showPaging) { var apiClient = ConnectionManager.currentApiClient(); if (apiClient) { return apiClient.getNotifications(Dashboard.getCurrentUserId(), { StartIndex: startIndex, Limit: limit }).done(function (result) { listUnreadNotifications(result.Notifications, result.TotalRecordCount, startIndex, limit, elem, btn, showPaging); }); } } function listUnreadNotifications(list, totalRecordCount, startIndex, limit, elem, btn, showPaging) { if (!totalRecordCount) { elem.html('

' + Globalize.translate('LabelNoUnreadNotifications') + '

'); if (btn) { btn.hide(); } return; } Notifications.total = totalRecordCount; if (btn) { if (list.filter(function (n) { return !n.IsRead; }).length) { btn.show(); } else { btn.hide(); } } var html = ''; if (totalRecordCount > limit && showPaging === true) { var query = { StartIndex: startIndex, Limit: limit }; html += LibraryBrowser.getPagingHtml(query, totalRecordCount, false, limit, false); } for (var i = 0, length = list.length; i < length; i++) { var notification = list[i]; html += getNotificationHtml(notification); } elem.html(html).trigger('create'); } function getNotificationHtml(notification) { var html = ''; var cssClass = notification.IsRead ? "flyoutNotification" : "flyoutNotification unreadFlyoutNotification"; html += '
'; html += '
'; html += getImageHtml(notification); html += '
'; html += '
'; html += '

' + notification.Name + '

'; html += '

' + humane_date(notification.Date) + '

'; if (notification.Description) { html += '

' + notification.Description + '

'; } if (notification.Url) { html += '

' + Globalize.translate('ButtonMoreInformation') + '

'; } html += '
'; html += '
'; return html; } function getImageHtml(notification) { if (notification.Level == "Error") { return '
'; } if (notification.Level == "Warning") { return '
'; } return '
'; } window.Notifications = new notifications(); $(document).on('headercreated', function (e) { if (ConnectionManager.currentApiClient()) { $('
0
').insertAfter($('.headerSearchButton')).on('click', Notifications.showNotificationsFlyout); Notifications.updateNotificationCount(); } }); function initializeApiClient(apiClient) { $(apiClient).on("websocketmessage", function (e, msg) { if (msg.MessageType === "NotificationUpdated" || msg.MessageType === "NotificationAdded" || msg.MessageType === "NotificationsMarkedRead") { Notifications.getNotificationsSummaryPromise = null; Notifications.updateNotificationCount(); } }); } $(ConnectionManager).on('apiclientcreated', function (e, apiClient) { initializeApiClient(apiClient); }); })(jQuery, document, Dashboard, LibraryBrowser);