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

194 lines
5.8 KiB
JavaScript
Raw Normal View History

2013-08-29 14:55:30 -04:00
$(document).ready(function() {
2013-09-17 13:07:30 -04:00
var createEl = document.getElementById('create'),
2013-08-29 14:55:30 -04:00
createModal = $('#create-modal'),
createSubmitBtn = document.getElementById('create-modal-go'),
createNameEl = $('#create-group-name'),
detailsModal = $('#group-details-modal'),
2013-09-01 23:19:16 -04:00
detailsSearch = detailsModal.find('#group-details-search'),
2013-09-03 16:05:01 -04:00
searchResults = detailsModal.find('#group-details-search-results'),
groupMembersEl = detailsModal.find('ul.current_members'),
detailsModalSave = detailsModal.find('.btn-primary'),
2013-09-01 23:19:16 -04:00
searchDelay = undefined,
2013-08-29 14:55:30 -04:00
listEl = $('#groups-list');
createEl.addEventListener('click', function() {
createModal.modal('show');
setTimeout(function() {
createNameEl.focus();
}, 250);
}, false);
createSubmitBtn.addEventListener('click', function() {
2013-09-17 13:07:30 -04:00
var submitObj = {
name: createNameEl.val(),
description: $('#create-group-desc').val()
},
2013-08-29 14:55:30 -04:00
errorEl = $('#create-modal-error'),
errorText;
socket.emit('api:groups.create', submitObj, function(err, data) {
if (err) {
2013-09-17 13:07:30 -04:00
switch (err) {
2013-08-29 14:55:30 -04:00
case 'group-exists':
errorText = '<strong>Please choose another name</strong><p>There seems to be a group with this name already.</p>';
2013-09-17 13:07:30 -04:00
break;
2013-08-29 14:55:30 -04:00
case 'name-too-short':
errorText = '<strong>Please specify a grou name</strong><p>A group name is required for administrative purposes.</p>';
2013-09-17 13:07:30 -04:00
break;
2013-08-29 14:55:30 -04:00
default:
errorText = '<strong>Uh-Oh</strong><p>There was a problem creating your group. Please try again later!</p>';
2013-09-17 13:07:30 -04:00
break;
2013-08-29 14:55:30 -04:00
}
errorEl.html(errorText).removeClass('hide');
} else {
createModal.modal('hide');
errorEl.addClass('hide');
createNameEl.val('');
ajaxify.go('admin/groups');
}
});
});
listEl.on('click', 'button[data-action]', function() {
2013-09-17 13:07:30 -04:00
var action = this.getAttribute('data-action'),
2013-08-29 14:55:30 -04:00
gid = $(this).parents('li[data-gid]').attr('data-gid');
2013-09-17 13:07:30 -04:00
switch (action) {
2013-08-29 14:55:30 -04:00
case 'delete':
bootbox.confirm('Are you sure you wish to delete this group?', function(confirm) {
if (confirm) {
socket.emit('api:groups.delete', gid, function(err, data) {
if (data === 'OK') ajaxify.go('admin/groups');
});
}
});
2013-09-17 13:07:30 -04:00
break;
2013-08-29 14:55:30 -04:00
case 'members':
socket.emit('api:groups.get', gid, function(err, groupObj) {
2013-09-17 13:07:30 -04:00
var formEl = detailsModal.find('form'),
2013-08-30 13:32:44 -04:00
nameEl = formEl.find('#change-group-name'),
descEl = formEl.find('#change-group-desc'),
memberIcon = document.createElement('li'),
numMembers = groupObj.members.length,
membersFrag = document.createDocumentFragment(),
memberIconImg, x;
2013-08-30 07:43:47 -04:00
2013-08-30 13:32:44 -04:00
nameEl.val(groupObj.name);
descEl.val(groupObj.description);
// Member list
2013-09-03 16:05:01 -04:00
memberIcon.innerHTML = '<img /><span></span>';
2013-08-30 13:32:44 -04:00
memberIconImg = memberIcon.querySelector('img');
2013-09-03 16:05:01 -04:00
memberIconLabel = memberIcon.querySelector('span');
2013-08-30 13:32:44 -04:00
if (numMembers > 0) {
2013-09-17 13:07:30 -04:00
for (x = 0; x < numMembers; x++) {
2013-09-01 23:19:16 -04:00
memberIconImg.src = groupObj.members[x].picture;
2013-09-03 16:05:01 -04:00
memberIconLabel.innerHTML = groupObj.members[x].username;
memberIcon.setAttribute('data-uid', groupObj.members[x].uid);
2013-08-30 13:32:44 -04:00
membersFrag.appendChild(memberIcon.cloneNode(true));
}
2013-09-03 16:05:01 -04:00
groupMembersEl.html('');
groupMembersEl[0].appendChild(membersFrag);
2013-08-30 13:32:44 -04:00
}
2013-09-03 16:05:01 -04:00
detailsModal.attr('data-gid', groupObj.gid);
2013-08-29 14:55:30 -04:00
detailsModal.modal('show');
});
2013-09-17 13:07:30 -04:00
break;
2013-08-29 14:55:30 -04:00
}
});
2013-09-01 23:19:16 -04:00
detailsSearch.on('keyup', function() {
2013-09-17 13:07:30 -04:00
var searchEl = this;
2013-09-01 23:19:16 -04:00
if (searchDelay) clearTimeout(searchDelay);
searchDelay = setTimeout(function() {
2013-09-17 13:07:30 -04:00
var searchText = searchEl.value,
2013-09-01 23:19:16 -04:00
resultsEl = document.getElementById('group-details-search-results'),
foundUser = document.createElement('li'),
foundUserImg, foundUserLabel;
foundUser.innerHTML = '<img /><span></span>';
foundUserImg = foundUser.getElementsByTagName('img')[0];
foundUserLabel = foundUser.getElementsByTagName('span')[0];
socket.emit('api:admin.user.search', searchText, function(err, results) {
if (!err && results && results.length > 0) {
2013-09-17 13:07:30 -04:00
var numResults = results.length,
2013-09-01 23:19:16 -04:00
resultsSlug = document.createDocumentFragment(),
x;
if (numResults > 4) numResults = 4;
2013-09-17 13:07:30 -04:00
for (x = 0; x < numResults; x++) {
2013-09-01 23:19:16 -04:00
foundUserImg.src = results[x].picture;
foundUserLabel.innerHTML = results[x].username;
foundUser.setAttribute('title', results[x].username);
2013-09-03 16:05:01 -04:00
foundUser.setAttribute('data-uid', results[x].uid);
2013-09-01 23:19:16 -04:00
resultsSlug.appendChild(foundUser.cloneNode(true));
}
resultsEl.innerHTML = '';
resultsEl.appendChild(resultsSlug);
} else resultsEl.innerHTML = '<li>No Users Found</li>';
});
}, 200);
});
2013-09-03 16:05:01 -04:00
searchResults.on('click', 'li[data-uid]', function() {
2013-09-17 13:07:30 -04:00
var userLabel = this,
2013-09-03 16:05:01 -04:00
uid = parseInt(this.getAttribute('data-uid')),
gid = detailsModal.attr('data-gid'),
members = [];
groupMembersEl.find('li[data-uid]').each(function() {
members.push(parseInt(this.getAttribute('data-uid')));
});
if (members.indexOf(uid) === -1) {
socket.emit('api:groups.join', {
gid: gid,
uid: uid
}, function(err, data) {
if (!err) {
groupMembersEl.append(userLabel.cloneNode(true));
}
});
}
});
groupMembersEl.on('click', 'li[data-uid]', function() {
2013-09-17 13:07:30 -04:00
var uid = this.getAttribute('data-uid'),
2013-09-03 16:05:01 -04:00
gid = detailsModal.attr('data-gid');
socket.emit('api:groups.leave', {
gid: gid,
uid: uid
}, function(err, data) {
if (!err) {
groupMembersEl.find('li[data-uid="' + uid + '"]').remove();
}
});
});
detailsModalSave.on('click', function() {
2013-09-17 13:07:30 -04:00
var formEl = detailsModal.find('form'),
2013-09-03 16:05:01 -04:00
nameEl = formEl.find('#change-group-name'),
descEl = formEl.find('#change-group-desc'),
gid = detailsModal.attr('data-gid');
socket.emit('api:groups.update', {
gid: gid,
values: {
name: nameEl.val(),
description: descEl.val()
}
}, function(err) {
if (!err) {
detailsModal.modal('hide');
ajaxify.go('admin/groups');
}
});
});
2013-08-29 14:55:30 -04:00
});