You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.2 KiB
JavaScript
87 lines
2.2 KiB
JavaScript
define('forum/groups/list', ['forum/infinitescroll', 'benchpress', 'api'], function (infinitescroll, Benchpress, api) {
|
|
var Groups = {};
|
|
|
|
Groups.init = function () {
|
|
infinitescroll.init(Groups.loadMoreGroups);
|
|
|
|
// Group creation
|
|
$('button[data-action="new"]').on('click', function () {
|
|
bootbox.prompt('[[groups:new-group.group_name]]', function (name) {
|
|
if (name && name.length) {
|
|
api.post('/groups', {
|
|
name: name,
|
|
}, (res) => {
|
|
ajaxify.go('groups/' + res.slug);
|
|
}, err => app.alertError(err.status.message));
|
|
}
|
|
});
|
|
});
|
|
var params = utils.params();
|
|
$('#search-sort').val(params.sort || 'alpha');
|
|
|
|
// Group searching
|
|
$('#search-text').on('keyup', Groups.search);
|
|
$('#search-button').on('click', Groups.search);
|
|
$('#search-sort').on('change', function () {
|
|
ajaxify.go('groups?sort=' + $('#search-sort').val());
|
|
});
|
|
};
|
|
|
|
Groups.loadMoreGroups = function (direction) {
|
|
if (direction < 0) {
|
|
return;
|
|
}
|
|
|
|
infinitescroll.loadMore('groups.loadMore', {
|
|
sort: $('#search-sort').val(),
|
|
after: $('[component="groups/container"]').attr('data-nextstart'),
|
|
}, function (data, done) {
|
|
if (data && data.groups.length) {
|
|
Benchpress.parse('partials/groups/list', {
|
|
groups: data.groups,
|
|
}, function (html) {
|
|
$('#groups-list').append(html);
|
|
done();
|
|
});
|
|
} else {
|
|
done();
|
|
}
|
|
|
|
if (data && data.nextStart) {
|
|
$('[component="groups/container"]').attr('data-nextstart', data.nextStart);
|
|
}
|
|
});
|
|
};
|
|
|
|
Groups.search = function () {
|
|
var groupsEl = $('#groups-list');
|
|
var queryEl = $('#search-text');
|
|
var sortEl = $('#search-sort');
|
|
|
|
socket.emit('groups.search', {
|
|
query: queryEl.val(),
|
|
options: {
|
|
sort: sortEl.val(),
|
|
filterHidden: true,
|
|
showMembers: true,
|
|
hideEphemeralGroups: true,
|
|
},
|
|
}, function (err, groups) {
|
|
if (err) {
|
|
return app.alertError(err.message);
|
|
}
|
|
groups = groups.filter(function (group) {
|
|
return group.name !== 'registered-users' && group.name !== 'guests';
|
|
});
|
|
Benchpress.parse('partials/groups/list', {
|
|
groups: groups,
|
|
}, function (html) {
|
|
groupsEl.empty().append(html);
|
|
});
|
|
});
|
|
return false;
|
|
};
|
|
|
|
return Groups;
|
|
});
|