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.
110 lines
2.6 KiB
JavaScript
110 lines
2.6 KiB
JavaScript
'use strict';
|
|
|
|
|
|
define('forum/unread', [
|
|
'forum/header/unread', 'topicSelect', 'components', 'topicList', 'categorySelector', 'alerts', 'api',
|
|
], function (headerUnread, topicSelect, components, topicList, categorySelector, alerts, api) {
|
|
const Unread = {};
|
|
|
|
Unread.init = function () {
|
|
app.enterRoom('unread_topics');
|
|
|
|
handleMarkRead();
|
|
|
|
topicList.init('unread');
|
|
|
|
headerUnread.updateUnreadTopicCount('/' + ajaxify.data.selectedFilter.url, ajaxify.data.topicCount);
|
|
};
|
|
|
|
function handleMarkRead() {
|
|
function markAllRead() {
|
|
socket.emit('topics.markAllRead', function (err) {
|
|
if (err) {
|
|
return alerts.error(err);
|
|
}
|
|
|
|
alerts.success('[[unread:topics_marked_as_read.success]]');
|
|
|
|
$('[component="category"]').empty();
|
|
$('[component="pagination"]').addClass('hidden');
|
|
$('#category-no-topics').removeClass('hidden');
|
|
$('.markread').addClass('hidden');
|
|
});
|
|
}
|
|
|
|
function markSelectedRead() {
|
|
const tids = topicSelect.getSelectedTids();
|
|
if (!tids.length) {
|
|
return;
|
|
}
|
|
|
|
Promise.all(tids.map(async tid => api.put(`/topics/${tid}/read`))).then(() => {
|
|
doneRemovingTids(tids);
|
|
});
|
|
}
|
|
|
|
function markCategoryRead(cid) {
|
|
function getCategoryTids(cid) {
|
|
const tids = [];
|
|
components.get('category/topic', 'cid', cid).each(function () {
|
|
tids.push($(this).attr('data-tid'));
|
|
});
|
|
return tids;
|
|
}
|
|
const tids = getCategoryTids(cid);
|
|
|
|
socket.emit('topics.markCategoryTopicsRead', cid, function (err) {
|
|
if (err) {
|
|
return alerts.error(err);
|
|
}
|
|
|
|
doneRemovingTids(tids);
|
|
});
|
|
}
|
|
const selector = categorySelector.init($('[component="category-selector"]'), {
|
|
onSelect: function (category) {
|
|
selector.selectCategory(0);
|
|
if (category.cid === 'all') {
|
|
markAllRead();
|
|
} else if (category.cid === 'selected') {
|
|
markSelectedRead();
|
|
} else if (parseInt(category.cid, 10) > 0) {
|
|
markCategoryRead(category.cid);
|
|
}
|
|
},
|
|
selectCategoryLabel: ajaxify.data.selectCategoryLabel || '[[unread:mark_as_read]]',
|
|
localCategories: [
|
|
{
|
|
cid: 'selected',
|
|
name: '[[unread:selected]]',
|
|
icon: '',
|
|
},
|
|
{
|
|
cid: 'all',
|
|
name: '[[unread:all]]',
|
|
icon: '',
|
|
},
|
|
],
|
|
});
|
|
}
|
|
|
|
function doneRemovingTids(tids) {
|
|
removeTids(tids);
|
|
|
|
alerts.success('[[unread:topics_marked_as_read.success]]');
|
|
|
|
if (!$('[component="category"]').children().length) {
|
|
$('#category-no-topics').removeClass('hidden');
|
|
$('.markread').addClass('hidden');
|
|
}
|
|
}
|
|
|
|
function removeTids(tids) {
|
|
for (let i = 0; i < tids.length; i += 1) {
|
|
components.get('category/topic', 'tid', tids[i]).remove();
|
|
}
|
|
}
|
|
|
|
return Unread;
|
|
});
|