dashboard layout settings refactor
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
|
||||
************************************************************************/
|
||||
|
||||
define('views/preferences/fields/dashboard-tab-list', 'views/fields/array', function (Dep) {
|
||||
define('views/preferences/fields/dashboard-tab-list', ['views/fields/array'], function (Dep) {
|
||||
|
||||
return Dep.extend({
|
||||
|
||||
@@ -34,40 +34,71 @@ define('views/preferences/fields/dashboard-tab-list', 'views/fields/array', func
|
||||
Dep.prototype.setup.call(this);
|
||||
|
||||
this.translatedOptions = {};
|
||||
var list = this.model.get(this.name) || [];
|
||||
list.forEach(function (value) {
|
||||
|
||||
let list = this.model.get(this.name) || [];
|
||||
|
||||
list.forEach(value => {
|
||||
this.translatedOptions[value] = value;
|
||||
}, this);
|
||||
});
|
||||
},
|
||||
|
||||
getItemHtml: function (value) {
|
||||
value = value.toString();
|
||||
var valueSanitized = this.escapeValue(value);
|
||||
var translatedValue = this.escapeValue(this.translatedOptions[value] || value);
|
||||
|
||||
var html = '' +
|
||||
'<div class="list-group-item link-with-role form-inline" data-value="' + valueSanitized + '">' +
|
||||
'<div class="pull-left" style="width: 92%; display: inline-block;">' +
|
||||
'<input data-name="translatedValue" data-value="' + valueSanitized + '" class="role form-control input-sm" value="'+translatedValue+'">' +
|
||||
'</div>' +
|
||||
'<div style="width: 8%; display: inline-block; vertical-align: top;">' +
|
||||
'<a href="javascript:" class="pull-right" data-value="' + valueSanitized + '" data-action="removeValue"><span class="fas fa-times"></a>' +
|
||||
'</div><br style="clear: both;" />' +
|
||||
'</div>';
|
||||
let translatedValue = this.translatedOptions[value] || value;
|
||||
|
||||
return html;
|
||||
return $('<div>')
|
||||
.addClass('list-group-item link-with-role form-inline')
|
||||
.attr('data-value', value)
|
||||
.append(
|
||||
$('<div>')
|
||||
.addClass('pull-left')
|
||||
.css('width', '92%')
|
||||
.css('display', 'inline-block')
|
||||
.append(
|
||||
$('<input>')
|
||||
.attr('data-name', 'translatedValue')
|
||||
.attr('data-value', value)
|
||||
.addClass('role form-control input-sm')
|
||||
.attr('value', translatedValue)
|
||||
)
|
||||
)
|
||||
.append(
|
||||
$('<div>')
|
||||
.css('width', '8%')
|
||||
.css('display', 'inline-block')
|
||||
.css('vertical-align', 'top')
|
||||
.append(
|
||||
$('<a>')
|
||||
.attr('href', 'javascript:')
|
||||
.addClass('pull-right')
|
||||
.attr('data-value', value)
|
||||
.attr('data-action', 'removeValue')
|
||||
.append(
|
||||
$('<span>').addClass('fas fa-times')
|
||||
)
|
||||
)
|
||||
)
|
||||
.append(
|
||||
$('<br>').css('clear', 'both')
|
||||
)
|
||||
.get(0).outerHTML;
|
||||
},
|
||||
|
||||
fetch: function () {
|
||||
var data = Dep.prototype.fetch.call(this);
|
||||
let data = Dep.prototype.fetch.call(this);
|
||||
|
||||
data.translatedOptions = {};
|
||||
(data[this.name] || []).forEach(function (value) {
|
||||
var valueInternal = value.replace(/"/g, '\\"');
|
||||
data.translatedOptions[value] = this.$el.find('input[data-name="translatedValue"][data-value="'+valueInternal+'"]').val() || value;
|
||||
}, this);
|
||||
|
||||
(data[this.name] || []).forEach(value => {
|
||||
let valueInternal = value.replace(/"/g, '\\"');
|
||||
|
||||
data.translatedOptions[value] = this.$el
|
||||
.find('input[data-name="translatedValue"][data-value="'+valueInternal+'"]')
|
||||
.val() || value;
|
||||
});
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
},
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -182,8 +182,6 @@ define('views/settings/fields/dashboard-layout', ['views/fields/base', 'lib!grid
|
||||
layout.forEach((o, i) => {
|
||||
if (o.id === id) {
|
||||
layout.splice(i, 1);
|
||||
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -204,7 +202,6 @@ define('views/settings/fields/dashboard-layout', ['views/fields/base', 'lib!grid
|
||||
|
||||
var dashboardLayout = [];
|
||||
|
||||
|
||||
(data.dashboardTabList).forEach((name) => {
|
||||
var layout = [];
|
||||
var id = this.generateId();
|
||||
@@ -371,37 +368,52 @@ define('views/settings/fields/dashboard-layout', ['views/fields/base', 'lib!grid
|
||||
var actionsHtml = '';
|
||||
var actions2Html = '';
|
||||
|
||||
if (this.mode === 'edit') {
|
||||
actionsHtml +=
|
||||
'<a href="javascript:" class="pull-right" data-action="removeDashlet" data-id="'+id+'">'+
|
||||
'<span class="fas fa-times"></span>'+
|
||||
'</a>';
|
||||
if (this.isEditMode()) {
|
||||
actionsHtml += $('<a>')
|
||||
.attr('href', 'javascript:')
|
||||
.addClass('pull-right')
|
||||
.attr('data-action', 'removeDashlet')
|
||||
.attr('data-id', id)
|
||||
.append(
|
||||
$('<span>').addClass('fas fa-times')
|
||||
)
|
||||
.get(0)
|
||||
.outerHTML;
|
||||
|
||||
actions2Html +=
|
||||
'<a href="javascript:" class="pull-right" data-action="editDashlet" data-id="'+id+'" data-name="'+name+'">'+
|
||||
this.translate('Edit') +
|
||||
'</a>';
|
||||
actions2Html += $('<a>')
|
||||
.attr('href', 'javascript:')
|
||||
.addClass('pull-right')
|
||||
.attr('data-action', 'editDashlet')
|
||||
.attr('data-id', id)
|
||||
.attr('data-name', name)
|
||||
.text(this.translate('Edit'))
|
||||
.get(0)
|
||||
.outerHTML;
|
||||
}
|
||||
|
||||
var title = this.getOption(id, 'title');
|
||||
|
||||
if (title) {
|
||||
title = this.getHelper().escapeString(title);
|
||||
}
|
||||
let title = this.getOption(id, 'title');
|
||||
|
||||
if (!title) {
|
||||
title = this.translate(name, 'dashlets');
|
||||
}
|
||||
|
||||
var headerHtml =
|
||||
'<div class="panel-heading">' +
|
||||
actionsHtml + '<h4 class="panel-title">' + title + '</h4>' +
|
||||
'</div>';
|
||||
let headerHtml = $('<div>')
|
||||
.addClass('panel-heading')
|
||||
.append(actionsHtml)
|
||||
.append(
|
||||
$('<h4>').addClass('panel-title').text(title)
|
||||
)
|
||||
.get(0).outerHTML;
|
||||
|
||||
var $container = $(
|
||||
'<div class="grid-stack-item-content panel panel-default">' + headerHtml +
|
||||
'<div class="panel-body">'+actions2Html+'</div></div>'
|
||||
);
|
||||
let $container =
|
||||
$('<div>')
|
||||
.addClass('grid-stack-item-content panel panel-default')
|
||||
.append(headerHtml)
|
||||
.append(
|
||||
$('<div>')
|
||||
.addClass('panel-body')
|
||||
.append(actions2Html)
|
||||
);
|
||||
|
||||
$container.attr('data-id', id);
|
||||
$container.attr('data-name', name);
|
||||
|
||||
Reference in New Issue
Block a user