summaryrefslogtreecommitdiff
path: root/server/lib/views/staff.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2014-09-05 15:54:12 -0400
committerJules Laplace <jules@okfoc.us>2014-09-05 15:54:12 -0400
commit1082e3be99669671b6c745307131a7cb8d54eabc (patch)
tree91897ff420885672a2dc5390ca334b65828737d5 /server/lib/views/staff.js
parent1877aa4b508704634774e47385cf5429f67a4565 (diff)
pagination on all queries
Diffstat (limited to 'server/lib/views/staff.js')
-rw-r--r--server/lib/views/staff.js75
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){