mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-29 10:06:13 +01:00
admin/manage/groups pagination
This commit is contained in:
@@ -7,12 +7,16 @@ define('admin/manage/groups', [
|
|||||||
], function(translator, components) {
|
], function(translator, components) {
|
||||||
var Groups = {};
|
var Groups = {};
|
||||||
|
|
||||||
|
var intervalId = 0;
|
||||||
|
|
||||||
Groups.init = function() {
|
Groups.init = function() {
|
||||||
var createModal = $('#create-modal'),
|
var createModal = $('#create-modal'),
|
||||||
createGroupName = $('#create-group-name'),
|
createGroupName = $('#create-group-name'),
|
||||||
createModalGo = $('#create-modal-go'),
|
createModalGo = $('#create-modal-go'),
|
||||||
createModalError = $('#create-modal-error');
|
createModalError = $('#create-modal-error');
|
||||||
|
|
||||||
|
handleSearch();
|
||||||
|
|
||||||
createModal.on('keypress', function(e) {
|
createModal.on('keypress', function(e) {
|
||||||
if (e.keyCode === 13) {
|
if (e.keyCode === 13) {
|
||||||
createModalGo.click();
|
createModalGo.click();
|
||||||
@@ -76,8 +80,41 @@ define('admin/manage/groups', [
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function handleSearch() {
|
||||||
|
function doSearch() {
|
||||||
|
if (!queryEl.val()) {
|
||||||
|
return ajaxify.refresh();
|
||||||
|
}
|
||||||
|
$('.pagination').addClass('hide');
|
||||||
|
var groupsEl = $('.groups-list');
|
||||||
|
socket.emit('groups.search', {
|
||||||
|
query: queryEl.val(),
|
||||||
|
options: {
|
||||||
|
sort: 'date'
|
||||||
|
}
|
||||||
|
}, function(err, groups) {
|
||||||
|
templates.parse('admin/manage/groups', 'groups', {
|
||||||
|
groups: groups
|
||||||
|
}, function(html) {
|
||||||
|
groupsEl.find('[data-groupname]').remove();
|
||||||
|
groupsEl.find('tr').after(html);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var queryEl = $('#group-search');
|
||||||
|
|
||||||
|
queryEl.on('keyup', function() {
|
||||||
|
if (intervalId) {
|
||||||
|
clearTimeout(intervalId);
|
||||||
|
intervalId = 0;
|
||||||
|
}
|
||||||
|
intervalId = setTimeout(doSearch, 200);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return Groups;
|
return Groups;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ define('forum/groups/list', ['forum/infinitescroll'], function(infinitescroll) {
|
|||||||
socket.emit('groups.search', {
|
socket.emit('groups.search', {
|
||||||
query: queryEl.val(),
|
query: queryEl.val(),
|
||||||
options: {
|
options: {
|
||||||
sort: sortEl.val()
|
sort: sortEl.val(),
|
||||||
|
filterHidden: true
|
||||||
}
|
}
|
||||||
}, function(err, groups) {
|
}, function(err, groups) {
|
||||||
templates.parse('partials/groups/list', {
|
templates.parse('partials/groups/list', {
|
||||||
|
|||||||
@@ -46,7 +46,9 @@ define('autocomplete', function() {
|
|||||||
source: function(request, response) {
|
source: function(request, response) {
|
||||||
socket.emit('groups.search', {
|
socket.emit('groups.search', {
|
||||||
query: request.term,
|
query: request.term,
|
||||||
options: {}
|
options: {
|
||||||
|
filterHidden: true
|
||||||
|
}
|
||||||
}, function(err, results) {
|
}, function(err, results) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return app.alertError(err.message);
|
return app.alertError(err.message);
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var async = require('async'),
|
var async = require('async'),
|
||||||
|
|
||||||
|
db = require('../../database'),
|
||||||
groups = require('../../groups'),
|
groups = require('../../groups'),
|
||||||
meta = require('../../meta'),
|
meta = require('../../meta'),
|
||||||
|
pagination = require('../../pagination'),
|
||||||
helpers = require('../helpers');
|
helpers = require('../helpers');
|
||||||
|
|
||||||
|
|
||||||
@@ -10,19 +13,40 @@ var groupsController = {};
|
|||||||
|
|
||||||
|
|
||||||
groupsController.list = function(req, res, next) {
|
groupsController.list = function(req, res, next) {
|
||||||
groups.getGroupsFromSet('groups:createtime', req.uid, 0, -1, function(err, groups) {
|
var page = parseInt(req.query.page, 10) || 1;
|
||||||
|
var groupsPerPage = 20;
|
||||||
|
var pageCount = 0;
|
||||||
|
|
||||||
|
async.waterfall([
|
||||||
|
function(next) {
|
||||||
|
db.getSortedSetRevRange('groups:createtime', 0, -1, next);
|
||||||
|
},
|
||||||
|
function(groupNames, next) {
|
||||||
|
groupNames = groupNames.filter(function(name) {
|
||||||
|
return name.indexOf(':privileges:') === -1 && name !== 'registered-users';
|
||||||
|
});
|
||||||
|
pageCount = Math.ceil(groupNames.length / groupsPerPage);
|
||||||
|
|
||||||
|
var start = (page - 1) * groupsPerPage;
|
||||||
|
var stop = start + groupsPerPage - 1;
|
||||||
|
|
||||||
|
groupNames = groupNames.slice(start, stop + 1);
|
||||||
|
groups.getGroupsData(groupNames, next);
|
||||||
|
},
|
||||||
|
function(groupData, next) {
|
||||||
|
groupData.forEach(groups.escapeGroupData);
|
||||||
|
next(null, {groups: groupData, pagination: pagination.create(page, pageCount)});
|
||||||
|
}
|
||||||
|
], function(err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return next(err);
|
return next(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
groups = groups.filter(function(group) {
|
|
||||||
return group && group.name.indexOf(':privileges:') === -1 && group.name !== 'registered-users';
|
|
||||||
});
|
|
||||||
|
|
||||||
res.render('admin/manage/groups', {
|
res.render('admin/manage/groups', {
|
||||||
groups: groups,
|
groups: data.groups,
|
||||||
yourid: req.user.uid
|
pagination: data.pagination,
|
||||||
});
|
yourid: req.user.uid
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -22,9 +22,12 @@ module.exports = function(Groups) {
|
|||||||
Groups.getGroupsData(groupNames, next);
|
Groups.getGroupsData(groupNames, next);
|
||||||
},
|
},
|
||||||
function(groupsData, next) {
|
function(groupsData, next) {
|
||||||
groupsData = groupsData.filter(function(group) {
|
groupsData = groupsData.filter(Boolean);
|
||||||
return group && !group.hidden;
|
if (options.filterHidden) {
|
||||||
});
|
groupsData = groupsData.filter(function(group) {
|
||||||
|
return !group.hidden;
|
||||||
|
});
|
||||||
|
}
|
||||||
groupsData.forEach(Groups.escapeGroupData);
|
groupsData.forEach(Groups.escapeGroupData);
|
||||||
Groups.sort(options.sort, groupsData, next);
|
Groups.sort(options.sort, groupsData, next);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ SocketGroups.search = function(socket, data, callback) {
|
|||||||
if (!data) {
|
if (!data) {
|
||||||
return callback(null, []);
|
return callback(null, []);
|
||||||
}
|
}
|
||||||
|
data.options = data.options || {};
|
||||||
if (!data.query) {
|
if (!data.query) {
|
||||||
var groupsPerPage = 15;
|
var groupsPerPage = 15;
|
||||||
groupsController.getGroupsFromSet(socket.uid, data.options.sort, 0, groupsPerPage - 1, function(err, data) {
|
groupsController.getGroupsFromSet(socket.uid, data.options.sort, 0, groupsPerPage - 1, function(err, data) {
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading"><i class="fa fa-group"></i> Groups List</div>
|
<div class="panel-heading"><i class="fa fa-group"></i> Groups List</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
|
||||||
|
<input id="group-search" type="text" class="form-control" placeholder="Search" /><br/>
|
||||||
|
|
||||||
<table class="table table-striped groups-list">
|
<table class="table table-striped groups-list">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Group Name</th>
|
<th>Group Name</th>
|
||||||
@@ -28,6 +31,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<!-- END groups -->
|
<!-- END groups -->
|
||||||
</table>
|
</table>
|
||||||
|
<!-- IMPORT partials/paginator.tpl -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user