diff options
author | Mario Vavti <mario@mariovavti.com> | 2018-01-24 22:46:36 +0100 |
---|---|---|
committer | Mario Vavti <mario@mariovavti.com> | 2018-01-24 22:46:36 +0100 |
commit | 93259e4e92eaa7b692b5fb882dcca2b44cdc9a4a (patch) | |
tree | a0d86b43a636b20ef7ebc8e912ddb974a2fc50c8 /view | |
parent | add9890754780c886188504647b3058c4cc146c1 (diff) | |
download | volse-hubzilla-93259e4e92eaa7b692b5fb882dcca2b44cdc9a4a.tar.gz volse-hubzilla-93259e4e92eaa7b692b5fb882dcca2b44cdc9a4a.tar.bz2 volse-hubzilla-93259e4e92eaa7b692b5fb882dcca2b44cdc9a4a.zip |
consolidate notifications caching and loading
Diffstat (limited to 'view')
-rw-r--r-- | view/js/main.js | 54 | ||||
-rw-r--r-- | view/tpl/notifications_widget.tpl | 2 |
2 files changed, 32 insertions, 24 deletions
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 @@ <i class="fa fa-fw fa-{{$notification.icon}}"></i> {{$notification.label}} <span class="float-right badge badge-{{$notification.severity}} {{$notification.type}}-update"></span> </a> - <div id="nav-{{$notification.type}}-sub" class="collapse notification-content"> + <div id="nav-{{$notification.type}}-sub" class="collapse notification-content" data-type="{{$notification.type}}"> {{if $notification.viewall}} <a class="list-group-item text-dark" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}"> <i class="fa fa-fw fa-external-link"></i> {{$notification.viewall.label}} |