mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-03 20:45:58 +01:00
closes #3720
This commit is contained in:
@@ -71,12 +71,14 @@ app.cacheBuster = null;
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
require(['taskbar', 'helpers'], function(taskbar, helpers) {
|
require(['taskbar', 'helpers', 'forum/pagination'], function(taskbar, helpers, pagination) {
|
||||||
taskbar.init();
|
taskbar.init();
|
||||||
|
|
||||||
// templates.js helpers
|
// templates.js helpers
|
||||||
helpers.register();
|
helpers.register();
|
||||||
|
|
||||||
|
pagination.init();
|
||||||
|
|
||||||
$(window).trigger('action:app.load');
|
$(window).trigger('action:app.load');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
/* global define, config, templates, app, utils, ajaxify, socket */
|
/* global define, config, templates, app, utils, ajaxify, socket */
|
||||||
|
|
||||||
define('forum/category', [
|
define('forum/category', [
|
||||||
'forum/pagination',
|
|
||||||
'forum/infinitescroll',
|
'forum/infinitescroll',
|
||||||
'share',
|
'share',
|
||||||
'navigator',
|
'navigator',
|
||||||
@@ -10,8 +9,7 @@ define('forum/category', [
|
|||||||
'sort',
|
'sort',
|
||||||
'components',
|
'components',
|
||||||
'translator'
|
'translator'
|
||||||
|
], function(infinitescroll, share, navigator, categoryTools, sort, components, translator) {
|
||||||
], function(pagination, infinitescroll, share, navigator, categoryTools, sort, components, translator) {
|
|
||||||
var Category = {};
|
var Category = {};
|
||||||
|
|
||||||
$(window).on('action:ajaxify.start', function(ev, data) {
|
$(window).on('action:ajaxify.start', function(ev, data) {
|
||||||
@@ -112,7 +110,7 @@ define('forum/category', [
|
|||||||
|
|
||||||
if (config.usePagination) {
|
if (config.usePagination) {
|
||||||
var page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage);
|
var page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage);
|
||||||
if (parseInt(page, 10) !== pagination.currentPage) {
|
if (parseInt(page, 10) !== ajaxify.data.pagination.currentPage) {
|
||||||
pagination.loadPage(page, function() {
|
pagination.loadPage(page, function() {
|
||||||
Category.scrollToTopic(bookmarkIndex, clickedIndex, 400);
|
Category.scrollToTopic(bookmarkIndex, clickedIndex, 400);
|
||||||
});
|
});
|
||||||
@@ -176,7 +174,6 @@ define('forum/category', [
|
|||||||
infinitescroll.init($('[component="category"]'), Category.loadMoreTopics);
|
infinitescroll.init($('[component="category"]'), Category.loadMoreTopics);
|
||||||
} else {
|
} else {
|
||||||
navigator.hide();
|
navigator.hide();
|
||||||
pagination.init(ajaxify.data.currentPage, ajaxify.data.pageCount);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,14 +4,8 @@
|
|||||||
define('forum/pagination', function() {
|
define('forum/pagination', function() {
|
||||||
var pagination = {};
|
var pagination = {};
|
||||||
|
|
||||||
pagination.currentPage = 0;
|
pagination.init = function() {
|
||||||
pagination.pageCount = 0;
|
$('body').on('click', '.pagination .select-page', function(e) {
|
||||||
|
|
||||||
pagination.init = function(currentPage, pageCount) {
|
|
||||||
pagination.currentPage = parseInt(currentPage, 10);
|
|
||||||
pagination.pageCount = parseInt(pageCount, 10);
|
|
||||||
|
|
||||||
$('.pagination').on('click', '.select-page', function(e) {
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
bootbox.prompt('Enter page number:', function(pageNum) {
|
bootbox.prompt('Enter page number:', function(pageNum) {
|
||||||
pagination.loadPage(pageNum);
|
pagination.loadPage(pageNum);
|
||||||
@@ -22,10 +16,14 @@ define('forum/pagination', function() {
|
|||||||
pagination.loadPage = function(page, callback) {
|
pagination.loadPage = function(page, callback) {
|
||||||
callback = callback || function() {};
|
callback = callback || function() {};
|
||||||
page = parseInt(page, 10);
|
page = parseInt(page, 10);
|
||||||
if (!utils.isNumber(page) || page < 1 || page > pagination.pageCount) {
|
if (!utils.isNumber(page) || page < 1 || page > ajaxify.data.pagination.pageCount) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var url = window.location.pathname.slice(1).split('/').slice(0, 3).join('/') + '?page=' + page;
|
|
||||||
|
var query = utils.params();
|
||||||
|
query.page = page;
|
||||||
|
|
||||||
|
var url = window.location.pathname + '?' + $.param(query);
|
||||||
ajaxify.go(url, callback);
|
ajaxify.go(url, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
/* globals define, app, socket, config, ajaxify, RELATIVE_PATH, utils */
|
/* globals define, app, socket, config, ajaxify, RELATIVE_PATH, utils */
|
||||||
|
|
||||||
define('forum/topic', [
|
define('forum/topic', [
|
||||||
'forum/pagination',
|
|
||||||
'forum/infinitescroll',
|
'forum/infinitescroll',
|
||||||
'forum/topic/threadTools',
|
'forum/topic/threadTools',
|
||||||
'forum/topic/postTools',
|
'forum/topic/postTools',
|
||||||
@@ -14,7 +13,7 @@ define('forum/topic', [
|
|||||||
'navigator',
|
'navigator',
|
||||||
'sort',
|
'sort',
|
||||||
'components'
|
'components'
|
||||||
], function(pagination, infinitescroll, threadTools, postTools, events, browsing, posts, navigator, sort, components) {
|
], function(infinitescroll, threadTools, postTools, events, browsing, posts, navigator, sort, components) {
|
||||||
var Topic = {},
|
var Topic = {},
|
||||||
currentUrl = '';
|
currentUrl = '';
|
||||||
|
|
||||||
@@ -147,7 +146,7 @@ define('forum/topic', [
|
|||||||
if (components.get('post/anchor', postIndex).length) {
|
if (components.get('post/anchor', postIndex).length) {
|
||||||
return navigator.scrollToPostIndex(postIndex, true);
|
return navigator.scrollToPostIndex(postIndex, true);
|
||||||
}
|
}
|
||||||
} else if (bookmark && (!config.usePagination || (config.usePagination && pagination.currentPage === 1)) && ajaxify.data.postcount > 10) {
|
} else if (bookmark && (!config.usePagination || (config.usePagination && ajaxify.data.pagination.currentPage === 1)) && ajaxify.data.postcount > 10) {
|
||||||
app.alert({
|
app.alert({
|
||||||
alert_id: 'bookmark',
|
alert_id: 'bookmark',
|
||||||
message: '[[topic:bookmark_instructions]]',
|
message: '[[topic:bookmark_instructions]]',
|
||||||
@@ -218,12 +217,9 @@ define('forum/topic', [
|
|||||||
infinitescroll.init($('[component="topic"]'), posts.loadMorePosts);
|
infinitescroll.init($('[component="topic"]'), posts.loadMorePosts);
|
||||||
} else {
|
} else {
|
||||||
navigator.hide();
|
navigator.hide();
|
||||||
|
|
||||||
pagination.init(parseInt(ajaxify.data.currentPage, 10), parseInt(ajaxify.data.pageCount, 10));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function updateTopicTitle() {
|
function updateTopicTitle() {
|
||||||
if ($(window).scrollTop() > 50) {
|
if ($(window).scrollTop() > 50) {
|
||||||
components.get('navbar/title').find('span').text(ajaxify.data.title).show();
|
components.get('navbar/title').find('span').text(ajaxify.data.title).show();
|
||||||
|
|||||||
@@ -51,15 +51,15 @@ define('forum/topic/posts', [
|
|||||||
|
|
||||||
var posts = data.posts;
|
var posts = data.posts;
|
||||||
|
|
||||||
pagination.pageCount = Math.max(1, Math.ceil((posts[0].topic.postcount - 1) / config.postsPerPage));
|
ajaxify.data.pagination.pageCount = Math.max(1, Math.ceil((posts[0].topic.postcount - 1) / config.postsPerPage));
|
||||||
var direction = config.topicPostSort === 'oldest_to_newest' || config.topicPostSort === 'most_votes' ? 1 : -1;
|
var direction = config.topicPostSort === 'oldest_to_newest' || config.topicPostSort === 'most_votes' ? 1 : -1;
|
||||||
|
|
||||||
var isPostVisible = (pagination.currentPage === pagination.pageCount && direction === 1) || (pagination.currentPage === 1 && direction === -1);
|
var isPostVisible = (ajaxify.data.pagination.currentPage === ajaxify.data.pagination.pageCount && direction === 1) || (ajaxify.data.pagination.currentPage === 1 && direction === -1);
|
||||||
|
|
||||||
if (isPostVisible) {
|
if (isPostVisible) {
|
||||||
createNewPosts(data, components.get('post').not('[data-index=0]'), direction, scrollToPost);
|
createNewPosts(data, components.get('post').not('[data-index=0]'), direction, scrollToPost);
|
||||||
} else if (parseInt(posts[0].uid, 10) === parseInt(app.user.uid, 10)) {
|
} else if (parseInt(posts[0].uid, 10) === parseInt(app.user.uid, 10)) {
|
||||||
pagination.loadPage(pagination.pageCount, scrollToPost);
|
pagination.loadPage(ajaxify.data.pagination.pageCount, scrollToPost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com
|
|||||||
if (config.usePagination) {
|
if (config.usePagination) {
|
||||||
var page = Math.max(1, Math.ceil(postIndex / config.postsPerPage));
|
var page = Math.max(1, Math.ceil(postIndex / config.postsPerPage));
|
||||||
|
|
||||||
if (parseInt(page, 10) !== pagination.currentPage) {
|
if (parseInt(page, 10) !== ajaxify.data.pagination.currentPage) {
|
||||||
pagination.loadPage(page, function() {
|
pagination.loadPage(page, function() {
|
||||||
navigator.scrollToPostIndex(postIndex, highlight, duration);
|
navigator.scrollToPostIndex(postIndex, highlight, duration);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ categoriesController.list = function(req, res, next) {
|
|||||||
|
|
||||||
categoriesController.get = function(req, res, callback) {
|
categoriesController.get = function(req, res, callback) {
|
||||||
var cid = req.params.category_id,
|
var cid = req.params.category_id,
|
||||||
page = parseInt(req.query.page, 10) || 1,
|
currentPage = parseInt(req.query.page, 10) || 1,
|
||||||
pageCount = 1,
|
pageCount = 1,
|
||||||
userPrivileges;
|
userPrivileges;
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ categoriesController.get = function(req, res, callback) {
|
|||||||
return helpers.redirect(res, '/category/' + cid + '/' + req.params.slug + (topicIndex > topicCount ? '/' + topicCount : ''));
|
return helpers.redirect(res, '/category/' + cid + '/' + req.params.slug + (topicIndex > topicCount ? '/' + topicCount : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.usePagination && (page < 1 || page > pageCount)) {
|
if (settings.usePagination && (currentPage < 1 || currentPage > pageCount)) {
|
||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ categoriesController.get = function(req, res, callback) {
|
|||||||
topicIndex = Math.max(topicIndex - (settings.topicsPerPage - 1), 0);
|
topicIndex = Math.max(topicIndex - (settings.topicsPerPage - 1), 0);
|
||||||
} else if (!req.query.page) {
|
} else if (!req.query.page) {
|
||||||
var index = Math.max(parseInt((topicIndex || 0), 10), 0);
|
var index = Math.max(parseInt((topicIndex || 0), 10), 0);
|
||||||
page = Math.ceil((index + 1) / settings.topicsPerPage);
|
currentPage = Math.ceil((index + 1) / settings.topicsPerPage);
|
||||||
topicIndex = 0;
|
topicIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ categoriesController.get = function(req, res, callback) {
|
|||||||
set = 'cid:' + cid + ':tids:posts';
|
set = 'cid:' + cid + ':tids:posts';
|
||||||
}
|
}
|
||||||
|
|
||||||
var start = (page - 1) * settings.topicsPerPage + topicIndex,
|
var start = (currentPage - 1) * settings.topicsPerPage + topicIndex,
|
||||||
stop = start + settings.topicsPerPage - 1;
|
stop = start + settings.topicsPerPage - 1;
|
||||||
|
|
||||||
next(null, {
|
next(null, {
|
||||||
@@ -249,12 +249,10 @@ categoriesController.get = function(req, res, callback) {
|
|||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
data.currentPage = page;
|
|
||||||
data.pageCount = pageCount;
|
|
||||||
data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1;
|
data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1;
|
||||||
data.rssFeedUrl = nconf.get('relative_path') + '/category/' + data.cid + '.rss';
|
data.rssFeedUrl = nconf.get('relative_path') + '/category/' + data.cid + '.rss';
|
||||||
data.title = data.name;
|
data.title = data.name;
|
||||||
data.pagination = pagination.create(data.currentPage, data.pageCount);
|
data.pagination = pagination.create(currentPage, pageCount);
|
||||||
data.pagination.rel.forEach(function(rel) {
|
data.pagination.rel.forEach(function(rel) {
|
||||||
rel.href = nconf.get('url') + '/category/' + data.slug + rel.href;
|
rel.href = nconf.get('url') + '/category/' + data.slug + rel.href;
|
||||||
res.locals.linkTags.push(rel);
|
res.locals.linkTags.push(rel);
|
||||||
|
|||||||
@@ -18,6 +18,8 @@ var topicsController = {},
|
|||||||
topicsController.get = function(req, res, callback) {
|
topicsController.get = function(req, res, callback) {
|
||||||
var tid = req.params.topic_id,
|
var tid = req.params.topic_id,
|
||||||
sort = req.query.sort,
|
sort = req.query.sort,
|
||||||
|
currentPage = parseInt(req.query.page, 10) || 1,
|
||||||
|
pageCount = 1,
|
||||||
userPrivileges;
|
userPrivileges;
|
||||||
|
|
||||||
if ((req.params.post_index && !utils.isNumber(req.params.post_index)) || !utils.isNumber(tid)) {
|
if ((req.params.post_index && !utils.isNumber(req.params.post_index)) || !utils.isNumber(tid)) {
|
||||||
@@ -56,14 +58,13 @@ topicsController.get = function(req, res, callback) {
|
|||||||
|
|
||||||
var settings = results.settings;
|
var settings = results.settings;
|
||||||
var postCount = parseInt(results.topic.postcount, 10);
|
var postCount = parseInt(results.topic.postcount, 10);
|
||||||
var pageCount = Math.max(1, Math.ceil((postCount - 1) / settings.postsPerPage));
|
pageCount = Math.max(1, Math.ceil((postCount - 1) / settings.postsPerPage));
|
||||||
var page = parseInt(req.query.page, 10) || 1;
|
|
||||||
|
|
||||||
if (utils.isNumber(req.params.post_index) && (req.params.post_index < 1 || req.params.post_index > postCount)) {
|
if (utils.isNumber(req.params.post_index) && (req.params.post_index < 1 || req.params.post_index > postCount)) {
|
||||||
return helpers.redirect(res, '/topic/' + req.params.topic_id + '/' + req.params.slug + (req.params.post_index > postCount ? '/' + postCount : ''));
|
return helpers.redirect(res, '/topic/' + req.params.topic_id + '/' + req.params.slug + (req.params.post_index > postCount ? '/' + postCount : ''));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.usePagination && (page < 1 || page > pageCount)) {
|
if (settings.usePagination && (currentPage < 1 || currentPage > pageCount)) {
|
||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,10 +106,10 @@ topicsController.get = function(req, res, callback) {
|
|||||||
index = Math.max(0, req.params.post_index - 1) || 0;
|
index = Math.max(0, req.params.post_index - 1) || 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
page = Math.max(1, Math.ceil(index / settings.postsPerPage));
|
currentPage = Math.max(1, Math.ceil(index / settings.postsPerPage));
|
||||||
}
|
}
|
||||||
|
|
||||||
var start = (page - 1) * settings.postsPerPage + postIndex,
|
var start = (currentPage - 1) * settings.postsPerPage + postIndex,
|
||||||
stop = start + settings.postsPerPage - 1;
|
stop = start + settings.postsPerPage - 1;
|
||||||
|
|
||||||
topics.getTopicWithPosts(tid, set, req.uid, start, stop, reverse, function (err, topicData) {
|
topics.getTopicWithPosts(tid, set, req.uid, start, stop, reverse, function (err, topicData) {
|
||||||
@@ -120,9 +121,6 @@ topicsController.get = function(req, res, callback) {
|
|||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
topicData.pageCount = pageCount;
|
|
||||||
topicData.currentPage = page;
|
|
||||||
|
|
||||||
topics.modifyByPrivilege(topicData.posts, results.privileges);
|
topics.modifyByPrivilege(topicData.posts, results.privileges);
|
||||||
|
|
||||||
plugins.fireHook('filter:controllers.topic.get', topicData, next);
|
plugins.fireHook('filter:controllers.topic.get', topicData, next);
|
||||||
@@ -261,7 +259,7 @@ topicsController.get = function(req, res, callback) {
|
|||||||
data['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1;
|
data['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1;
|
||||||
data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1;
|
data['feeds:disableRSS'] = parseInt(meta.config['feeds:disableRSS'], 10) === 1;
|
||||||
data.rssFeedUrl = nconf.get('relative_path') + '/topic/' + data.tid + '.rss';
|
data.rssFeedUrl = nconf.get('relative_path') + '/topic/' + data.tid + '.rss';
|
||||||
data.pagination = pagination.create(data.currentPage, data.pageCount);
|
data.pagination = pagination.create(currentPage, pageCount);
|
||||||
data.pagination.rel.forEach(function(rel) {
|
data.pagination.rel.forEach(function(rel) {
|
||||||
rel.href = nconf.get('url') + '/topic/' + data.slug + rel.href;
|
rel.href = nconf.get('url') + '/topic/' + data.slug + rel.href;
|
||||||
res.locals.linkTags.push(rel);
|
res.locals.linkTags.push(rel);
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ pagination.create = function(currentPage, pageCount, queryObj) {
|
|||||||
prev: {page: 1, active: currentPage > 1},
|
prev: {page: 1, active: currentPage > 1},
|
||||||
next: {page: 1, active: currentPage < pageCount},
|
next: {page: 1, active: currentPage < pageCount},
|
||||||
rel: [],
|
rel: [],
|
||||||
pages: []
|
pages: [],
|
||||||
|
currentPage: 1,
|
||||||
|
pageCount: 1
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
pageCount = parseInt(pageCount, 10);
|
pageCount = parseInt(pageCount, 10);
|
||||||
@@ -44,7 +46,7 @@ pagination.create = function(currentPage, pageCount, queryObj) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = {rel: [], pages: pages};
|
var data = {rel: [], pages: pages, currentPage: currentPage, pageCount: pageCount};
|
||||||
queryObj.page = previous;
|
queryObj.page = previous;
|
||||||
data.prev = {page: previous, active: currentPage > 1, qs: qs.stringify(queryObj)};
|
data.prev = {page: previous, active: currentPage > 1, qs: qs.stringify(queryObj)};
|
||||||
queryObj.page = next;
|
queryObj.page = next;
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ module.exports = function(User) {
|
|||||||
var pagination = User.paginate(page, uids);
|
var pagination = User.paginate(page, uids);
|
||||||
uids = pagination.data;
|
uids = pagination.data;
|
||||||
searchResult.pagination = pagination.pagination;
|
searchResult.pagination = pagination.pagination;
|
||||||
searchResult.pageCount = pagination.pageCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
User.getUsers(uids, uid, next);
|
User.getUsers(uids, uid, next);
|
||||||
|
|||||||
Reference in New Issue
Block a user