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