v1.18.x
Baris Soner Usakli 11 years ago
parent fac2cd9464
commit 25442a89ca

@ -145,7 +145,7 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
loadingMoreTopics = true; loadingMoreTopics = true;
socket.emit('categories.loadMore', { socket.emit('categories.loadMore', {
cid: cid, cid: cid,
after: $('#topics-container').children('.category-item').length after: $('#topics-container').attr('data-nextstart')
}, function (err, data) { }, function (err, data) {
if(err) { if(err) {
return app.alertError(err.message); return app.alertError(err.message);
@ -153,6 +153,7 @@ define(['composer', 'forum/pagination'], function(composer, pagination) {
if (data && data.topics.length) { if (data && data.topics.length) {
Category.onTopicsLoaded(data.topics); Category.onTopicsLoaded(data.topics);
$('#topics-container').attr('data-nextstart', data.nextStart);
} }
loadingMoreTopics = false; loadingMoreTopics = false;
}); });

@ -86,7 +86,7 @@ define(function() {
Recent.loadMoreTopics = function() { Recent.loadMoreTopics = function() {
loadingMoreTopics = true; loadingMoreTopics = true;
socket.emit('topics.loadMoreRecentTopics', { socket.emit('topics.loadMoreRecentTopics', {
after: $('#topics-container').children('li').length, after: $('#topics-container').attr('data-nextstart'),
term: active term: active
}, function(err, data) { }, function(err, data) {
if(err) { if(err) {
@ -95,6 +95,7 @@ define(function() {
if (data.topics && data.topics.length) { if (data.topics && data.topics.length) {
Recent.onTopicsLoaded('recent', data.topics); Recent.onTopicsLoaded('recent', data.topics);
$('#topics-container').attr('data-nextstart', data.nextStart);
} }
loadingMoreTopics = false; loadingMoreTopics = false;

@ -46,7 +46,7 @@ define(['forum/recent'], function(recent) {
function loadMoreTopics() { function loadMoreTopics() {
loadingMoreTopics = true; loadingMoreTopics = true;
socket.emit('topics.loadMoreUnreadTopics', { socket.emit('topics.loadMoreUnreadTopics', {
after: parseInt($('#topics-container').attr('data-next-start'), 10) after: $('#topics-container').attr('data-nextstart')
}, function(err, data) { }, function(err, data) {
if(err) { if(err) {
return app.alertError(err.message); return app.alertError(err.message);
@ -54,7 +54,7 @@ define(['forum/recent'], function(recent) {
if (data.topics && data.topics.length) { if (data.topics && data.topics.length) {
recent.onTopicsLoaded('unread', data.topics); recent.onTopicsLoaded('unread', data.topics);
$('#topics-container').attr('data-next-start', data.nextStart); $('#topics-container').attr('data-nextstart', data.nextStart);
} else { } else {
$('#load-more-btn').hide(); $('#load-more-btn').hide();
} }

@ -28,7 +28,7 @@
<div class="category row"> <div class="category row">
<div class="{topic_row_size}"> <div class="{topic_row_size}">
<ul id="topics-container" itemscope itemtype="http://www.schema.org/ItemList"> <ul id="topics-container" itemscope itemtype="http://www.schema.org/ItemList" data-nextstart="{nextStart}">
<meta itemprop="itemListOrder" content="descending"> <meta itemprop="itemListOrder" content="descending">
<!-- BEGIN topics --> <!-- BEGIN topics -->
<li class="category-item {topics.deleted-class}" itemprop="itemListElement"> <li class="category-item {topics.deleted-class}" itemprop="itemListElement">

@ -21,7 +21,7 @@
<div class="category row"> <div class="category row">
<div class="col-md-12"> <div class="col-md-12">
<ul id="topics-container"> <ul id="topics-container" data-nextstart="{nextStart}">
<!-- BEGIN topics --> <!-- BEGIN topics -->
<li class="category-item {topics.deleted-class}"> <li class="category-item {topics.deleted-class}">
<div class="col-md-12 col-xs-12 panel panel-default topic-row"> <div class="col-md-12 col-xs-12 panel panel-default topic-row">

@ -16,7 +16,7 @@
<div class="category row"> <div class="category row">
<div class="col-md-12"> <div class="col-md-12">
<ul id="topics-container" data-next-start="{nextStart}"> <ul id="topics-container" data-nextstart="{nextStart}">
<!-- BEGIN topics --> <!-- BEGIN topics -->
<li class="category-item {topics.deleted-class}"> <li class="category-item {topics.deleted-class}">
<div class="col-md-12 col-xs-12 panel panel-default topic-row"> <div class="col-md-12 col-xs-12 panel panel-default topic-row">

@ -1,8 +1,8 @@
var db = require('./database.js'), var db = require('./database'),
posts = require('./posts.js'), posts = require('./posts'),
utils = require('./../public/src/utils.js'), utils = require('./../public/src/utils'),
user = require('./user.js'), user = require('./user'),
topics = require('./topics.js'), topics = require('./topics'),
plugins = require('./plugins'), plugins = require('./plugins'),
CategoryTools = require('./categoryTools'), CategoryTools = require('./categoryTools'),
meta = require('./meta'), meta = require('./meta'),
@ -52,8 +52,8 @@ var db = require('./database.js'),
return callback(err); return callback(err);
} }
function getTopicIds(next) { function getTopics(next) {
Categories.getTopicIds(category_id, start, end, next); Categories.getCategoryTopics(category_id, start, end, current_user, next);
} }
function getActiveUsers(next) { function getActiveUsers(next) {
@ -70,9 +70,12 @@ var db = require('./database.js'),
Categories.getPageCount(category_id, next); Categories.getPageCount(category_id, next);
} }
async.parallel([getTopicIds, getActiveUsers, getSidebars, getPageCount], function(err, results) { async.parallel([getTopics, getActiveUsers, getSidebars, getPageCount], function(err, results) {
var tids = results[0], if(err) {
active_users = results[1], return callback(err);
}
var active_users = results[1],
sidebars = results[2], sidebars = results[2],
pageCount = results[3]; pageCount = results[3];
@ -87,27 +90,22 @@ var db = require('./database.js'),
'topic_row_size': 'col-md-9', 'topic_row_size': 'col-md-9',
'category_id': category_id, 'category_id': category_id,
'active_users': [], 'active_users': [],
'topics': [], 'topics': results[0].topics,
'nextStart': results[0].nextStart,
'pageCount': pageCount, 'pageCount': pageCount,
'disableSocialButtons': meta.config.disableSocialButtons !== undefined ? parseInt(meta.config.disableSocialButtons, 10) !== 0 : false, 'disableSocialButtons': meta.config.disableSocialButtons !== undefined ? parseInt(meta.config.disableSocialButtons, 10) !== 0 : false,
'sidebars': sidebars 'sidebars': sidebars
}; };
function getTopics(next) {
topics.getTopicsByTids(tids, category_id, current_user, next);
}
function getModerators(next) { function getModerators(next) {
Categories.getModerators(category_id, next); Categories.getModerators(category_id, next);
} }
function getActiveUsers(next) { function getActiveUsers(next) {
user.getMultipleUserFields(active_users, ['uid', 'username', 'userslug', 'picture'], function(err, users) { user.getMultipleUserFields(active_users, ['uid', 'username', 'userslug', 'picture'], next);
next(err, users);
});
} }
if (tids.length === 0) { if (!category.topics.length) {
getModerators(function(err, moderators) { getModerators(function(err, moderators) {
category.moderator_block_class = moderators.length > 0 ? '' : 'none'; category.moderator_block_class = moderators.length > 0 ? '' : 'none';
category.moderators = moderators; category.moderators = moderators;
@ -116,11 +114,10 @@ var db = require('./database.js'),
callback(null, category); callback(null, category);
}); });
} else { } else {
async.parallel([getTopics, getModerators, getActiveUsers], function(err, results) { async.parallel([getModerators, getActiveUsers], function(err, results) {
category.topics = results[0]; category.moderator_block_class = results[0].length > 0 ? '' : 'none';
category.moderator_block_class = results[1].length > 0 ? '' : 'none'; category.moderators = results[0];
category.moderators = results[1]; category.active_users = results[1];
category.active_users = results[2];
category.show_sidebar = category.topics.length > 0 ? 'show' : 'hidden'; category.show_sidebar = category.topics.length > 0 ? 'show' : 'hidden';
callback(null, category); callback(null, category);
}); });
@ -131,13 +128,26 @@ var db = require('./database.js'),
}; };
Categories.getCategoryTopics = function(cid, start, stop, uid, callback) { Categories.getCategoryTopics = function(cid, start, stop, uid, callback) {
Categories.getTopicIds(cid, start, stop, function(err, tids) { async.waterfall([
if(err) { function(next) {
return callback(err); Categories.getTopicIds(cid, start, stop, next);
} },
function(tids, next) {
topics.getTopicsByTids(tids, cid, uid, next);
},
function(topics, next) {
db.sortedSetRevRank('categories:' + cid + ':tid', topics[topics.length - 1].tid, function(err, rank) {
if(err) {
return next(err);
}
topics.getTopicsByTids(tids, cid, uid, callback); return next(null, {
}); topics: topics,
nextStart: parseInt(rank, 10) + 1
});
});
}
], callback);
}; };
Categories.getTopicIds = function(cid, start, stop, callback) { Categories.getTopicIds = function(cid, start, stop, callback) {

@ -18,14 +18,10 @@ SocketCategories.loadMore = function(socket, data, callback) {
var topicsPerPage = parseInt(meta.config.topicsPerPage, 10) || 20; var topicsPerPage = parseInt(meta.config.topicsPerPage, 10) || 20;
var start = data.after, var start = parseInt(data.after, 10),
end = start + topicsPerPage - 1; end = start + topicsPerPage - 1;
console.log(start, end);
categories.getCategoryTopics(data.cid, start, end, socket.uid, function(err, topics) { categories.getCategoryTopics(data.cid, start, end, socket.uid, callback);
callback(err, {
topics: topics
});
});
}; };
SocketCategories.getPageCount = function(socket, cid, callback) { SocketCategories.getPageCount = function(socket, cid, callback) {

@ -236,7 +236,7 @@ SocketTopics.loadMore = function(socket, data, callback) {
var postsPerPage = parseInt(meta.config.postsPerPage, 10); var postsPerPage = parseInt(meta.config.postsPerPage, 10);
postsPerPage = postsPerPage ? postsPerPage : 20; postsPerPage = postsPerPage ? postsPerPage : 20;
var start = data.after, var start = parseInt(data.after, 10),
end = start + postsPerPage - 1; end = start + postsPerPage - 1;
async.parallel({ async.parallel({
@ -256,14 +256,14 @@ SocketTopics.loadMoreRecentTopics = function(socket, data, callback) {
return callback(new Error('invalid data')); return callback(new Error('invalid data'));
} }
var start = data.after, var start = parseInt(data.after, 10),
end = start + 9; end = start + 9;
topics.getLatestTopics(socket.uid, start, end, data.term, callback); topics.getLatestTopics(socket.uid, start, end, data.term, callback);
}; };
SocketTopics.loadMoreUnreadTopics = function(socket, data, callback) { SocketTopics.loadMoreUnreadTopics = function(socket, data, callback) {
var start = data.after, var start = parseInt(data.after, 10),
end = start + 9; end = start + 9;
topics.getUnreadTopics(socket.uid, start, end, callback); topics.getUnreadTopics(socket.uid, start, end, callback);

@ -448,11 +448,7 @@ var async = require('async'),
async.filter(tids, function(tid, next) { async.filter(tids, function(tid, next) {
threadTools.privileges(tid, current_user, function(err, privileges) { threadTools.privileges(tid, current_user, function(err, privileges) {
if (!err && privileges.read) { next(!err && privileges.read);
next(true);
} else {
next(false);
}
}); });
}, function(tids) { }, function(tids) {
Topics.getTopicsByTids(tids, 0, current_user, function(err, topicData) { Topics.getTopicsByTids(tids, 0, current_user, function(err, topicData) {
@ -466,7 +462,7 @@ var async = require('async'),
} }
db.sortedSetRevRank('topics:recent', topicData[topicData.length - 1].tid, function(err, rank) { db.sortedSetRevRank('topics:recent', topicData[topicData.length - 1].tid, function(err, rank) {
latestTopics.lastIndex = rank; latestTopics.nextStart = parseInt(rank,10) + 1;
latestTopics.topics = topicData; latestTopics.topics = topicData;
callback(null, latestTopics); callback(null, latestTopics);
}); });
@ -549,7 +545,7 @@ var async = require('async'),
return parseInt(read[index], 10) === 0; return parseInt(read[index], 10) === 0;
}); });
// Filter out topics that belong to categories that this user cannot access
async.filter(newtids, function(tid, next) { async.filter(newtids, function(tid, next) {
threadTools.privileges(tid, uid, function(err, privileges) { threadTools.privileges(tid, uid, function(err, privileges) {
if (!err && privileges.read) { if (!err && privileges.read) {
@ -599,16 +595,23 @@ var async = require('async'),
return callback(err); return callback(err);
} }
unreadTopics.topics = topicData; db.sortedSetRevRank('topics:recent', topicData[topicData.length - 1].tid, function(err, rank) {
unreadTopics.nextStart = stop + 1; if(err) {
if (!topicData || topicData.length === 0) { return callback(err);
unreadTopics.no_topics_message = 'show'; }
}
if (uid === 0 || topicData.length === 0) { unreadTopics.topics = topicData;
unreadTopics.show_markallread_button = 'hidden'; unreadTopics.nextStart = parseInt(rank, 10) + 1;
}
if (!topicData || topicData.length === 0) {
unreadTopics.no_topics_message = 'show';
}
if (uid === 0 || topicData.length === 0) {
unreadTopics.show_markallread_button = 'hidden';
}
callback(null, unreadTopics); callback(null, unreadTopics);
});
}); });
} }

@ -43,9 +43,9 @@ describe('Categories', function() {
describe('.getCategoryTopics', function() { describe('.getCategoryTopics', function() {
it('should return a list of topics', function(done) { it('should return a list of topics', function(done) {
Categories.getCategoryTopics(categoryObj.cid, 0, 10, 0, function(err, topics) { Categories.getCategoryTopics(categoryObj.cid, 0, 10, 0, function(err, result) {
assert(Array.isArray(topics)); assert(Array.isArray(result.topics));
assert(topics.every(function(topic) { assert(result.topics.every(function(topic) {
return topic instanceof Object; return topic instanceof Object;
})); }));

Loading…
Cancel
Save