mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-01 19:46:01 +01:00
* 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
118 lines
3.0 KiB
JavaScript
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;
|
|
});
|