mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-07 06:25:50 +01:00
closes #1730
postCount != lastPostIndex unfortunately, that will need some rethinking
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
|
||||
"pagination": "Pagination",
|
||||
"pagination.out_of": "%1 out of %2",
|
||||
"pagination.enter_index": "Enter index",
|
||||
|
||||
"header.admin": "Admin",
|
||||
"header.recent": "Recent",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
/* globals app, define, ajaxify */
|
||||
/* globals app, define, ajaxify, utils, translator */
|
||||
|
||||
|
||||
define('navigator', function() {
|
||||
@@ -17,22 +17,49 @@ define('navigator', function() {
|
||||
|
||||
$(window).on('scroll', navigator.update);
|
||||
|
||||
$('.pagination-block a').off('click').on('click', function() {
|
||||
return false;
|
||||
$('.pagination-block .dropdown-menu').off('click').on('click', function(e) {
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
$('.pagination-block i:first').off('click').on('click', function() {
|
||||
$('.pagination-block .pageup').off('click').on('click', function() {
|
||||
navigator.scrollToTop();
|
||||
});
|
||||
|
||||
$('.pagination-block i:last').off('click').on('click', function() {
|
||||
$('.pagination-block .pagedown').off('click').on('click', function() {
|
||||
navigator.scrollToBottom();
|
||||
});
|
||||
|
||||
$('.pagination-block .pagetop').off('click').on('click', function() {
|
||||
ajaxify.go(generateUrl());
|
||||
});
|
||||
|
||||
$('.pagination-block .pagebottom').off('click').on('click', function() {
|
||||
ajaxify.go(generateUrl(count));
|
||||
});
|
||||
|
||||
$('.pagination-block input').on('keydown', function(e) {
|
||||
if (e.which === 13) {
|
||||
var input = $(this);
|
||||
if (!utils.isNumber(input.val())) {
|
||||
input.val('');
|
||||
return;
|
||||
}
|
||||
var url = generateUrl(input.val());
|
||||
input.val('');
|
||||
$('.pagination-block .dropdown-toggle').trigger('click');
|
||||
ajaxify.go(url);
|
||||
}
|
||||
});
|
||||
|
||||
navigator.setCount(count);
|
||||
navigator.update();
|
||||
};
|
||||
|
||||
function generateUrl(index) {
|
||||
var parts = window.location.pathname.split('/');
|
||||
return parts[1] + '/' + parts[2] + '/' + parts[3] + (index ? '/' + index : '');
|
||||
}
|
||||
|
||||
navigator.setCount = function(value) {
|
||||
count = parseInt(value, 10);
|
||||
navigator.updateTextAndProgressBar();
|
||||
|
||||
@@ -90,7 +90,15 @@ categoriesController.get = function(req, res, next) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
var start = (page - 1) * settings.topicsPerPage,
|
||||
var topicIndex = 0;
|
||||
if (!settings.usePagination) {
|
||||
topicIndex = Math.max((req.params.topic_index || 1) - (settings.topicsPerPage - 1), 0);
|
||||
} else if (!req.query.page) {
|
||||
var index = Math.max(parseInt((req.params.topic_index || 0), 10), 0);
|
||||
page = Math.ceil((index + 1) / settings.topicsPerPage);
|
||||
}
|
||||
|
||||
var start = (page - 1) * settings.topicsPerPage + topicIndex,
|
||||
end = start + settings.topicsPerPage - 1;
|
||||
|
||||
categories.getCategoryById(cid, start, end, uid, function (err, categoryData) {
|
||||
|
||||
@@ -99,6 +99,26 @@ middleware.checkPostIndex = function(req, res, next) {
|
||||
});
|
||||
};
|
||||
|
||||
middleware.checkTopicIndex = function(req, res, next) {
|
||||
categories.getCategoryField(req.params.category_id, 'topic_count', function(err, topicCount) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
var topicIndex = parseInt(req.params.topic_index, 10);
|
||||
topicCount = parseInt(topicCount, 10) + 1;
|
||||
var url = '';
|
||||
console.log(topicIndex, topicCount);
|
||||
if (topicIndex > topicCount) {
|
||||
url = '/category/' + req.params.category_id + '/' + req.params.slug + '/' + topicCount;
|
||||
return res.locals.isAPI ? res.json(302, url) : res.redirect(url);
|
||||
} else if (topicIndex < 1) {
|
||||
url = '/category/' + req.params.category_id + '/' + req.params.slug;
|
||||
return res.locals.isAPI ? res.json(302, url) : res.redirect(url);
|
||||
}
|
||||
next();
|
||||
});
|
||||
};
|
||||
|
||||
middleware.prepareAPI = function(req, res, next) {
|
||||
res.locals.isAPI = true;
|
||||
next();
|
||||
|
||||
@@ -79,6 +79,9 @@ function categoryRoutes(app, middleware, controllers) {
|
||||
|
||||
app.get('/api/unread/total', middleware.authenticate, controllers.categories.unreadTotal);
|
||||
|
||||
app.get('/category/:category_id/:slug/:topic_index', middleware.buildHeader, middleware.checkTopicIndex, controllers.categories.get);
|
||||
app.get('/api/category/:category_id/:slug/:topic_index', middleware.checkTopicIndex, controllers.categories.get);
|
||||
|
||||
app.get('/category/:category_id/:slug?', middleware.buildHeader, middleware.addSlug, controllers.categories.get);
|
||||
app.get('/api/category/:category_id/:slug?', controllers.categories.get);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user