diff --git a/src/scripts/tutti/5_1_notifications.js b/src/scripts/tutti/5_1_notifications.js index 8e006d0d..ac2ef93d 100644 --- a/src/scripts/tutti/5_1_notifications.js +++ b/src/scripts/tutti/5_1_notifications.js @@ -3,6 +3,18 @@ var unread_on_load = false; var unread_new = 0; var first_load = false; +var $notifications = $('#notifications'); +var $notification_pop = $('#notification-pop'); +var $notifications_count = $('#notifications-count'); +var $notifications_toggle = $('#notifications-toggle'); + + +function clearNotificationIcon(){ + $notifications_count.html(''); + $notifications_toggle.removeClass('has-notifications'); +} + + // getNotifications by fetching json every X seconds function getNotifications(){ $.getJSON( "/notifications/", function( data ) { @@ -83,14 +95,15 @@ function getNotifications(){ unread_on_load = unread_new; // Display notifications count - $('#notifications-count').addClass('bloom'); - $('#notifications-count').html('' + unread_new + ''); - $('#notifications-toggle i').removeClass('pi-notifications-none').addClass('pi-notifications-active'); + $notifications_count.html('' + unread_new + ''); + $notifications_toggle.addClass('has-notifications'); + // Let Pillar know the notifications total has been updated. + // Used for example to update of the page title via updateTitle(); $('body').trigger('pillar:notifications-total-updated', unread_new); + } else { - $('#notifications-count').removeAttr('class'); - $('#notifications-toggle i').removeClass('pi-notifications-active').addClass('pi-notifications-none'); + clearNotificationIcon(); }; checkPopNotification( @@ -111,7 +124,7 @@ function getNotifications(){ }; // if items // Populate the list - $('ul#notifications-list').html( items.join('')); + $('ul#notifications-list').html(items.join('')); }) .done(function(){ // clear the counter @@ -122,22 +135,22 @@ function getNotifications(){ // Used when we click somewhere in the page function hideNotifications(){ - $('#notifications').hide(); - $('#notifications-toggle').removeClass('active'); + $notifications.hide(); + $notifications_toggle.removeClass('active'); }; function popNotification(){ // pop in! - $("#notification-pop").addClass('in'); + $notification_pop.addClass('in'); // After 10s, add a class to make it pop out setTimeout(function(){ - $("#notification-pop").addClass('out'); + $notification_pop.addClass('out'); // And a second later, remove all classes setTimeout(function(){ - $("#notification-pop").removeAttr('class'); + $notification_pop.removeAttr('class'); }, 1000); }, 10000); @@ -152,8 +165,8 @@ function checkPopNotification(id,username,username_avatar,action,date,context_ob // If there's new content if (unread_new > unread_on_load){ // Fill in the urls for redirect on click, and mark-read - $("#notification-pop").attr('data-url', object_url); - $("#notification-pop").attr('data-read-toggle', '/notifications/' + id + '/read-toggle'); + $notification_pop.attr('data-url', object_url); + $notification_pop.attr('data-read-toggle', '/notifications/' + id + '/read-toggle'); // The text in the pop var text = '' + username + ' '; text += action + ' '; @@ -161,8 +174,8 @@ function checkPopNotification(id,username,username_avatar,action,date,context_ob text += '' + date + ''; // Fill the html - $('#notification-pop .nc-text').html(text); - $('#notification-pop .nc-avatar img').attr('src', username_avatar); + $notification_pop.find('.nc-text').html(text); + $notification_pop.find('.nc-avatar img').attr('src', username_avatar); // pop in! popNotification(); @@ -176,14 +189,14 @@ function checkPopNotification(id,username,username_avatar,action,date,context_ob function notificationsResize(){ var height = $(window).height() - 80; - if ($('#notifications').height() > height){ - $('#notifications').css({ + if ($notifications.height() > height){ + $notifications.css({ 'max-height' : height / 2, 'overflow-y' : 'scroll' } ); } else { - $('#notifications').css({ + $notifications.css({ 'max-height' : '1000%', 'overflow-y' : 'initial' } @@ -193,20 +206,21 @@ function notificationsResize(){ $(function() { + // Click anywhere in the page to hide #notifications $(document).click(function () { hideNotifications(); }); // ...but clicking inside #notifications shouldn't hide itself - $('#notifications').on('click', function (e) { + $notifications.on('click', function (e) { e.stopPropagation(); }); // Toggle the #notifications flyout - $('#notifications-toggle').on('click', function (e) { + $notifications_toggle.on('click', function (e) { e.stopPropagation(); - $('#notifications').toggle(); + $notifications.toggle(); $(this).toggleClass("active"); notificationsResize(); @@ -214,25 +228,25 @@ $(function() { // Hide other dropdowns $('nav .dropdown').removeClass('open'); - var navbarCollapse = $('nav.navbar-collapse'); + var $navbarCollapse = $('nav.navbar-collapse'); - if ($(navbarCollapse).hasClass('in')){ - $(navbarCollapse).addClass('show-notifications').removeClass('in'); + if ($navbarCollapse.hasClass('in')){ + $navbarCollapse.addClass('show-notifications').removeClass('in'); $('.nav-notifications-icon').removeClass('pi-notifications-none').addClass('pi-cancel'); } else { - $(navbarCollapse).removeClass('show-notifications'); + $navbarCollapse.removeClass('show-notifications'); $('.nav-notifications-icon').addClass('pi-notifications-none').removeClass('pi-cancel'); } }); // Hide flyout when clicking other dropdowns $('nav').on('click', '.dropdown', function (e) { - $('#notifications').hide(); - $('#notifications-toggle').removeClass('active'); + $notifications.hide(); + $notifications_toggle.removeClass('active'); }); - $('#notification-pop').on('click', function (e) { + $notification_pop.on('click', function (e) { e.preventDefault(); e.stopPropagation(); @@ -312,11 +326,12 @@ $(function() { $(this).addClass('is_read'); }); - $('#notifications-count').removeAttr('class'); - $('#notifications-toggle i').removeClass('pi-notifications-active').addClass('pi-notifications-none'); + clearNotificationIcon(); unread_on_load = 0; + // Let Pillar know the notifications total has been updated. + // Used for example to update of the page title via updateTitle(); $('body').trigger('pillar:notifications-total-updated', unread_on_load); }); }); diff --git a/src/styles/_notifications.sass b/src/styles/_notifications.sass index c595088b..abf9f7b3 100644 --- a/src/styles/_notifications.sass +++ b/src/styles/_notifications.sass @@ -30,6 +30,18 @@ position: relative user-select: none + > i:before + content: '\e815' + + &.has-notifications + > i:before + content: '\e813' + + #notifications-count + opacity: 1 + transform: scale(1) !important + -webkit-transform: scale(1) !important + .flyout-hat border-color: transparent transparent white transparent border-style: solid @@ -68,10 +80,6 @@ user-select: none width: 18px - &.bloom - opacity: 1 - transform: scale(1) !important - -webkit-transform: scale(1) !important #notifications-list list-style-type: none