Files
NodeBB/public/src/forum/unread.js

175 lines
4.1 KiB
JavaScript
Raw Normal View History

'use strict';
/* globals define, app, socket */
2014-01-26 14:56:16 -05:00
define(['forum/recent'], function(recent) {
2013-11-26 23:55:55 -05:00
var Unread = {},
loadingMoreTopics = false;
Unread.init = function() {
app.enterRoom('recent_posts');
$('#new-topics-alert').on('click', function() {
$(this).addClass('hide');
});
2013-08-19 10:58:02 -04:00
2014-01-26 14:56:16 -05:00
recent.watchForNewPosts();
$('#markSelectedRead').on('click', function() {
function getSelectedTids() {
2014-03-03 15:26:15 -05:00
var tids = [];
$('#topics-container .category-item.selected').each(function() {
2014-03-03 15:26:15 -05:00
tids.push($(this).attr('data-tid'));
});
return tids;
}
var tids = getSelectedTids();
if(!tids.length) {
return;
}
socket.emit('topics.markTidsRead', tids, function(err) {
if(err) {
2014-04-11 17:01:27 -04:00
return app.alertError(err.message);
}
2014-03-03 15:26:15 -05:00
doneRemovingTids(tids);
});
});
2014-03-03 15:26:15 -05:00
$('#markAllRead').on('click', function() {
socket.emit('topics.markAllRead', function(err) {
2014-01-16 19:58:57 -05:00
if(err) {
2014-04-11 17:01:27 -04:00
return app.alertError(err.message);
}
2014-01-16 19:58:57 -05:00
app.alertSuccess('[[unread:topics_marked_as_read.success]]');
2014-01-16 19:58:57 -05:00
$('#topics-container').empty();
$('#category-no-topics').removeClass('hidden');
$('.markread').addClass('hidden');
2014-01-16 19:58:57 -05:00
$('#numUnreadBadge')
.removeClass('badge-important')
.addClass('badge-inverse')
.html('0');
});
});
$('.markread').on('click', '.category', function() {
function getCategoryTids(cid) {
var tids = [];
$('#topics-container .category-item[data-cid="' + cid + '"]').each(function() {
tids.push($(this).attr('data-tid'));
});
return tids;
}
var cid = $(this).attr('data-cid');
var tids = getCategoryTids(cid);
socket.emit('topics.markCategoryTopicsRead', cid, function(err) {
if(err) {
2014-04-11 17:01:27 -04:00
return app.alertError(err.message);
}
doneRemovingTids(tids);
});
});
socket.emit('categories.get', onCategoriesLoaded);
$('#topics-container').on('click', '.select', function() {
var select = $(this);
var isChecked = !select.hasClass('fa-square-o');
select.toggleClass('fa-check-square-o', !isChecked);
select.toggleClass('fa-square-o', isChecked);
select.parents('.category-item').toggleClass('selected', !isChecked);
});
2014-01-26 14:56:16 -05:00
if ($("body").height() <= $(window).height() && $('#topics-container').children().length >= 20) {
$('#load-more-btn').show();
}
2014-01-26 14:56:16 -05:00
$('#load-more-btn').on('click', function() {
loadMoreTopics();
});
2014-01-26 14:56:16 -05:00
app.enableInfiniteLoading(function() {
if(!loadingMoreTopics) {
loadMoreTopics();
}
});
function loadMoreTopics() {
if(!$('#topics-container').length) {
return;
}
loadingMoreTopics = true;
socket.emit('topics.loadMoreUnreadTopics', {
2014-01-26 17:17:34 -05:00
after: $('#topics-container').attr('data-nextstart')
2014-01-16 20:53:32 -05:00
}, function(err, data) {
if(err) {
return app.alertError(err.message);
}
if (data.topics && data.topics.length) {
2014-04-07 17:55:14 -04:00
recent.onTopicsLoaded('unread', data.topics, true);
2014-01-26 17:17:34 -05:00
$('#topics-container').attr('data-nextstart', data.nextStart);
} else {
$('#load-more-btn').hide();
}
loadingMoreTopics = false;
});
}
};
function doneRemovingTids(tids) {
removeTids(tids);
app.alertSuccess('[[unread:topics_marked_as_read.success]]');
if (!$('#topics-container').children().length) {
$('#category-no-topics').removeClass('hidden');
$('.markread').addClass('hidden');
}
}
function removeTids(tids) {
for(var i=0; i<tids.length; ++i) {
$('#topics-container .category-item[data-tid="' + tids[i] + '"]').remove();
}
}
function onCategoriesLoaded(err, data) {
createCategoryLinks(data.categories);
}
function createCategoryLinks(categories) {
categories = categories.filter(function(category) {
return !category.disabled;
});
for(var i=0; i<categories.length; ++i) {
createCategoryLink(categories[i]);
}
}
function createCategoryLink(category) {
var link = $('<a role="menuitem" href="#"></a>');
if (category.icon) {
link.append('<i class="fa fa-fw ' + category.icon + '"></i> ' + category.name);
} else {
link.append(category.name);
}
$('<li role="presentation" class="category" data-cid="' + category.cid + '"></li>')
.append(link)
.appendTo($('.markread .dropdown-menu'));
}
return Unread;
});