"use strict";
/*global define, socket, app, bootbox, templates, ajaxify, RELATIVE_PATH*/
define(['uploader'], function(uploader) {
var Categories = {};
Categories.init = function() {
var modified_categories = {};
function modified(el) {
var cid = $(el).parents('li').attr('data-cid');
if(cid) {
modified_categories[cid] = modified_categories[cid] || {};
modified_categories[cid][$(el).attr('data-name')] = $(el).val();
}
}
function save() {
if(Object.keys(modified_categories).length) {
socket.emit('admin.categories.update', modified_categories, function(err, result) {
if (err) {
return app.alertError(err.message);
}
if (result && result.length) {
app.alert({
title: 'Updated Categories',
message: 'Category IDs ' + result.join(', ') + ' was successfully updated.',
type: 'success',
timeout: 2000
});
}
});
modified_categories = {};
}
return false;
}
function select_icon(el) {
var selected = el.attr('class').replace('fa-2x', '').replace('fa', '').replace(/\s+/g, '');
$('#icons .selected').removeClass('selected');
if (selected === '') {
selected = 'fa-doesnt-exist';
}
if (selected) {
$('#icons .fa-icons .fa.' + selected).parent().addClass('selected');
}
bootbox.confirm('
Select an icon. ' + $('#icons').html(), function(confirm) {
if (confirm) {
var iconClass = $('.bootbox .selected').children(':first').attr('class');
el.attr('class', iconClass + ' fa-2x');
// remove the 'fa ' from the class name, just need the icon name itself
var categoryIconClass = iconClass.replace('fa ', '');
if(categoryIconClass === 'fa-doesnt-exist') {
categoryIconClass = '';
}
el.val(categoryIconClass);
el.attr('value', categoryIconClass);
modified(el);
}
});
setTimeout(function() { //bootbox was rewritten for BS3 and I had to add this timeout for the previous code to work. TODO: to look into
$('.bootbox .col-md-3').on('click', function() {
$('.bootbox .selected').removeClass('selected');
$(this).addClass('selected');
});
}, 500);
}
function update_blockclass(el) {
el.parentNode.parentNode.className = 'entry-row ' + el.value;
}
function updateCategoryOrders() {
var categories = $('.admin-categories #entry-container').children();
for(var i = 0; i ')
.attr('data-uid', resultObj.uid)
.html('' +
'
' +
'Read ' +
'Write ' +
'Moderator ' +
'
' +
'
' +
' ' + resultObj.username);
resultsEl.append(liEl);
}
});
}, 250);
});
Categories.refreshPrivilegeList(cid);
resultsEl.off().on('click', '[data-priv]', function(e) {
var btnEl = $(this),
uid = btnEl.parents('li[data-uid]').attr('data-uid'),
privilege = btnEl.attr('data-priv');
e.preventDefault();
socket.emit('admin.categories.setPrivilege', {
cid: cid,
uid: uid,
privilege: privilege,
set: !btnEl.hasClass('active')
}, function(err, privileges) {
btnEl.toggleClass('active', privileges[privilege]);
Categories.refreshPrivilegeList(cid);
});
});
modal.off().on('click', '.members li > img', function() {
searchEl.val($(this).attr('title'));
searchEl.keyup();
});
// User Groups and privileges
socket.emit('admin.categories.groupsList', cid, function(err, results) {
if(err) {
return app.alertError(err.message);
}
var numResults = results.length,
trEl,
resultObj;
groupsResultsEl.empty();
for(var x = 0; x < numResults; x++) {
resultObj = results[x];
trEl = $(' ')
.attr('data-name', resultObj.name)
.html('' + resultObj.name + ' ' +
'' +
'' +
'Read ' +
'Write ' +
'
' +
' ');
groupsResultsEl.append(trEl);
}
});
groupsResultsEl.off().on('click', '[data-gpriv]', function(e) {
var btnEl = $(this),
name = btnEl.parents('tr[data-name]').attr('data-name'),
privilege = btnEl.attr('data-gpriv');
e.preventDefault();
socket.emit('admin.categories.setGroupPrivilege', {
cid: cid,
name: name,
privilege: privilege,
set: !btnEl.hasClass('active')
}, function(err) {
if (!err) {
btnEl.toggleClass('active');
}
});
});
modal.modal();
};
Categories.refreshPrivilegeList = function (cid) {
var modalEl = $('#category-permissions-modal'),
readMembers = modalEl.find('#category-permissions-read'),
writeMembers = modalEl.find('#category-permissions-write'),
moderatorsEl = modalEl.find('#category-permissions-mods');
socket.emit('admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) {
var readLength = privilegeList['+r'].length,
writeLength = privilegeList['+w'].length,
modLength = privilegeList.mods.length,
liEl, x, userObj;
readMembers.html('');
if (readLength > 0) {
for(x = 0; x < readLength; x++) {
userObj = privilegeList['+r'][x];
liEl = $(' ').attr('data-uid', userObj.uid).html(' ');
readMembers.append(liEl);
}
} else {
liEl = $(' ').addClass('empty').html('All users can read and see this category');
readMembers.append(liEl);
}
writeMembers.html('');
if (writeLength > 0) {
for(x=0;x ').attr('data-uid', userObj.uid).html(' ');
writeMembers.append(liEl);
}
} else {
liEl = $(' ').addClass('empty').html('All users can write to this category');
writeMembers.append(liEl);
}
moderatorsEl.html('');
if (modLength > 0) {
for(x = 0;x < modLength; x++) {
userObj = privilegeList.mods[x];
liEl = $(' ').attr('data-uid', userObj.uid).html(' ');
moderatorsEl.append(liEl);
}
} else {
liEl = $(' ').addClass('empty').html('No moderators');
moderatorsEl.append(liEl);
}
});
};
return Categories;
});