mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-12 00:45:47 +01:00
added some missing files from previous commits, fixed setParent mechanic which broke after I refactored, #2463
This commit is contained in:
@@ -296,6 +296,17 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.category-settings-form {
|
||||||
|
h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
.pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
.pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.category-preview {
|
.category-preview {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
|
|||||||
16
public/less/generics.less
Normal file
16
public/less/generics.less
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
.category-list {
|
||||||
|
padding: 0;
|
||||||
|
|
||||||
|
li {
|
||||||
|
.inline-block;
|
||||||
|
.pointer;
|
||||||
|
padding: 0.5em;
|
||||||
|
margin: 0.25em;
|
||||||
|
.border-radius(3px);
|
||||||
|
|
||||||
|
&.disabled {
|
||||||
|
-webkit-filter: grayscale(30%);
|
||||||
|
.opacity(0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -126,6 +126,23 @@ define('admin/manage/category', [
|
|||||||
iconSelect.init($(this).find('i'), modified);
|
iconSelect.init($(this).find('i'), modified);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Parent Category Selector
|
||||||
|
$('button[data-action="setParent"]').on('click', Category.launchParentSelector);
|
||||||
|
$('button[data-action="removeParent"]').on('click', function() {
|
||||||
|
var payload= {};
|
||||||
|
payload[ajaxify.variables.get('cid')] = {
|
||||||
|
parentCid: 0
|
||||||
|
};
|
||||||
|
|
||||||
|
socket.emit('admin.categories.update', payload, function(err) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
ajaxify.refresh();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
setupEditTargets();
|
||||||
Category.setupPrivilegeTable();
|
Category.setupPrivilegeTable();
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
@@ -152,169 +169,12 @@ define('admin/manage/category', [
|
|||||||
// $(this).addClass('hide').hide();
|
// $(this).addClass('hide').hide();
|
||||||
// });
|
// });
|
||||||
|
|
||||||
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);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// };
|
|
||||||
|
|
||||||
Category.setupPrivilegeTable = function() {
|
Category.setupPrivilegeTable = function() {
|
||||||
var searchEl = $('.privilege-search'),
|
var searchEl = $('.privilege-search'),
|
||||||
searchObj = autocomplete.user(searchEl);
|
searchObj = autocomplete.user(searchEl);
|
||||||
@@ -378,5 +238,36 @@ define('admin/manage/category', [
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Category.launchParentSelector = function() {
|
||||||
|
socket.emit('categories.get', function(err, categories) {
|
||||||
|
templates.parse('partials/category_list', {
|
||||||
|
categories: categories
|
||||||
|
}, function(html) {
|
||||||
|
var modal = bootbox.dialog({
|
||||||
|
message: html,
|
||||||
|
title: 'Set Parent Category'
|
||||||
|
});
|
||||||
|
|
||||||
|
modal.find('li[data-cid]').on('click', function() {
|
||||||
|
var parentCid = $(this).attr('data-cid'),
|
||||||
|
payload = {};
|
||||||
|
|
||||||
|
payload[ajaxify.variables.get('cid')] = {
|
||||||
|
parentCid: parentCid
|
||||||
|
};
|
||||||
|
|
||||||
|
socket.emit('admin.categories.update', payload, function(err) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
modal.modal('hide');
|
||||||
|
ajaxify.refresh();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return Category;
|
return Category;
|
||||||
});
|
});
|
||||||
@@ -129,7 +129,7 @@ function getGlobalField(field, callback) {
|
|||||||
|
|
||||||
adminController.categories.get = function(req, res, next) {
|
adminController.categories.get = function(req, res, next) {
|
||||||
async.parallel({
|
async.parallel({
|
||||||
category: async.apply(categories.getCategoryData, req.params.category_id),
|
category: async.apply(categories.getCategories, [req.params.category_id], req.user.uid),
|
||||||
privileges: async.apply(privileges.categories.list, req.params.category_id)
|
privileges: async.apply(privileges.categories.list, req.params.category_id)
|
||||||
}, function(err, data) {
|
}, function(err, data) {
|
||||||
if (err) {
|
if (err) {
|
||||||
@@ -137,7 +137,7 @@ adminController.categories.get = function(req, res, next) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
res.render('admin/manage/category', {
|
res.render('admin/manage/category', {
|
||||||
category: data.category,
|
category: data.category[0],
|
||||||
privileges: data.privileges
|
privileges: data.privileges
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -68,8 +68,10 @@ module.exports = function(Meta) {
|
|||||||
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css";';
|
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css";';
|
||||||
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/textcomplete/jquery.textcomplete.css";';
|
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/textcomplete/jquery.textcomplete.css";';
|
||||||
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";';
|
source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";';
|
||||||
|
source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/generics.less";';
|
||||||
|
|
||||||
var acpSource = '\n@import "..' + path.sep + 'public/less/admin/admin";\n' + source;
|
var acpSource = '\n@import "..' + path.sep + 'public/less/admin/admin";\n' + source;
|
||||||
|
acpSource += '\n@import "..' + path.sep + 'public/less/generics.less";';
|
||||||
acpSource += '\n@import (inline) "..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";';
|
acpSource += '\n@import (inline) "..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";';
|
||||||
|
|
||||||
source = '@import "./theme";\n' + source;
|
source = '@import "./theme";\n' + source;
|
||||||
|
|||||||
@@ -3,24 +3,29 @@
|
|||||||
<div class="col-md-9">
|
<div class="col-md-9">
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading"><i class="fa fa-folder"></i> Category Settings</div>
|
<div class="panel-heading"><i class="fa fa-folder"></i> Category Settings</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body category-settings-form">
|
||||||
<h3 data-edit-target="#cid-{category.cid}-name"><span>{category.name}</span> <small><i class="fa fa-edit"></i></small></h3>
|
<fieldset>
|
||||||
<input id="cid-{category.cid}-name" type="text" class="form-control hide" placeholder="Category Name" data-name="name" value="{category.name}" />
|
<div class="col-xs-12">
|
||||||
<h4 data-edit-target="#cid-{category.cid}-description"><span>{category.description}</span> <small><i class="fa fa-edit"></i></small></h4>
|
<h3 data-edit-target="#cid-{category.cid}-name"><span>{category.name}</span> <small><i class="fa fa-edit"></i></small></h3>
|
||||||
<input id="cid-{category.cid}-description" data-name="description" placeholder="Category Description" value="{category.description}" class="form-control category_description input-sm description hide"></input>
|
<input id="cid-{category.cid}-name" type="text" class="form-control hide" placeholder="Category Name" data-name="name" value="{category.name}" />
|
||||||
|
<h4 data-edit-target="#cid-{category.cid}-description"><span>{category.description}</span> <small><i class="fa fa-edit"></i></small></h4>
|
||||||
|
<input id="cid-{category.cid}-description" data-name="description" placeholder="Category Description" value="{category.description}" class="form-control category_description input-sm description hide"></input>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="col-xs-12">
|
<div class="col-xs-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="cid-{category.cid}-parentCid">Parent Category</label>
|
<label for="cid-{category.cid}-parentCid">Parent Category</label>
|
||||||
<!-- IF categories.parent.name -->
|
<!-- IF category.parent.name -->
|
||||||
|
<br />
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button type="button" class="btn btn-default" data-action="setParent" data-parentCid="{category.parent.cid}"><i class="fa {category.parent.icon}"></i> {category.parent.name}</button>
|
<button type="button" class="btn btn-default" data-action="setParent" data-parentCid="{category.parent.cid}"><i class="fa {category.parent.icon}"></i> {category.parent.name}</button>
|
||||||
<button type="button" class="btn btn-warning" data-action="removeParent" data-parentCid="{category.parent.cid}"><i class="fa fa-times"></i></button>
|
<button type="button" class="btn btn-warning" data-action="removeParent" data-parentCid="{category.parent.cid}"><i class="fa fa-times"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<!-- ELSE -->
|
<!-- ELSE -->
|
||||||
<button type="button" class="btn btn-default form-control" data-action="setParent"><i class="fa fa-sitemap"></i> (None)</button>
|
<button type="button" class="btn btn-default form-control" data-action="setParent"><i class="fa fa-sitemap"></i> (None)</button>
|
||||||
<!-- ENDIF categories.parent.name -->
|
<!-- ENDIF category.parent.name -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|||||||
32
src/views/admin/partials/categories/privileges.tpl
Normal file
32
src/views/admin/partials/categories/privileges.tpl
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<div class="privilege-table-container">
|
||||||
|
<table class="table table-striped table-hover privilege-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="2">User</th>
|
||||||
|
<!-- BEGIN privileges.labels.users -->
|
||||||
|
<th class="text-center">{privileges.labels.users.name}</th>
|
||||||
|
<!-- END privileges.labels.users -->
|
||||||
|
</tr>
|
||||||
|
<!-- BEGIN privileges.users -->
|
||||||
|
<tr data-uid="{uid}">
|
||||||
|
<td><img src="{picture}" title="{username}" /></td>
|
||||||
|
<td>{username}</td>
|
||||||
|
{function.spawnPrivilegeStates, privileges}
|
||||||
|
</tr>
|
||||||
|
<!-- END privileges.users -->
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table class="table table-striped table-hover privilege-table">
|
||||||
|
<tr>
|
||||||
|
<th colspan="1">Group</th>
|
||||||
|
<!-- BEGIN privileges.labels.groups -->
|
||||||
|
<th class="text-center">{privileges.labels.groups.name}</th>
|
||||||
|
<!-- END privileges.labels.groups -->
|
||||||
|
</tr>
|
||||||
|
<!-- BEGIN privileges.groups -->
|
||||||
|
<tr data-group-slug="{privileges.groups.slug}">
|
||||||
|
<td>{privileges.groups.name}</td>
|
||||||
|
{function.spawnPrivilegeStates, privileges}
|
||||||
|
</tr>
|
||||||
|
<!-- END privileges.groups -->
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user