Files
NodeBB/public/src/admin/manage/groups.js
Barış Soner Uşaklı c3afe44686 Acp redesign (#11639)
* acp sidebar

* gap in nav

* remove shadow

* label fixes

* color fixes

* feat: settings page wip

* feat: scroll spy 👓

move social into general, store social in meta.config like other settings
write upgrade script

* remove social

* rermove openapi routes

* cleanup, highlight selected nav item

* more cleanup

* advanced margin top

* derp

* match design

* bring back version alert

fix homepage js, since it moved to general settings

* remove unused tpls

these moved to general settings

* remove more  css

* offcanvas for mobile

fix search

* add timeout

* add new props

* manage categories

* small fixes

* category-edit

* feat category page fixes

* add title to settings pages

add user settings page

* small fixes

* some more settings pages

* fix: plugin page titles

* more settings pages

* more padding

* more pages, add acp paginator.tpl

so it doesn't change when active theme changes

* remove placeholder

* dashboard table

* fix: openapi

* fix: controller tests

* use fonts from core

* some small fixes

* fix rep page

* refactor: fix name of upgrade script

* create category modal

group edit

* group/groups pages

* admins mods

* privs

* uploads

* missing margin

* more acp pages

* more pages

* plugins/rewards/widgets

* wrap rewards

* fix widgets

* fix widget clone button

* fix group acp edit link

* update search dropdown

* remove display block from tbody

* use less css

* remove some derp links

* remove striped tables

* remove p tags from lang files

* update email settings

* Update api.tpl

* move tag-whitelist
2023-05-31 11:54:48 -04:00

118 lines
3.0 KiB
JavaScript

'use strict';
define('admin/manage/groups', [
'categorySelector',
'slugify',
'api',
'bootbox',
'alerts',
], function (categorySelector, slugify, api, bootbox, alerts) {
const Groups = {};
Groups.init = function () {
handleCreate();
handleSearch();
$('.groups-list').on('click', '[data-action]', function () {
const el = $(this);
const action = el.attr('data-action');
const groupName = el.parents('tr[data-groupname]').attr('data-groupname');
switch (action) {
case 'delete':
bootbox.confirm('[[admin/manage/groups:alerts.confirm-delete]]', function (confirm) {
if (confirm) {
api.del(`/groups/${slugify(groupName)}`, {}).then(ajaxify.refresh).catch(alerts.error);
}
});
break;
}
});
};
function handleCreate() {
$('#create').on('click', function () {
app.parseAndTranslate('admin/partials/create_group_modal', {}).then((html) => {
html.modal('show');
html.on('shown.bs.modal', function () {
const createModal = $('#create-modal');
const createGroupName = $('#create-group-name');
const createModalGo = $('#create-modal-go');
const createModalError = $('#create-modal-error');
createGroupName.trigger('focus');
createModal.on('keypress', function (e) {
if (e.key === 'Enter') {
createModalGo.trigger('click');
}
});
html.on('hidden.bs.modal', function () {
html.modal('hide');
createModal.remove();
});
createModalGo.on('click', function () {
const submitObj = {
name: createGroupName.val(),
description: $('#create-group-desc').val(),
private: $('#create-group-private').is(':checked') ? 1 : 0,
hidden: $('#create-group-hidden').is(':checked') ? 1 : 0,
};
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');
});
});
});
});
});
}
function handleSearch() {
const queryEl = $('#group-search');
function doSearch() {
if (!queryEl.val()) {
return ajaxify.refresh();
}
$('.pagination').addClass('hide');
const groupsEl = $('.groups-list');
socket.emit('groups.search', {
query: queryEl.val(),
options: {
sort: 'date',
},
}, function (err, groups) {
if (err) {
return alerts.error(err);
}
app.parseAndTranslate('admin/manage/groups', 'groups', {
groups: groups,
categories: ajaxify.data.categories,
}, function (html) {
groupsEl.find('[data-groupname]').remove();
groupsEl.find('tbody').append(html);
});
});
}
queryEl.on('keyup', utils.debounce(doSearch, 200));
}
return Groups;
});