aboutsummaryrefslogtreecommitdiffstats
path: root/view
diff options
context:
space:
mode:
authorMario Vavti <mario@mariovavti.com>2018-01-24 22:46:36 +0100
committerMario Vavti <mario@mariovavti.com>2018-01-24 22:46:36 +0100
commit93259e4e92eaa7b692b5fb882dcca2b44cdc9a4a (patch)
treea0d86b43a636b20ef7ebc8e912ddb974a2fc50c8 /view
parentadd9890754780c886188504647b3058c4cc146c1 (diff)
downloadvolse-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.js54
-rw-r--r--view/tpl/notifications_widget.tpl2
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}}