diff --git a/app/assets/javascripts/discourse/controllers/header.js.es6 b/app/assets/javascripts/discourse/controllers/header.js.es6 index ca4198d527a..0a6af7f6e53 100644 --- a/app/assets/javascripts/discourse/controllers/header.js.es6 +++ b/app/assets/javascripts/discourse/controllers/header.js.es6 @@ -17,9 +17,40 @@ export default Discourse.Controller.extend({ }.property('topic.isPrivateMessage'), resetCachedNotifications: function(){ - this.set("notifications", null); + // a bit hacky, but if we have no focus, hide notifications first + var visible = $("#notifications-dropdown").is(":visible"); + + if(!Discourse.get("hasFocus")) { + if(visible){ + $("html").click(); + } + this.set("notifications", null); + return; + } + if(visible){ + this.refreshNotifications(); + } else { + this.set("notifications", null); + } }.observes("currentUser.lastNotificationChange"), + refreshNotifications: function(){ + var self = this; + + if(self.get("loading_notifications")){return;} + + self.set("loading_notifications", true); + Discourse.ajax("/notifications").then(function(result) { + self.set('currentUser.unread_notifications', 0); + self.setProperties({ + notifications: result, + loading_notifications: false + }); + }, function(){ + self.set("loading_notifications", false); + }); + }, + actions: { toggleStar: function() { var topic = this.get('topic'); @@ -31,15 +62,7 @@ export default Discourse.Controller.extend({ var self = this; if (self.get('currentUser.unread_notifications') || self.get('currentUser.unread_private_messages') || !self.get('notifications')) { - self.set("loading_notifications", true); - Discourse.ajax("/notifications").then(function(result) { - self.set('currentUser.unread_notifications', 0); - - self.setProperties({ - notifications: result, - loading_notifications: false - }); - }); + self.refreshNotifications(); } headerView.showDropdownBySelector("#user-notifications"); },