From 534053763150533ec07fb6d2fbdc1fe45c1f92f0 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 17 Jul 2015 18:19:51 -0400 Subject: [PATCH] closed #2820 --- public/src/admin/manage/categories.js | 64 ++++++++++++------- src/categories.js | 9 +++ src/socket.io/admin/categories.js | 4 ++ .../admin/partials/categories/create.tpl | 14 ++++ 4 files changed, 67 insertions(+), 24 deletions(-) create mode 100644 src/views/admin/partials/categories/create.tpl diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index 6841702093..c2a814f49e 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -1,7 +1,7 @@ "use strict"; /*global define, socket, app, bootbox, templates, ajaxify, RELATIVE_PATH, Sortable */ -define('admin/manage/categories', function() { +define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-serializeobject.min'], function() { var Categories = {}, newCategoryId = -1, sortables; Categories.init = function() { @@ -13,7 +13,7 @@ define('admin/manage/categories', function() { Categories.render(payload); }); - $('button[data-action="create"]').on('click', Categories.create); + $('button[data-action="create"]').on('click', Categories.throwCreateModal); // Enable/Disable toggle events $('.categories').on('click', 'button[data-action="toggle"]', function() { @@ -26,31 +26,47 @@ define('admin/manage/categories', function() { }); }; - Categories.create = function() { - bootbox.prompt('Category Name', function(name) { - if (!name) { - return; + Categories.throwCreateModal = function() { + socket.emit('admin.categories.getNames', {}, function(err, categories) { + templates.parse('admin/partials/categories/create', { + categories: categories + }, function(html) { + var modal = bootbox.dialog({ + title: 'Create a Category', + message: html, + buttons: { + save: { + label: 'Save', + className: 'btn-primary', + callback: function() { + var formData = modal.find('form').serializeObject(); + formData.description = ''; + formData.icon = 'fa-comments'; + + Categories.create(formData); + } + } + } + }); + }); + }); + }; + + Categories.create = function(payload) { + socket.emit('admin.categories.create', payload, function(err, data) { + if(err) { + return app.alertError(err.message); } - socket.emit('admin.categories.create', { - name: name, - description: '', - icon: 'fa-comments' - }, function(err, data) { - if(err) { - return app.alertError(err.message); - } - - app.alert({ - alert_id: 'category_created', - title: 'Created', - message: 'Category successfully created!', - type: 'success', - timeout: 2000 - }); - - ajaxify.go('admin/manage/categories/' + data.cid); + app.alert({ + alert_id: 'category_created', + title: 'Created', + message: 'Category successfully created!', + type: 'success', + timeout: 2000 }); + + ajaxify.go('admin/manage/categories/' + data.cid); }); }; diff --git a/src/categories.js b/src/categories.js index 1a51c192e6..ac89bb4ac1 100644 --- a/src/categories.js +++ b/src/categories.js @@ -198,6 +198,15 @@ var async = require('async'), }); }; + Categories.getAllCategoryFields = function(fields, callback) { + async.waterfall([ + async.apply(db.getSortedSetRange, 'categories:cid', 0, -1), + function(cids, next) { + Categories.getMultipleCategoryFields(cids, fields, next); + } + ], callback); + }; + Categories.getCategoryFields = function(cid, fields, callback) { db.getObjectFields('category:' + cid, fields, callback); }; diff --git a/src/socket.io/admin/categories.js b/src/socket.io/admin/categories.js index 2fb7af1f7d..ea7ad27780 100644 --- a/src/socket.io/admin/categories.js +++ b/src/socket.io/admin/categories.js @@ -38,6 +38,10 @@ Categories.getAll = function(socket, data, callback) { }); }; +Categories.getNames = function(socket, data, callback) { + categories.getAllCategoryFields(['cid', 'name'], callback); +}; + Categories.purge = function(socket, cid, callback) { categories.purge(cid, callback); }; diff --git a/src/views/admin/partials/categories/create.tpl b/src/views/admin/partials/categories/create.tpl new file mode 100644 index 0000000000..70b813d4d2 --- /dev/null +++ b/src/views/admin/partials/categories/create.tpl @@ -0,0 +1,14 @@ +
+
+ + +
+
+ + +
+
\ No newline at end of file