You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.0 KiB
JavaScript

'use strict';
define('forum/footer', ['notifications', 'chat', 'components', 'translator'], function (Notifications, Chat, components, translator) {
Notifications.prepareDOM();
Chat.prepareDOM();
translator.prepareDOM();
function updateUnreadTopicCount(url, count) {
if (!utils.isNumber(count)) {
return;
}
$('a[href="' + config.relative_path + url + '"].navigation-link i')
.toggleClass('unread-count', count > 0)
.attr('data-content', count > 99 ? '99+' : count);
}
function updateUnreadChatCount(count) {
components.get('chat/icon')
.toggleClass('unread-count', count > 0)
.attr('data-content', count > 99 ? '99+' : count);
}
function initUnreadTopics() {
var unreadTopics = {};
function onNewPost(data) {
if (data && data.posts && data.posts.length) {
var post = data.posts[0];
if (parseInt(post.uid, 10) !== parseInt(app.user.uid, 10) && !unreadTopics[post.topic.tid]) {
increaseUnreadCount(data);
markTopicsUnread(post.topic.tid);
unreadTopics[post.topic.tid] = true;
}
}
}
function increaseUnreadCount(data) {
var post = data.posts[0];
var unreadTopicCount = parseInt($('a[href="' + config.relative_path + '/unread"].navigation-link i').attr('data-content'), 10) + 1;
updateUnreadTopicCount('/unread', unreadTopicCount);
var isNewTopic = post.isMain && parseInt(post.uid, 10) !== parseInt(app.user.uid, 10);
if (isNewTopic) {
var unreadNewTopicCount = parseInt($('a[href="' + config.relative_path + '/unread/new"].navigation-link i').attr('data-content'), 10) + 1;
updateUnreadTopicCount('/unread/new', unreadNewTopicCount);
}
socket.emit('topics.isFollowed', post.topic.tid, function (err, isFollowed) {
if (err) {
return app.alertError(err.message);
}
if (isFollowed) {
var unreadWatchedTopicCount = parseInt($('a[href="' + config.relative_path + '/unread/watched"].navigation-link i').attr('data-content'), 10) + 1;
updateUnreadTopicCount('/unread/watched', unreadWatchedTopicCount);
}
});
}
function markTopicsUnread(tid) {
$('[data-tid="' + tid + '"]').addClass('unread');
}
$(window).on('action:ajaxify.end', function (ev, data) {
if (data.url) {
var tid = data.url.match(/^topic\/(\d+)/);
if (tid && tid[1]) {
delete unreadTopics[tid[1]];
}
}
});
socket.on('event:new_post', onNewPost);
}
// DEPRECATED: remove in 1.8.0
if (app.user.uid) {
socket.emit('user.getUnreadCounts', function (err, data) {
if (err) {
return app.alert(err.message);
}
updateUnreadCounters(data);
updateUnreadChatCount(data.unreadChatCount);
Notifications.updateNotifCount(data.unreadNotificationCount);
});
}
function updateUnreadCounters(data) {
updateUnreadTopicCount('/unread', data.unreadTopicCount);
updateUnreadTopicCount('/unread/new', data.unreadNewTopicCount);
updateUnreadTopicCount('/unread/watched', data.unreadWatchedTopicCount);
}
socket.on('event:unread.updateCount', updateUnreadCounters);
socket.on('event:unread.updateChatCount', updateUnreadChatCount);
initUnreadTopics();
});