2014-12-30 13:04:31 -05:00
"use strict" ;
2015-01-01 16:24:47 -05:00
/*global define, app, socket, ajaxify, RELATIVE_PATH, bootbox */
2014-12-30 13:04:31 -05:00
define ( 'admin/manage/category' , [
'uploader' ,
'admin/modules/iconSelect' ,
'admin/modules/colorpicker'
] , function ( uploader , iconSelect , colorpicker ) {
var Category = { } ;
Category . init = function ( ) {
var modified _categories = { } ;
2015-01-01 16:24:47 -05:00
function modified ( el ) {
var cid = $ ( el ) . parents ( 'form' ) . attr ( 'data-cid' ) ;
2015-01-01 15:35:22 -05:00
if ( cid ) {
2014-12-30 13:04:31 -05:00
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 ;
}
$ ( '.blockclass, form.category select' ) . each ( function ( ) {
var $this = $ ( this ) ;
$this . val ( $this . attr ( 'data-value' ) ) ;
} ) ;
function enableColorPicker ( idx , inputEl ) {
var $inputEl = $ ( inputEl ) ,
previewEl = $inputEl . parents ( '[data-cid]' ) . find ( '.preview-box' ) ;
colorpicker . enable ( $inputEl , function ( hsb , hex ) {
if ( $inputEl . attr ( 'data-name' ) === 'bgColor' ) {
previewEl . css ( 'background' , '#' + hex ) ;
} else if ( $inputEl . attr ( 'data-name' ) === 'color' ) {
previewEl . css ( 'color' , '#' + hex ) ;
}
modified ( $inputEl [ 0 ] ) ;
} ) ;
}
function setupEditTargets ( ) {
$ ( '[data-edit-target]' ) . on ( 'click' , function ( ) {
var $this = $ ( this ) ,
target = $ ( $this . attr ( 'data-edit-target' ) ) ;
$this . addClass ( 'hide' ) ;
target . removeClass ( 'hide' ) . on ( 'blur' , function ( ) {
$this . removeClass ( 'hide' ) . children ( 'span' ) . html ( this . value ) ;
$ ( this ) . addClass ( 'hide' ) ;
} ) . val ( $this . children ( 'span' ) . html ( ) ) ;
target . focus ( ) ;
} ) ;
}
2015-01-01 15:35:22 -05:00
// If any inputs have changed, prepare it for saving
$ ( 'form.category input, form.category select' ) . on ( 'change' , function ( ev ) {
modified ( ev . target ) ;
} ) ;
2014-12-30 13:04:31 -05:00
2015-01-01 15:35:22 -05:00
// Colour Picker
$ ( '[data-name="bgColor"], [data-name="color"]' ) . each ( enableColorPicker ) ;
2014-12-30 13:04:31 -05:00
2015-01-01 15:35:22 -05:00
// Options menu events
var optionsEl = $ ( '.options' ) ;
optionsEl . on ( 'click' , '.save' , save ) ;
optionsEl . on ( 'click' , '.revert' , ajaxify . refresh ) ;
optionsEl . on ( 'click' , '.purge' , function ( ) {
var categoryRow = $ ( this ) . parents ( 'li[data-cid]' ) ;
var cid = categoryRow . attr ( 'data-cid' ) ;
2014-12-30 13:04:31 -05:00
2015-01-01 15:35:22 -05:00
bootbox . confirm ( '<p class="lead">Do you really want to purge this category "' + $ ( 'form.category' ) . find ( 'input[data-name="name"]' ) . val ( ) + '"?</p><p><strong class="text-danger">Warning!</strong> All topics and posts in this category will be purged!</p>' , function ( confirm ) {
if ( ! confirm ) {
return ;
}
socket . emit ( 'admin.categories.purge' , cid , function ( err ) {
if ( err ) {
return app . alertError ( err . message ) ;
2014-12-30 13:04:31 -05:00
}
2015-01-01 15:35:22 -05:00
app . alertSuccess ( 'Category purged!' ) ;
categoryRow . remove ( ) ;
2014-12-30 13:04:31 -05:00
} ) ;
} ) ;
2015-01-01 15:35:22 -05:00
} ) ;
// Image Uploader
$ ( '.upload-button' ) . on ( 'click' , function ( ) {
var inputEl = $ ( this ) ,
cid = inputEl . attr ( 'data-cid' ) ;
uploader . open ( RELATIVE _PATH + '/admin/category/uploadpicture' , { cid : cid } , 0 , function ( imageUrlOnServer ) {
inputEl . val ( imageUrlOnServer ) ;
2015-01-01 16:24:47 -05:00
var previewBox = inputEl . parent ( ) . siblings ( '.category-preview' ) ;
2015-01-01 15:35:22 -05:00
previewBox . css ( 'background' , 'url(' + imageUrlOnServer + '?' + new Date ( ) . getTime ( ) + ')' )
. css ( 'background-size' , 'cover' ) ;
2015-01-01 16:24:47 -05:00
modified ( inputEl [ 0 ] ) ;
2015-01-01 15:35:22 -05:00
} ) ;
} ) ;
2015-01-01 16:24:47 -05:00
// Icon selection
$ ( '.category-preview' ) . on ( 'click' , function ( ev ) {
iconSelect . init ( $ ( this ) . find ( 'i' ) , modified ) ;
} ) ;
2015-01-01 15:35:22 -05:00
$ ( function ( ) {
2014-12-30 13:04:31 -05:00
// $('.admin-categories').on('click', '.permissions', function() {
// var cid = $(this).parents('li[data-cid]').attr('data-cid');
// Categories.launchPermissionsModal(cid);
// return false;
// });
2015-01-01 15:35:22 -05:00
// $('.admin-categories').on('click', '.delete-image', function() {
// var parent = $(this).parents('li[data-cid]'),
// inputEl = parent.find('.upload-button'),
// preview = parent.find('.preview-box'),
// bgColor = parent.find('.category_bgColor').val();
2014-12-30 13:04:31 -05:00
2015-01-01 15:35:22 -05:00
// inputEl.val('');
// modified(inputEl[0]);
2014-12-30 13:04:31 -05:00
2015-01-01 15:35:22 -05:00
// preview.css('background', bgColor);
2014-12-30 13:04:31 -05:00
2015-01-01 15:35:22 -05:00
// $(this).addClass('hide').hide();
// });
2014-12-30 13:04:31 -05:00
setupEditTargets ( ) ;
// $('button[data-action="setParent"]').on('click', function() {
// var cid = $(this).parents('[data-cid]').attr('data-cid'),
// modal = $('#setParent');
// modal.find('select').val($(this).attr('data-parentCid'));
// modal.attr('data-cid', cid).modal();
// });
// $('button[data-action="removeParent"]').on('click', function() {
// var cid = $(this).parents('[data-cid]').attr('data-cid');
// var payload= {};
// payload[cid] = {
// parentCid: 0
// };
// socket.emit('admin.categories.update', payload, function(err) {
// if (err) {
// return app.alertError(err.message);
// }
// ajaxify.go('admin/manage/categories/active');
// });
// });
// $('#setParent [data-cid]').on('click', function() {
// var modalEl = $('#setParent'),
// parentCid = $(this).attr('data-cid'),
// payload = {};
// payload[modalEl.attr('data-cid')] = {
// parentCid: parentCid
// };
// socket.emit('admin.categories.update', payload, function(err) {
// modalEl.one('hidden.bs.modal', function() {
// ajaxify.go('admin/manage/categories/active');
// });
// modalEl.modal('hide');
// });
// });
} ) ;
} ;
// Category.launchPermissionsModal = function(cid) {
// var modal = $('#category-permissions-modal'),
// searchEl = modal.find('#permission-search'),
// resultsEl = modal.find('.search-results.users'),
// groupsResultsEl = modal.find('.search-results.groups'),
// searchDelay;
// // Clear the search field and results
// searchEl.val('');
// resultsEl.html('');
// searchEl.off().on('keyup', function() {
// var searchEl = this,
// liEl;
// clearTimeout(searchDelay);
// searchDelay = setTimeout(function() {
// socket.emit('admin.categories.search', {
// username: searchEl.value,
// cid: cid
// }, function(err, results) {
// if(err) {
// return app.alertError(err.message);
// }
// templates.parse('admin/partials/categories/users', {
// users: results
// }, function(html) {
// resultsEl.html(html);
// });
// });
// }, 250);
// });
// Category.refreshPrivilegeList(cid);
// resultsEl.off().on('click', '[data-priv]', function(e) {
// var anchorEl = $(this),
// uid = anchorEl.parents('li[data-uid]').attr('data-uid'),
// privilege = anchorEl.attr('data-priv');
// e.preventDefault();
// e.stopPropagation();
// socket.emit('admin.categories.setPrivilege', {
// cid: cid,
// uid: uid,
// privilege: privilege,
// set: !anchorEl.hasClass('active')
// }, function(err) {
// if (err) {
// return app.alertError(err.message);
// }
// anchorEl.toggleClass('active', !anchorEl.hasClass('active'));
// Category.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);
// }
// templates.parse('admin/partials/categories/groups', {
// groups: results
// }, function(html) {
// groupsResultsEl.html(html);
// });
// });
// groupsResultsEl.off().on('click', '[data-priv]', function(e) {
// var anchorEl = $(this),
// name = anchorEl.parents('li[data-name]').attr('data-name'),
// privilege = anchorEl.attr('data-priv');
// e.preventDefault();
// e.stopPropagation();
// socket.emit('admin.categories.setGroupPrivilege', {
// cid: cid,
// name: name,
// privilege: privilege,
// set: !anchorEl.hasClass('active')
// }, function(err) {
// if (!err) {
// anchorEl.toggleClass('active');
// }
// });
// });
// modal.modal();
// };
// Category.refreshPrivilegeList = function (cid) {
// var modalEl = $('#category-permissions-modal'),
// memberList = $('.members');
// socket.emit('admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) {
// var membersLength = privilegeList.length,
// liEl, x, userObj;
// memberList.html('');
// if (membersLength > 0) {
// for(x = 0; x < membersLength; x++) {
// userObj = privilegeList[x];
// liEl = $('<li/>').attr('data-uid', userObj.uid).html('<img src="' + userObj.picture + '" title="' + userObj.username + '" />');
// memberList.append(liEl);
// }
// } else {
// liEl = $('<li/>').addClass('empty').html('None.');
// memberList.append(liEl);
// }
// });
// };
return Category ;
} ) ;