diff options
| author | Jules Laplace <jules@okfoc.us> | 2014-09-05 15:54:12 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2014-09-05 15:54:12 -0400 |
| commit | 1082e3be99669671b6c745307131a7cb8d54eabc (patch) | |
| tree | 91897ff420885672a2dc5390ca334b65828737d5 /server/lib/views/staff.js | |
| parent | 1877aa4b508704634774e47385cf5429f67a4565 (diff) | |
pagination on all queries
Diffstat (limited to 'server/lib/views/staff.js')
| -rw-r--r-- | server/lib/views/staff.js | 75 |
1 files changed, 62 insertions, 13 deletions
diff --git a/server/lib/views/staff.js b/server/lib/views/staff.js index e776b7f..2ffea0d 100644 --- a/server/lib/views/staff.js +++ b/server/lib/views/staff.js @@ -27,10 +27,14 @@ var staff = module.exports = { middleware: { - ensureUsers: function(req, res, next, criteria){ - var limit = Math.max( Number(req.query.limit) || 50, 200 ) - var offset = Number(req.query.offset) || 0 + ensureUsers: function(req, res, next){ + var paginationInfo = res.locals.pagination = {} + var criteria = req.criteria || {} + var limit = paginationInfo.limit = Math.min( Number(req.query.limit) || 50, 200 ) + var offset = paginationInfo.offset = Number(req.query.offset) || 0 var sort + paginationInfo.sort = req.query.sort + paginationInfo.sortOptions = ["date", "last_seen", "username"] switch (req.query.sort) { case 'date': sort = {'created_at': -1} @@ -41,9 +45,9 @@ var staff = module.exports = { case 'username': default: sort = {'username': 1} + paginationInfo.sort = "username" break } - criteria = criteria || {} User.find(criteria) .select(staff.fields.user) .sort(sort) @@ -60,19 +64,24 @@ var staff = module.exports = { staff.middleware.ensureUsers(dreq, res, next) }, - ensureProjects: function(req, res, next, criteria){ - var limit = Math.max( Number(req.query.limit) || 50, 200 ) - var offset = Number(req.query.offset) || 0 + ensureProjects: function(req, res, next){ + var paginationInfo = res.locals.pagination = {} + var criteria = req.criteria || {} + var limit = paginationInfo.limit = Math.min( Number(req.query.limit) || 50, 200 ) + var offset = paginationInfo.offset = Number(req.query.offset) || 0 var sort + paginationInfo.sort = req.query.sort + paginationInfo.sortOptions = ["date", "name"] switch (req.query.sort) { case 'date': sort = {'created_at': -1} break + case 'name': default: + paginationInfo.sort = "name" sort = {'slug': 1} break } - criteria = criteria || {} Project.find(criteria) .select(staff.fields.project) .sort(sort) @@ -84,17 +93,21 @@ var staff = module.exports = { }) }, - ensureMedia: function(req, res, next, criteria){ - var limit = Math.max( Number(req.query.limit) || 50, 200 ) - var offset = Number(req.query.offset) || 0 + ensureMedia: function(req, res, next){ + var paginationInfo = res.locals.pagination = {} + var criteria = req.criteria || {} + var limit = paginationInfo.limit = Math.min( Number(req.query.limit) || 50, 200 ) + var offset = paginationInfo.offset = Number(req.query.offset) || 0 var sort + paginationInfo.sort = req.query.sort + paginationInfo.sortOptions = ["date"] switch (req.query.sort) { default: case 'date': + paginationInfo.sort = "date" sort = {'created_at': -1} break } - criteria = criteria || {} Media.find(criteria) // .select(staff.fields.media) .sort(sort) @@ -233,7 +246,8 @@ var staff = module.exports = { ensureProfileMedia: function(req, res, next){ if (! res.locals.profile) { return next() } - staff.middleware.ensureMedia(req, res, next, { user_id: res.locals.profile._id }) + req.criteria = { user_id: res.locals.profile._id } + staff.middleware.ensureMedia(req, res, next) }, ensureProject: function(req, res, next){ @@ -328,6 +342,7 @@ var staff = module.exports = { staff.middleware.ensureProfile, staff.middleware.ensureProfileMedia, + staff.middleware.ensureProfileMediaCount, staff.users.media ); @@ -373,6 +388,8 @@ var staff = module.exports = { middleware.ensureAuthenticated, middleware.ensureIsStaff, + staff.middleware.ensureMediaCount, + staff.middleware.ensureMedia, staff.middleware.ensureMediaUsers, @@ -389,6 +406,26 @@ var staff = module.exports = { ); }, + + paginate: function(req, res){ + var info = res.locals.pagination + info.query = "sort=" + info.sort + "&limit=" + info.limit + info.first_page = 0 + info.last_page = Math.max(0, info.max - info.limit) + info.sortOptions = info.sortOptions + if (info.offset > 0) { + info.prev_page = Math.max(0, info.offset - info.limit) + } + else { + info.prev_page = -1 + } + if (info.count == info.limit && info.offset + info.limit < info.max) { + info.next_page = info.offset + info.limit + } + else { + info.next_page = -1 + } + }, index: function(req, res){ res.render('staff/index') @@ -398,6 +435,9 @@ var staff = module.exports = { // /staff/users/:username users: { index: function(req, res){ + res.locals.pagination.count = res.locals.users.length + res.locals.pagination.max = res.locals.userCount + staff.paginate(req, res) res.render('staff/users/index') }, show: function(req, res){ @@ -412,6 +452,9 @@ var staff = module.exports = { }, media: function(req, res){ if (res.locals.profile) { + res.locals.pagination.count = res.locals.media.length + res.locals.pagination.max = res.locals.profile.mediaCount + staff.paginate(req, res) res.render('staff/users/media') } else { @@ -430,6 +473,9 @@ var staff = module.exports = { // /staff/projects/:name projects: { index: function(req, res){ + res.locals.pagination.count = res.locals.projects.length + res.locals.pagination.max = res.locals.projectCount + staff.paginate(req, res) res.render('staff/projects/index') }, show: function(req, res){ @@ -448,6 +494,9 @@ var staff = module.exports = { media: { index: function(req, res){ + res.locals.pagination.count = res.locals.media.length + res.locals.pagination.max = res.locals.mediaCount + staff.paginate(req, res) res.render('staff/media/index') }, show: function(req, res){ |
