Files
NodeBB/public/src/admin/general/navigation.js

149 lines
4.1 KiB
JavaScript
Raw Normal View History

2015-02-25 15:01:28 -05:00
"use strict";
2015-11-06 13:33:27 -05:00
/* global define, app, ajaxify, socket, templates */
2015-02-25 15:01:28 -05:00
define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], function (translator, iconSelect, jqueryui) {
2017-02-17 20:20:42 -07:00
var navigation = {};
var available;
2015-02-25 15:01:28 -05:00
navigation.init = function () {
2015-07-06 14:33:43 -04:00
available = ajaxify.data.available;
2015-02-25 15:01:28 -05:00
$('#enabled .unescape').each(function () {
2015-11-06 13:33:27 -05:00
$(this).val(translator.unescape($(this).val()));
});
2015-09-26 13:00:53 -04:00
translator.translate($('#available').html(), function (html) {
$('#available').html(translator.unescape(html))
2016-08-29 21:53:12 +00:00
.find('li .drag-item').draggable({
connectToSortable: '#active-navigation',
helper: 'clone',
distance: 10,
2017-02-17 19:31:21 -07:00
stop: drop,
2016-08-29 21:53:12 +00:00
});
2015-02-25 17:12:17 -05:00
});
2016-08-29 17:42:29 +00:00
2016-08-29 21:53:12 +00:00
$('#active-navigation').sortable().droppable({
2017-02-17 19:31:21 -07:00
accept: $('#available li .drag-item'),
2015-09-26 13:00:53 -04:00
});
$('#enabled').on('click', '.iconPicker', function () {
2015-09-26 13:00:53 -04:00
var iconEl = $(this).find('i');
iconSelect.init(iconEl, function (el) {
2015-09-26 13:00:53 -04:00
var newIconClass = el.attr('value');
var index = iconEl.parents('[data-index]').attr('data-index');
2015-10-05 22:41:11 -04:00
$('#active-navigation [data-index="' + index + '"] i').attr('class', 'fa fa-fw ' + newIconClass);
2015-09-26 13:00:53 -04:00
iconEl.siblings('[name="iconClass"]').val(newIconClass);
2015-12-24 10:52:32 +02:00
iconEl.siblings('.change-icon-link').toggleClass('hidden', !!newIconClass);
2015-02-25 16:47:19 -05:00
});
2015-09-26 13:00:53 -04:00
});
2015-10-05 22:41:11 -04:00
$('#active-navigation').on('click', 'li', onSelect);
2015-09-26 13:00:53 -04:00
$('#enabled')
.on('click', '.delete', remove)
.on('click', '.toggle', toggle);
2015-02-25 16:19:14 -05:00
2015-02-25 16:52:50 -05:00
$('#save').on('click', save);
2015-02-25 15:01:28 -05:00
};
2015-09-26 13:00:53 -04:00
function onSelect() {
var clickedIndex = $(this).attr('data-index');
2015-10-05 22:41:11 -04:00
$('#active-navigation li').removeClass('active');
2015-09-26 13:00:53 -04:00
$(this).addClass('active');
2015-09-26 15:36:56 -04:00
var detailsForm = $('#enabled').children('[data-index="' + clickedIndex + '"]');
2015-09-26 13:00:53 -04:00
$('#enabled li').addClass('hidden');
if (detailsForm.length) {
detailsForm.removeClass('hidden');
}
return false;
}
2015-02-25 16:47:19 -05:00
function drop(ev, ui) {
2017-02-17 20:20:42 -07:00
var id = ui.helper.attr('data-id');
var el = $('#active-navigation [data-id="' + id + '"]');
var data = id === 'custom' ? {iconClass: 'fa-navicon'} : available[id];
2015-02-25 16:47:19 -05:00
2015-02-25 17:26:44 -05:00
data.enabled = false;
2016-08-25 22:16:54 +03:00
data.index = (parseInt($('#enabled').children().last().attr('data-index'), 10) || 0) + 1;
2015-02-25 17:26:44 -05:00
templates.parse('admin/general/navigation', 'navigation', {navigation: [data]}, function (li) {
translator.translate(li, function (li) {
li = $(translator.unescape(li));
el.after(li);
el.remove();
});
2015-02-25 16:47:19 -05:00
});
2015-09-26 13:00:53 -04:00
templates.parse('admin/general/navigation', 'enabled', {enabled: [data]}, function (li) {
translator.translate(li, function (li) {
li = $(translator.unescape(li));
$('#enabled').append(li);
componentHandler.upgradeDom();
});
2015-09-26 13:00:53 -04:00
});
2015-02-25 16:47:19 -05:00
}
function save() {
2015-02-25 15:01:28 -05:00
var nav = [];
2015-09-26 13:00:53 -04:00
var indices = [];
$('#active-navigation li').each(function () {
2015-09-26 13:00:53 -04:00
indices.push($(this).attr('data-index'));
});
indices.forEach(function (index) {
2015-09-26 15:36:56 -04:00
var el = $('#enabled').children('[data-index="' + index + '"]');
2017-02-17 20:20:42 -07:00
var form = el.find('form').serializeArray();
var data = {};
var properties = {};
2015-02-25 15:01:28 -05:00
form.forEach(function (input) {
2015-05-19 14:57:05 -04:00
if (input.name.slice(0, 9) === 'property:' && input.value === 'on') {
properties[input.name.slice(9)] = true;
} else {
data[input.name] = translator.escape(input.value);
}
2015-02-25 15:01:28 -05:00
});
2015-05-19 14:57:05 -04:00
data.properties = {};
for (var prop in properties) {
if (properties.hasOwnProperty(prop)) {
data.properties[prop] = properties[prop];
}
}
2015-02-25 15:01:28 -05:00
nav.push(data);
});
socket.emit('admin.navigation.save', nav, function (err) {
2015-02-25 15:01:28 -05:00
if (err) {
app.alertError(err.message);
} else {
app.alertSuccess('Successfully saved navigation');
}
});
}
2015-02-25 16:47:19 -05:00
function remove() {
2015-09-26 13:00:53 -04:00
var index = $(this).parents('[data-index]').attr('data-index');
2015-10-05 22:41:11 -04:00
$('#active-navigation [data-index="' + index + '"]').remove();
2015-09-26 13:00:53 -04:00
$('#enabled [data-index="' + index + '"]').remove();
return false;
2015-02-25 16:47:19 -05:00
}
function toggle() {
2017-02-17 20:20:42 -07:00
var btn = $(this);
var disabled = btn.hasClass('btn-success');
translator.translate(disabled ? '[[admin/general/navigation:btn.disable]]' : '[[admin/general/navigation:btn.enable]]', function (html) {
btn.toggleClass('btn-warning').toggleClass('btn-success').html(html);
btn.parents('li').find('[name="enabled"]').val(disabled ? 'on' : '');
});
2015-02-25 16:47:19 -05:00
return false;
2015-02-25 16:19:14 -05:00
}
2015-02-25 15:01:28 -05:00
return navigation;
});