%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/static/assets/f97692f9/js/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/static/assets/f97692f9/js/humhub.notification.js |
/** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ humhub.module('notification', function (module, require, $) { var util = require('util'); var object = util.object; var string = util.string; var Widget = require('ui.widget').Widget; var event = require('event'); var client = require('client'); var view = require('ui.view'); var user = require('user'); var notificationIds = []; var notificationGroups = []; module.initOnPjaxLoad = true; var NotificationDropDown = function (node, options) { Widget.call(this, node, options); }; object.inherits(NotificationDropDown, Widget); var OverviewWidget = function (node, options) { Widget.call(this, node, options); }; object.inherits(OverviewWidget, Widget); OverviewWidget.prototype.init = function() { var that = this; event.on('humhub:notification:filterApplied', function (evt, form) { evt.preventDefault(); that.reload({data: $(form).serializeArray()}); }); }; NotificationDropDown.prototype.init = function (update) { this.isOpen = false; this.lastEntryLoaded = false; this.lastEntryId = 0; this.originalTitle = document.title; this.initDropdown(); this.handleResult(update); //this.sendDesktopNotifications(update); var that = this; event.on('humhub:modules:notification:live:NewNotification', function (evt, events, update) { var filteredEvents = that.filterEvents(events); var count = (that.$.data('notification-count')) ? parseInt(that.$.data('notification-count')) + filteredEvents.length : filteredEvents.length; that.updateCount(count); that.sendDesktopNotifications(events, update.lastSessionTime); }); }; NotificationDropDown.prototype.filterEvents = function (events) { if(!events || !events.length) { return; } var result = []; events.forEach(function(event) { if(notificationIds.indexOf(event.data.notificationId) < 0) { var groupId = event.data.notificationGroup; // We filter out group ids which were already handled if(!groupId || !groupId.length || notificationGroups.indexOf(groupId) < 0) { result.push(event); notificationGroups.push(groupId); } } }); return result; }; NotificationDropDown.prototype.initDropdown = function () { this.$entryList = this.$.find('ul.media-list'); this.$dropdown = this.$.find('#dropdown-notifications'); var that = this; this.$entryList.scroll(function () { var containerHeight = that.$entryList.height(); var scrollHeight = that.$entryList.prop("scrollHeight"); var currentScrollPosition = that.$entryList.scrollTop(); // load more activites if current scroll position is near scroll height if (currentScrollPosition >= (scrollHeight - containerHeight - 1)) { if (!that.lastEntryLoaded) { that.loadEntries(); } } }); }; NotificationDropDown.prototype.toggle = function () { // Always reset the loading settings so we reload the whole dropdown. this.lastEntryLoaded = false; this.lastEntryId = 0; // Since the handler will be called before the bootstrap trigger it's an open event if the dropdown is not visible yet this.isOpen = !this.$dropdown.is(':visible'); if (this.isOpen) { this.$entryList.empty().hide(); this.loadEntries(); } }; NotificationDropDown.prototype.loadEntries = function () { if (this.loading) { return; } var that = this; this.loader(); client.get(module.config.loadEntriesUrl, {data: {from: this.lastEntryId}}) .then($.proxy(this.handleResult, this)) .catch(_errorHandler) .finally(function () { that.loader(false); that.loading = false; }); }; NotificationDropDown.prototype.handleResult = function (response) { if (!response.counter) { this.$entryList.append(string.template(module.templates.placeholder, {'text': module.text('placeholder')})); } else { this.lastEntryId = response.lastEntryId; this.$entryList.append(response.output); $('span.time').timeago(); } this.parseNotifications(); this.updateCount(parseInt(response.newNotifications)); this.lastEntryLoaded = (response.counter < 6); this.$entryList.fadeIn('fast'); }; NotificationDropDown.prototype.parseNotifications = function () { this.$entryList.find('[data-notification-id]').each(function() { var $this = $(this); var id = $this.data('notificationId'); if(id && notificationIds.indexOf(id) < 0) { notificationIds.push(id); } var groupId = $this.data('notificationGroup'); if(notificationGroups.indexOf(groupId) < 0) { notificationGroups.push($this.data('notificationGroup')); } }); }; NotificationDropDown.prototype.updateCount = function ($count) { if (this.$.data('notification-count') === $count) { if(!$count) { $('#badge-notifications').hide(); } return; } $('#badge-notifications').hide(); event.trigger('humhub:notification:updateCount', [$count]); if (!$count) { updateTitle(false); $('#badge-notifications').html('0'); $('#mark-seen-link').hide(); $('#icon-notifications .fa').removeClass("animated swing"); } else { updateTitle($count); $('#badge-notifications').html($count); $('#mark-seen-link').show(); $('#badge-notifications').fadeIn('fast'); // Clone icon to retrigger animation var $icon = $('#icon-notifications .fa'); var $clone = $icon.clone(); $clone.addClass("animated swing"); $icon.replaceWith($clone); } this.$.data('notification-count', $count); }; NotificationDropDown.prototype.sendDesktopNotifications = function (response, lastSessionTime) { if (!response) { return; } if (!module.config.sendDesktopNotifications) { return; } if (response.text) { // Single Notification module.sendDesktopNotifiaction(response.text); } else if (response.notifications) { // Multiple Notifications var $notifications = response.notifications; for (var i = 0; i < $notifications.length; i++) { module.sendDesktopNotifiaction($notifications[i]); } } else if (object.isArray(response)) { // Live events $.each(response, function (i, liveEvent) { if (lastSessionTime && lastSessionTime > liveEvent.data.ts) { return; // continue } if (liveEvent.data && liveEvent.data.text) { module.sendDesktopNotifiaction(liveEvent.data.text); } }); } }; var getNotificationCount = function() { var widget = NotificationDropDown.instance('#notification_widget'); return widget.$.data('notification-count'); }; var sendDesktopNotifiaction = function (body, icon) { icon = icon || module.config.icon; if (body && body.length) { notify.createNotification("Notification", {body: body, icon: icon}); } }; var _errorHandler = function (e) { module.log.error(e, true); }; NotificationDropDown.prototype.loader = function (show) { if (show !== false) { this.$.find('#loader_notifications').show(); } else { this.$.find('#loader_notifications').hide(); } }; NotificationDropDown.prototype.markAsSeen = function (evt) { var that = this; return client.post(evt).then(function (response) { $('#badge-notifications').hide(); $('#mark-seen-link').hide(); that.updateCount(0); notificationIds = []; notificationGroups = []; }).catch(function (e) { module.log.error(e, true); }); }; /** * Global action handler (used in overview page). * * @param {type} evt * @returns {undefined} */ var markAsSeen = function (evt) { var widget = NotificationDropDown.instance('#notification_widget'); widget.markAsSeen(evt).then(function () { location.reload(); }); }; var updateTitle = function ($count) { if ($count) { document.title = '(' + $count + ') ' + view.getState().title; } else if ($count === false) { document.title = view.getState().title; } }; module.templates = { placeholder: '<li class="placeholder">{text}</li>' }; var init = function ($pjax) { if (user.isGuest()) { return; } if (!$('#notification_widget').length) { return; } updateTitle($('#notification_widget').data('notification-count')); initOverviewPage(); if (!$pjax && view.isLarge()) { $("#dropdown-notifications ul.media-list").niceScroll({ cursorwidth: "7", cursorborder: "", cursorcolor: "#555", cursoropacitymax: "0.2", nativeparentscrolling: false, railpadding: {top: 0, right: 3, left: 0, bottom: 0} }); $("#dropdown-notifications ul.media-list").on('touchmove', function(evt) { evt.preventDefault(); }); } module.menu = NotificationDropDown.instance('#notification_widget'); }; var handleFilterChanges = function () { var filterForm = $("#notification_overview_filter"); filterForm.on('click', 'label', function(evt) { evt.preventDefault(); var checkbox = $(this).children().first(); checkbox.prop("checked", !checkbox.prop( "checked")); event.trigger('humhub:notification:filterApplied', filterForm); }); }; var initOverviewPage = function () { handleFilterChanges(); if ($('#notification_overview_list').length) { OverviewWidget.instance('#notification_overview_list'); } if ($('#notification_overview_list').length) { if (!$('#notification_overview_list li.new').length) { $('#notification_overview_markseen').hide(); } } }; module.export({ init: init, markAsSeen: markAsSeen, sendDesktopNotifiaction: sendDesktopNotifiaction, getNotificationCount: getNotificationCount, NotificationDropDown: NotificationDropDown, OverviewWidget: OverviewWidget }); });