Files
NodeBB/public/src/admin/manage/groups.js

129 lines
3.2 KiB
JavaScript
Raw Normal View History

2017-02-18 01:56:23 -07:00
'use strict';
define('admin/manage/groups', [
'categorySelector',
'slugify',
'api',
], function (categorySelector, slugify, api) {
var Groups = {};
2015-07-09 14:01:06 -04:00
var intervalId = 0;
Groups.init = function () {
2017-02-17 20:20:42 -07:00
var createModal = $('#create-modal');
var createGroupName = $('#create-group-name');
var createModalGo = $('#create-modal-go');
var createModalError = $('#create-modal-error');
2015-07-09 14:01:06 -04:00
handleSearch();
createModal.on('keypress', function (e) {
2014-11-12 16:56:11 -05:00
if (e.keyCode === 13) {
createModalGo.click();
}
});
$('#create').on('click', function () {
createModal.modal('show');
setTimeout(function () {
createGroupName.focus();
}, 250);
});
createModalGo.on('click', function () {
var submitObj = {
2017-02-17 20:20:42 -07:00
name: createGroupName.val(),
description: $('#create-group-desc').val(),
private: $('#create-group-private').is(':checked') ? 1 : 0,
hidden: $('#create-group-hidden').is(':checked') ? 1 : 0,
2017-02-17 20:20:42 -07:00
};
api.post('/groups', submitObj).then((response) => {
createModalError.addClass('hide');
createGroupName.val('');
createModal.on('hidden.bs.modal', function () {
ajaxify.go('admin/manage/groups/' + response.name);
});
createModal.modal('hide');
}).catch((err) => {
if (!utils.hasLanguageKey(err.status.message)) {
err.status.message = '[[admin/manage/groups:alerts.create-failure]]';
}
createModalError.translateHtml(err.status.message).removeClass('hide');
});
});
$('.groups-list').on('click', '[data-action]', function () {
2017-02-17 20:20:42 -07:00
var el = $(this);
var action = el.attr('data-action');
var groupName = el.parents('tr[data-groupname]').attr('data-groupname');
switch (action) {
2020-06-03 11:25:25 -04:00
case 'delete':
bootbox.confirm('[[admin/manage/groups:alerts.confirm-delete]]', function (confirm) {
if (confirm) {
api.del(`/groups/${slugify(groupName)}`, {}).then(ajaxify.refresh).catch(app.alertError);
2020-06-03 11:25:25 -04:00
}
});
break;
}
});
enableCategorySelectors();
};
function enableCategorySelectors() {
$('.groups-list [component="category-selector"]').each(function () {
var nameEncoded = $(this).parents('[data-name-encoded]').attr('data-name-encoded');
Categories refactor (#9257) * feat: wip categories pagination * feat: add subCategoriesPerPage setting * feat: add load more sub categories button to category page * fix: openapi spec * feat: show sub categories left on category page hide button when no more categories left * breaking: rename categories to allCategories on /search categories contains the search results * fix: spec * refactor: remove cidsPerPage * fix: tests * feat: use component for subcategories * fix: prevent negative subCategoriesLeft * feat: new category filter/search WIP * feat: remove categories from /tag * fix: dont load all categories when showing move modal * feat: allow adding custom categories to list * breaking: dont load entire category tree on post queue removed unused code add hooks to filter/selector add options to filter/selector * feat: make selector modal work again * feat: replace old search module * fix: topic move selector * feat: dont load all categories on create category modal * fix: fix more categorySelectors * feat: dont load entire category tree on group details page * feat: dont load all categories on home page and user settings page * feat: add pagination to /user/:userslug/categories * fix: update schemas * fix: more tests * fix: test * feat: flags page, dont return entire category tree * fix: flag test * feat: categories manage page dont load all categories allow changing root category clear caches properly * fix: spec * feat: admins&mods page dont load all categories * fix: spec * fix: dont load all children when opening dropdown * fix: on search results dont return all children * refactor: pass all options, rename options.cids to options.selectedCids * fix: #9266 * fix: index 0 * fix: spec * feat: #9265, add setObjectBulk * refactor: shoter updateOrder * feat: selectors on categories/category * fix: tests and search filter * fix: category update test * feat: pagination on acp categories page show order in set order modal * fix: allow drag&drop on pages > 1 in /admin/manage/categories * fix: teasers for deep nested categories fix sub category display on /category page * fix: spec * refactor: use eslint-disable-next-line * refactor: shorter
2021-02-07 15:09:52 -05:00
categorySelector.init($(this), {
onSelect: function (selectedCategory) {
ajaxify.go('admin/manage/privileges/' + selectedCategory.cid + '?group=' + nameEncoded);
},
showLinks: true,
});
});
}
2015-07-09 14:01:06 -04:00
function handleSearch() {
2017-02-18 18:55:33 -07:00
var queryEl = $('#group-search');
2015-07-09 14:01:06 -04:00
function doSearch() {
if (!queryEl.val()) {
return ajaxify.refresh();
}
$('.pagination').addClass('hide');
var groupsEl = $('.groups-list');
socket.emit('groups.search', {
query: queryEl.val(),
options: {
2017-02-17 19:31:21 -07:00
sort: 'date',
},
}, function (err, groups) {
2016-08-16 19:46:59 +02:00
if (err) {
return app.alertError(err.message);
}
app.parseAndTranslate('admin/manage/groups', 'groups', {
2017-02-17 19:31:21 -07:00
groups: groups,
categories: ajaxify.data.categories,
}, function (html) {
groupsEl.find('[data-groupname]').remove();
groupsEl.find('tbody').append(html);
enableCategorySelectors();
2015-07-09 14:01:06 -04:00
});
});
}
queryEl.on('keyup', function () {
2015-07-09 14:01:06 -04:00
if (intervalId) {
clearTimeout(intervalId);
intervalId = 0;
}
intervalId = setTimeout(doSearch, 200);
});
}
return Groups;
});