From 93259e4e92eaa7b692b5fb882dcca2b44cdc9a4a Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Wed, 24 Jan 2018 22:46:36 +0100 Subject: consolidate notifications caching and loading --- view/js/main.js | 54 ++++++++++++++++++++++----------------- view/tpl/notifications_widget.tpl | 2 +- 2 files changed, 32 insertions(+), 24 deletions(-) (limited to 'view') diff --git a/view/js/main.js b/view/js/main.js index 00c536243..89202c94f 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -68,14 +68,11 @@ $(document).ready(function() { $('a.notification-link').click(function(e){ var notifyType = $(this).data('type'); - if (!$(this).data('clicked') && (sessionStorage.getItem(notifyType + '_notifications_cache') !== null)) { - var cached_data = JSON.parse(sessionStorage.getItem(notifyType + '_notifications_cache')); - loadNotificationItems(notifyType, cached_data); - $(this).data('clicked', true); - } - else { + if(! $('#nav-' + notifyType + '-sub').hasClass('show')) { loadNotificationItems(notifyType); } + + $(this).data('clicked', true); }); // Allow folks to stop the ajax page updates with the pause/break key @@ -391,6 +388,15 @@ function notificationsUpdate(cached_data) { }); } + var notifyType = null; + + if($('.notification-content.show').length) + notifyType = $('.notification-content.show').data('type'); + + if(notifyType !== null) { + loadNotificationItems(notifyType); + } + if(timer) clearTimeout(timer); timer = setTimeout(updateInit,updateInterval); } @@ -924,33 +930,35 @@ function justifyPhotosAjax(id) { $('#' + id).justifiedGallery('norewind').on('jg.complete', function(e){ justifiedGalleryActive = false; }); } -function loadNotificationItems(notifyType, cached_data) { +function loadNotificationItems(notifyType) { var pingExCmd = 'ping/' + notifyType + ((localUser != 0) ? '?f=&uid=' + localUser : ''); - if(cached_data !== undefined) { + var clicked = $('[data-type=\'' + notifyType + '\']').data('clicked'); + + if((clicked === undefined) && (sessionStorage.getItem(notifyType + '_notifications_cache') !== null)) { + var cached_data = JSON.parse(sessionStorage.getItem(notifyType + '_notifications_cache')); handleNotificationsItems(notifyType, cached_data); + console.log('updating ' + notifyType + ' notifications from cache...'); } else { - $.get(pingExCmd, function(data) { - if(data.invalid == 1) { - window.location.href=window.location.href; - } - - $("." + notifyType + "-update").html(data.notify.length); + var cached_data = []; + } - sessionStorage.setItem(notifyType + '_notifications_cache', JSON.stringify(data.notify)); + console.log('updating ' + notifyType + ' notifications...'); + $.get(pingExCmd, function(data) { + if(data.invalid == 1) { + window.location.href=window.location.href; + } + if(JSON.stringify(cached_data[0]) === JSON.stringify(data.notify[0])) { + console.log(notifyType + ' notifications cache up to date - update deferred'); + } + else { handleNotificationsItems(notifyType, data.notify); - }); - } - - setTimeout(function() { - if($('#nav-' + notifyType + '-sub').hasClass('show')) { - console.log('updating ' + notifyType + ' notifications...'); - setTimeout(loadNotificationItems, updateInterval, notifyType); + sessionStorage.setItem(notifyType + '_notifications_cache', JSON.stringify(data.notify)); } - }, 1000); + }); } // Since our ajax calls are asynchronous, we will give a few diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index fd5c0dbc0..ee6fbc40a 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -129,7 +129,7 @@ {{$notification.label}} -