mirror of
https://github.com/discourse/discourse.git
synced 2025-02-11 06:47:14 +08:00
98 lines
2.7 KiB
JavaScript
98 lines
2.7 KiB
JavaScript
import DiscourseController from 'discourse/controllers/controller';
|
|
|
|
const HeaderController = DiscourseController.extend({
|
|
topic: null,
|
|
showExtraInfo: null,
|
|
notifications: null,
|
|
loadingNotifications: false,
|
|
needs: ['application'],
|
|
|
|
loginRequired: Em.computed.alias('controllers.application.loginRequired'),
|
|
canSignUp: Em.computed.alias('controllers.application.canSignUp'),
|
|
|
|
showSignUpButton: function() {
|
|
return this.get('canSignUp') && !this.get('showExtraInfo');
|
|
}.property('canSignUp', 'showExtraInfo'),
|
|
|
|
showStarButton: function() {
|
|
return Discourse.User.current() && !this.get('topic.isPrivateMessage');
|
|
}.property('topic.isPrivateMessage'),
|
|
|
|
_resetCachedNotifications: function() {
|
|
// a bit hacky, but if we have no focus, hide notifications first
|
|
const 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(){
|
|
const self = this;
|
|
if (self.get("loadingNotifications")) { return; }
|
|
|
|
self.set("loadingNotifications", true);
|
|
|
|
this.store.find('notification', {recent: true}).then(function(notifications) {
|
|
self.setProperties({
|
|
'currentUser.unread_notifications': 0,
|
|
notifications
|
|
});
|
|
}).catch(function() {
|
|
self.setProperties({
|
|
notifications: null
|
|
});
|
|
}).finally(function() {
|
|
self.set("loadingNotifications", false);
|
|
});
|
|
},
|
|
|
|
actions: {
|
|
toggleStar() {
|
|
const topic = this.get('topic');
|
|
if (topic) topic.toggleStar();
|
|
return false;
|
|
},
|
|
|
|
showNotifications(headerView) {
|
|
const self = this;
|
|
|
|
if (self.get('currentUser.unread_notifications') || self.get('currentUser.unread_private_messages') || !self.get('notifications')) {
|
|
self.refreshNotifications();
|
|
}
|
|
headerView.showDropdownBySelector("#user-notifications");
|
|
}
|
|
}
|
|
});
|
|
|
|
// Allow plugins to add to the sum of "flags" above the site map
|
|
const _flagProperties = [];
|
|
function addFlagProperty(prop) {
|
|
_flagProperties.pushObject(prop);
|
|
}
|
|
|
|
function applyFlaggedProperties() {
|
|
const args = _flagProperties.slice();
|
|
args.push(function() {
|
|
let sum = 0;
|
|
_flagProperties.forEach((fp) => sum += (this.get(fp) || 0));
|
|
return sum;
|
|
});
|
|
HeaderController.reopen({ flaggedPostsCount: Ember.computed.apply(this, args) });
|
|
}
|
|
|
|
addFlagProperty('currentUser.site_flagged_posts_count');
|
|
addFlagProperty('currentUser.post_queue_new_count');
|
|
|
|
export { addFlagProperty, applyFlaggedProperties };
|
|
export default HeaderController;
|