mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-08-31 03:36:51 +02:00
lots of pagination work, query params, ajaxify to pids
This commit is contained in:
@@ -46,15 +46,14 @@ var db = require('./database.js'),
|
||||
});
|
||||
};
|
||||
|
||||
Categories.getCategoryById = function(category_id, current_user, callback) {
|
||||
Categories.getCategoryById = function(category_id, start, end, current_user, callback) {
|
||||
Categories.getCategoryData(category_id, function(err, categoryData) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
function getTopicIds(next) {
|
||||
var topicsPerPage = meta.config.topicsPerPage || 20;
|
||||
Categories.getTopicIds(category_id, 0, topicsPerPage - 1, next);
|
||||
Categories.getTopicIds(category_id, start, end, next);
|
||||
}
|
||||
|
||||
function getActiveUsers(next) {
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
};
|
||||
|
||||
Feed.updateCategory = function (cid, callback) {
|
||||
categories.getCategoryById(cid, 0, function (err, categoryData) {
|
||||
categories.getCategoryById(cid, 0, -1, 0, function (err, categoryData) {
|
||||
if (err) return callback(new Error('category-invalid'));
|
||||
|
||||
var feed = new rss({
|
||||
|
||||
24
src/posts.js
24
src/posts.js
@@ -468,4 +468,28 @@ var db = require('./database'),
|
||||
});
|
||||
}
|
||||
|
||||
Posts.getPidPage = function(pid, callback) {
|
||||
Posts.getPostField(pid, 'tid', function(err, tid) {
|
||||
if(err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
topics.getPids(tid, function(err, pids) {
|
||||
if(err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var index = pids.indexOf(pid);
|
||||
if(index === -1) {
|
||||
return callback(new Error('pid not found'));
|
||||
}
|
||||
var postsPerPage = parseInt(meta.config.postsPerPage, 10);
|
||||
postsPerPage = postsPerPage ? postsPerPage : 20;
|
||||
|
||||
var page = Math.ceil((index + 1) / postsPerPage);
|
||||
callback(null, page);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
}(exports));
|
||||
|
||||
@@ -164,17 +164,33 @@ var path = require('path'),
|
||||
});
|
||||
|
||||
app.get('/topic/:id/:slug?', function (req, res, next) {
|
||||
console.log(req.query);
|
||||
|
||||
var uid = (req.user) ? req.user.uid : 0;
|
||||
var page = 1;
|
||||
if(req.query && req.query.page) {
|
||||
page = req.query.page;
|
||||
}
|
||||
|
||||
if(parseInt(page, 10) < 1) {
|
||||
return res.send(404);
|
||||
}
|
||||
|
||||
var postsPerPage = parseInt(meta.config.postsPerPage ? meta.config.postsPerPage : 20, 10);
|
||||
var start = (page - 1) * postsPerPage;
|
||||
var end = start + postsPerPage - 1;
|
||||
|
||||
ThreadTools.privileges(req.params.id, uid, function(err, privileges) {
|
||||
if (privileges.read) {
|
||||
var postsPerPage = parseInt(meta.config.postsPerPage ? meta.config.postsPerPage : 20, 10);
|
||||
topics.getTopicWithPosts(req.params.id, uid, 0, postsPerPage - 1, false, function (err, data) {
|
||||
topics.getTopicWithPosts(req.params.id, uid, start, end, false, function (err, data) {
|
||||
if(err) {
|
||||
return next(err);
|
||||
}
|
||||
data.currentPage = 1;
|
||||
|
||||
if(page > data.pageCount) {
|
||||
return res.send(404);
|
||||
}
|
||||
|
||||
data.currentPage = page;
|
||||
data.privileges = privileges;
|
||||
|
||||
if (parseInt(data.deleted, 10) === 1 && parseInt(data.expose_tools, 10) === 0) {
|
||||
@@ -191,16 +207,32 @@ var path = require('path'),
|
||||
|
||||
app.get('/category/:id/:slug?', function (req, res, next) {
|
||||
var uid = (req.user) ? req.user.uid : 0;
|
||||
var page = 1;
|
||||
if(req.query && req.query.page) {
|
||||
page = req.query.page;
|
||||
}
|
||||
|
||||
if(parseInt(page, 10) < 1) {
|
||||
return res.send(404);
|
||||
}
|
||||
|
||||
var topicsPerPage = parseInt(meta.config.topicsPerPage ? meta.config.topicsPerPage : 20, 10);
|
||||
var start = (page - 1) * topicsPerPage;
|
||||
var end = start + topicsPerPage - 1;
|
||||
|
||||
// Category Whitelisting
|
||||
categoryTools.privileges(req.params.id, uid, function(err, privileges) {
|
||||
if (!err && privileges.read) {
|
||||
categories.getCategoryById(req.params.id, uid, function (err, data) {
|
||||
categories.getCategoryById(req.params.id, start, end, uid, function (err, data) {
|
||||
if(err) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
data.currentPage = 1;
|
||||
if(page > data.pageCount) {
|
||||
return res.send(404);
|
||||
}
|
||||
|
||||
data.currentPage = page;
|
||||
data.privileges = privileges;
|
||||
|
||||
if (data && parseInt(data.disabled, 10) === 0) {
|
||||
|
||||
@@ -28,23 +28,6 @@ SocketCategories.loadMore = function(socket, data, callback) {
|
||||
});
|
||||
};
|
||||
|
||||
SocketCategories.loadPage = function(socket, data, callback) {
|
||||
if(!data) {
|
||||
return callback(new Error('invalid data'));
|
||||
}
|
||||
|
||||
var topicsPerPage = parseInt(meta.config.topicsPerPage, 10) || 20;
|
||||
|
||||
var start = (data.page - 1) * topicsPerPage,
|
||||
end = start + topicsPerPage - 1;
|
||||
|
||||
categories.getCategoryTopics(data.cid, start, end, socket.uid, function(err, topics) {
|
||||
callback(err, {
|
||||
topics: topics
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
SocketCategories.getPageCount = function(socket, cid, callback) {
|
||||
categories.getPageCount(cid, callback);
|
||||
}
|
||||
|
||||
@@ -194,4 +194,8 @@ SocketPosts.getFavouritedUsers = function(socket, pid, callback) {
|
||||
});
|
||||
};
|
||||
|
||||
SocketPosts.getPidPage = function(socket, pid, callback) {
|
||||
posts.getPidPage(pid, callback);
|
||||
}
|
||||
|
||||
module.exports = SocketPosts;
|
||||
@@ -245,31 +245,6 @@ SocketTopics.loadMore = function(socket, data, callback) {
|
||||
});
|
||||
};
|
||||
|
||||
SocketTopics.loadPage = function(socket, data, callback) {
|
||||
if(!data || !data.tid || !data.page || parseInt(data.page < 0)) {
|
||||
return callback(new Error('invalid data'));
|
||||
}
|
||||
|
||||
var postsPerPage = parseInt((meta.config.postsPerPage ? meta.config.postsPerPage : 20), 10);
|
||||
|
||||
topics.getPageCount(data.tid, function(err, pageCount) {
|
||||
if(err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
if(data.page > pageCount) {
|
||||
return callback(new Error('page doesn\'t exist'));
|
||||
}
|
||||
|
||||
var start = (data.page-1) * postsPerPage,
|
||||
end = start + postsPerPage - 1;
|
||||
|
||||
topics.getTopicPosts(data.tid, start, end, socket.uid, function(err, posts) {
|
||||
callback(err, {posts: posts});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
SocketTopics.loadMoreRecentTopics = function(socket, data, callback) {
|
||||
if(!data || !data.term) {
|
||||
return callback(new Error('invalid data'));
|
||||
|
||||
@@ -9,6 +9,7 @@ var path = require('path'),
|
||||
validator = require('validator'),
|
||||
async = require('async'),
|
||||
S = require('string'),
|
||||
qs = require('querystring'),
|
||||
|
||||
pkg = require('../package.json'),
|
||||
|
||||
@@ -644,6 +645,10 @@ module.exports.server = server;
|
||||
}
|
||||
|
||||
var topic_url = tid + (req.params.slug ? '/' + req.params.slug : '');
|
||||
var queryString = qs.stringify(req.query);
|
||||
if(queryString.length) {
|
||||
topic_url += '?' + queryString;
|
||||
}
|
||||
|
||||
res.send(
|
||||
data.header +
|
||||
@@ -701,7 +706,7 @@ module.exports.server = server;
|
||||
});
|
||||
},
|
||||
function (next) {
|
||||
categories.getCategoryById(cid, 0, function (err, categoryData) {
|
||||
categories.getCategoryById(cid, 0, -1, 0, function (err, categoryData) {
|
||||
|
||||
if (categoryData) {
|
||||
if (parseInt(categoryData.disabled, 10) === 1) {
|
||||
@@ -758,6 +763,10 @@ module.exports.server = server;
|
||||
}
|
||||
|
||||
var category_url = cid + (req.params.slug ? '/' + req.params.slug : '');
|
||||
var queryString = qs.stringify(req.query);
|
||||
if(queryString.length) {
|
||||
category_url += '?' + queryString;
|
||||
}
|
||||
|
||||
res.send(
|
||||
data.header +
|
||||
|
||||
Reference in New Issue
Block a user