diff --git a/application/Espo/Jobs/Cleanup.php b/application/Espo/Jobs/Cleanup.php index 7ec39969cc..0d9a4ecb34 100644 --- a/application/Espo/Jobs/Cleanup.php +++ b/application/Espo/Jobs/Cleanup.php @@ -76,7 +76,10 @@ class Cleanup extends \Espo\Core\Jobs\Base $pdo = $this->getEntityManager()->getPDO(); $query = "DELETE FROM `job` WHERE DATE(modified_at) < ".$pdo->quote($this->getCleanupJobFromDate())." AND status <> 'Pending'"; + $sth = $pdo->prepare($query); + $sth->execute(); + $query = "DELETE FROM `job` WHERE DATE(modified_at) < ".$pdo->quote($this->getCleanupJobFromDate())." AND status = 'Pending' AND deleted = 1"; $sth = $pdo->prepare($query); $sth->execute(); } diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Admin.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Admin.json index 448bd5da9a..5b04d79d0c 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Admin.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Admin.json @@ -1,5 +1,6 @@ { "layouts": { + "detailConvert": "Converti Lead", "listForAccount": "Elenco (per Account)", "listForContact": "Lista (per contatto)" } diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Call.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Call.json index 9d996fe1df..f81316ad77 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Call.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Call.json @@ -10,7 +10,6 @@ "description": "Descrizione", "users": "Utenti", "contacts": "Contatti", - "leads": "Comando", "reminders": "Promemoria", "acceptanceStatus": "Stato accettazione" }, diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Campaign.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Campaign.json index 228f7df7b5..0bd301d1b6 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Campaign.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Campaign.json @@ -27,7 +27,6 @@ "excludingTargetLists": "Esclusioni da liste di destinazione", "accounts": "Account", "contacts": "Contatti", - "leads": "Comando", "opportunities": "Opportunita'", "massEmails": "Email Massiva", "contactsTemplate": "Modello contatti", diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Contact.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Contact.json index 3505af5bdc..93c5963f79 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Contact.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Contact.json @@ -1,7 +1,6 @@ { "fields": { "name": "Nome", - "title": "Titolo", "accountRole": "Titolo", "accounts": "Account", "phoneNumber": "Telefono", diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Document.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Document.json index dfb41c260a..76e1619594 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Document.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Document.json @@ -16,7 +16,6 @@ "accounts": "Account", "opportunities": "Opportunita'", "folder": "Cartella", - "leads": "Comando", "contacts": "Contatti" }, "options": { diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Email.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Email.json index d2ca057802..b3bcbaa56f 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Email.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Email.json @@ -1,6 +1,6 @@ { "labels": { - "Create Lead": "Crea Guida", + "Create Lead": "Crea Lead", "Create Contact": "Crea Contatto", "Create Task": "Crea Compito", "Create Case": "Crea Caso", diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Global.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Global.json index 3fc7d02094..459ea5ce22 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Global.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Global.json @@ -3,7 +3,6 @@ "parent": "Genitore", "contacts": "Contatti", "opportunities": "Opportunita'", - "leads": "Comando", "meetings": "Riunioni", "calls": "Chiamate", "tasks": "Compiti", @@ -16,7 +15,6 @@ }, "scopeNames": { "Contact": "Contatti", - "Lead": "Guida", "Opportunity": "Opportunità", "Meeting": "Riunione", "Calendar": "Calendario", @@ -34,7 +32,6 @@ "scopeNamesPlural": { "Account": "Account", "Contact": "Contatti", - "Lead": "Comando", "Opportunity": "Opportunita'", "Meeting": "Riunioni", "Calendar": "Calendario", @@ -51,7 +48,7 @@ "KnowledgeBaseCategory": "Conoscenza di Base Categorie" }, "dashlets": { - "Leads": "Le mie Guide", + "Leads": "I miei Lead", "Opportunities": "Le mie Opportunità", "Tasks": "I miei Compiti", "Cases": "I miei Casi", diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Lead.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Lead.json index 82b07f571d..b62649dac0 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Lead.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Lead.json @@ -1,7 +1,7 @@ { "labels": { "Converted To": "Convertito in", - "Create Lead": "Crea Guida", + "Create Lead": "Crea Lead", "Convert": "Convertire", "convert": "convertire" }, diff --git a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Opportunity.json b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Opportunity.json index dac8f9241a..c893c63df2 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/it_IT/Opportunity.json +++ b/application/Espo/Modules/Crm/Resources/i18n/it_IT/Opportunity.json @@ -3,6 +3,7 @@ "name": "Nome", "amount": "Importo", "probability": "Probabilità, %", + "leadSource": "Sorgente Lead", "doNotCall": "Non chiamare", "closeDate": "Data di chiusura", "contacts": "Contatti", diff --git a/application/Espo/Resources/i18n/it_IT/Admin.json b/application/Espo/Resources/i18n/it_IT/Admin.json index 5962e921ac..c1109cd06c 100644 --- a/application/Espo/Resources/i18n/it_IT/Admin.json +++ b/application/Espo/Resources/i18n/it_IT/Admin.json @@ -56,7 +56,14 @@ "Label Manager": "Gestione etichetta", "Auth Log": "Auth log", "Lead Capture": "Cattura Lead", - "Attachments": "Allegati" + "Attachments": "Allegati", + "API Users": "API Utenti", + "PHP Settings": "Impostazioni PHP", + "Database Settings": "Impostazioni Database", + "Permissions": "Permessi", + "Success": "Successo", + "Fail": "Fallito", + "is recommended": "E' raccomandato" }, "layouts": { "list": "Elenco", diff --git a/application/Espo/Resources/i18n/it_IT/ApiUser.json b/application/Espo/Resources/i18n/it_IT/ApiUser.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/application/Espo/Resources/i18n/it_IT/ApiUser.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/application/Espo/Resources/i18n/it_IT/Email.json b/application/Espo/Resources/i18n/it_IT/Email.json index 6ceb591994..7e2f7f0260 100644 --- a/application/Espo/Resources/i18n/it_IT/Email.json +++ b/application/Espo/Resources/i18n/it_IT/Email.json @@ -108,7 +108,7 @@ "archived": "Archiviato", "drafts": "Bozze", "trash": "Cestino", - "important": "Importantw" + "important": "Importante" }, "massActions": { "markAsRead": "Contrassegna come Letto", diff --git a/application/Espo/Resources/i18n/it_IT/Global.json b/application/Espo/Resources/i18n/it_IT/Global.json index f152ace368..a655818535 100644 --- a/application/Espo/Resources/i18n/it_IT/Global.json +++ b/application/Espo/Resources/i18n/it_IT/Global.json @@ -137,9 +137,9 @@ "Actions": "Azioni", "Delete": "Cancellare", "Update": "Aggiorna", - "Save": "Salvare", + "Save": "Salva", "Edit": "Modificare", - "Cancel": "Annullare", + "Cancel": "Annulla", "Apply": "Applicare", "Unlink": "Scollegare", "Mass Update": "Aggiornamento Massivo", diff --git a/application/Espo/Services/App.php b/application/Espo/Services/App.php index d644be5750..c44433683b 100644 --- a/application/Espo/Services/App.php +++ b/application/Espo/Services/App.php @@ -131,11 +131,11 @@ class App extends \Espo\Core\Services\Base $emailAddressList = []; foreach ($user->get('emailAddresses') as $emailAddress) { if ($emailAddress->get('invalid')) continue; - if ($user->get('emailAddrses') === $emailAddress->get('name')) continue; + if ($user->get('emailAddress') === $emailAddress->get('name')) continue; $emailAddressList[] = $emailAddress->get('name'); } - if ($user->get('emailAddrses')) { - array_unshift($emailAddressList, $user->get('emailAddrses')); + if ($user->get('emailAddress')) { + array_unshift($emailAddressList, $user->get('emailAddress')); } $entityManager = $this->getEntityManager(); diff --git a/client/modules/crm/src/views/calendar/calendar.js b/client/modules/crm/src/views/calendar/calendar.js index 488901efaa..6af33e1602 100644 --- a/client/modules/crm/src/views/calendar/calendar.js +++ b/client/modules/crm/src/views/calendar/calendar.js @@ -457,7 +457,7 @@ Espo.define('crm:views/calendar/calendar', ['view', 'lib!full-calendar'], functi }, getCalculatedHeight: function () { - if (this.$container && this.$container.size()) { + if (this.$container && this.$container.length) { return this.$container.height(); } var height = $(window).height(); @@ -727,7 +727,7 @@ Espo.define('crm:views/calendar/calendar', ['view', 'lib!full-calendar'], functi setTimeout(function () { $calendar.fullCalendar(options); this.updateDate(); - if (this.$container && this.$container.size()) { + if (this.$container && this.$container.length) { this.adjustSize(); } }.bind(this), 150); diff --git a/client/modules/crm/src/views/dashlets/abstract/chart.js b/client/modules/crm/src/views/dashlets/abstract/chart.js index 44fdda2c29..9b9368b18d 100644 --- a/client/modules/crm/src/views/dashlets/abstract/chart.js +++ b/client/modules/crm/src/views/dashlets/abstract/chart.js @@ -184,7 +184,7 @@ Espo.define('crm:views/dashlets/abstract/chart', ['views/dashlets/abstract/base' var width = Math.floor((containerWidth - dashletChartLegendBoxWidth * number) / number); - var columnNumber = this.$legendContainer.find('> table tr:first-child > td').size() / 2; + var columnNumber = this.$legendContainer.find('> table tr:first-child > td').length / 2; var tableWidth = (width + dashletChartLegendBoxWidth) * columnNumber; @@ -215,7 +215,7 @@ Espo.define('crm:views/dashlets/abstract/chart', ['views/dashlets/abstract/base' this.adjustContainer(); setTimeout(function () { - if (!this.$container.size() || !this.$container.is(":visible")) return; + if (!this.$container.length || !this.$container.is(":visible")) return; this.draw(); }.bind(this), 1); }); diff --git a/client/modules/crm/src/views/document/fields/file.js b/client/modules/crm/src/views/document/fields/file.js index 562a1abbe2..d1cb7dca24 100644 --- a/client/modules/crm/src/views/document/fields/file.js +++ b/client/modules/crm/src/views/document/fields/file.js @@ -40,7 +40,7 @@ Espo.define('crm:views/document/fields/file', 'views/fields/file', function (Dep return false; } - return ''; + return ''; } else { return Dep.prototype.getValueForDisplay.call(this); } diff --git a/client/res/templates/attachment/fields/name/detail.tpl b/client/res/templates/attachment/fields/name/detail.tpl index 9adbd239a7..454f6eebaf 100644 --- a/client/res/templates/attachment/fields/name/detail.tpl +++ b/client/res/templates/attachment/fields/name/detail.tpl @@ -1,2 +1,2 @@ - {{{value}}} + {{{value}}} diff --git a/client/res/templates/email/fields/has-attachment/detail.tpl b/client/res/templates/email/fields/has-attachment/detail.tpl index f3e8dcb41e..c58671141a 100644 --- a/client/res/templates/email/fields/has-attachment/detail.tpl +++ b/client/res/templates/email/fields/has-attachment/detail.tpl @@ -1 +1 @@ -{{#if value}}{{/if}} \ No newline at end of file +{{#if value}}{{/if}} \ No newline at end of file diff --git a/client/res/templates/email/fields/subject/list-link.tpl b/client/res/templates/email/fields/subject/list-link.tpl index 717661c145..b9ebc0a95b 100644 --- a/client/res/templates/email/fields/subject/list-link.tpl +++ b/client/res/templates/email/fields/subject/list-link.tpl @@ -1,6 +1,6 @@ {{#if hasAttachment}} - + {{/if}} {{#unless isRead}}{{/unless}} diff --git a/client/res/templates/fields/attachments-multiple/edit.tpl b/client/res/templates/fields/attachments-multiple/edit.tpl index 31fd7766ae..4ce1fc49d2 100644 --- a/client/res/templates/fields/attachments-multiple/edit.tpl +++ b/client/res/templates/fields/attachments-multiple/edit.tpl @@ -3,7 +3,7 @@ {{#unless uploadFromFileSystemDisabled}} - + diff --git a/client/res/templates/fields/file/edit.tpl b/client/res/templates/fields/file/edit.tpl index 4e99c6ea71..7b604c0126 100644 --- a/client/res/templates/fields/file/edit.tpl +++ b/client/res/templates/fields/file/edit.tpl @@ -2,7 +2,7 @@ - + diff --git a/client/res/templates/record/list.tpl b/client/res/templates/record/list.tpl index 9b185bf0c6..c8645ffaff 100644 --- a/client/res/templates/record/list.tpl +++ b/client/res/templates/record/list.tpl @@ -8,14 +8,41 @@ {{/if}} - {{#if checkboxes}} - {{#if massActionList}} + {{#if displayActionsButtonGroup}} - + {{#if massActionList}} + {{translate 'Actions'}} - + {{/if}} + {{#if buttonList.length}} + {{#each buttonList}} + {{button name scope=../../scope label=label style=style hidden=hidden}} + {{/each}} + {{/if}} + + {{#if dropdownItemList.length}} + + + + + {{#each dropdownItemList}} + {{#if this}} + {{#if html}}{{{html}}}{{else}}{{translate label scope=../../../entityType}}{{/if}} + {{else}} + {{#unless @first}} + {{#unless @last}} + + {{/unless}} + {{/unless}} + {{/if}} + {{/each}} + + {{/if}} + + {{#if massActionList}} + {{#each massActionList}} {{#if this}} {{translate this category="massActions" scope=../../scope}} @@ -28,8 +55,30 @@ {{/if}} {{/each}} + {{/if}} + + + + + + {{translate 'Actions'}} + + + + {{#each massActionList}} + {{#if this}} + {{translate this category="massActions" scope=../../scope}} + {{else}} + {{#unless @first}} + {{#unless @last}} + + {{/unless}} + {{/unless}} + {{/if}} + {{/each}} + + - {{/if}} {{/if}} {{#if displayTotalCount}} @@ -37,10 +86,6 @@ {{translate 'Total'}}: {{collection.total}} {{/if}} - - {{#each buttonList}} - {{button name scope=../../scope label=label style=style}} - {{/each}} {{/if}} diff --git a/client/res/templates/record/search.tpl b/client/res/templates/record/search.tpl index 787d943358..dc525facce 100644 --- a/client/res/templates/record/search.tpl +++ b/client/res/templates/record/search.tpl @@ -40,10 +40,11 @@ - + + {{translate 'Add Field'}} {{#each advancedFields}} {{translate name scope=../entityType category='fields'}} {{/each}} diff --git a/client/src/ui.js b/client/src/ui.js index c2a08b4ef5..ef83df4fa6 100644 --- a/client/src/ui.js +++ b/client/src/ui.js @@ -72,9 +72,13 @@ Espo.define('ui', [], function () { this.contents = ''; if (this.header) { - this.contents += '' + + var headerClassName = ''; + if (this.options.fixedHeaderHeight) { + headerClassName = ' fixed-height'; + } + this.contents += '' + ((this.closeButton) ? '×' : '') + - '' + this.header + '' + + '' + this.header + '' + ''; } @@ -225,7 +229,7 @@ Espo.define('ui', [], function () { var $body = $(document.body); this.$el.on('hidden.bs.modal', function (e) { - if ($('.modal:visible').size() > 0) { + if ($('.modal:visible').length > 0) { $body.addClass('modal-open'); } }); @@ -240,14 +244,14 @@ Espo.define('ui', [], function () { var $modalBackdrop = $('.modal-backdrop'); $modalBackdrop.each(function (i, el) { - if (i < $modalBackdrop.size() - 1) { + if (i < $modalBackdrop.length - 1) { $(el).addClass('hidden'); } }.bind(this)); var $modalConainer = $('.modal-container'); $modalConainer.each(function (i, el) { - if (i < $modalConainer.size() - 1) { + if (i < $modalConainer.length - 1) { $(el).addClass('overlaid'); } }.bind(this)); @@ -272,7 +276,7 @@ Espo.define('ui', [], function () { $modalBackdrop.last().removeClass('hidden'); var $modalConainer = $('.modal-container'); - $($modalConainer.get($modalConainer.size() - 2)).removeClass('overlaid'); + $($modalConainer.get($modalConainer.length - 2)).removeClass('overlaid'); this.$el.modal('hide'); $(this).trigger('dialog:close'); diff --git a/client/src/views/admin/layouts/grid.js b/client/src/views/admin/layouts/grid.js index 55078ea098..433576222e 100644 --- a/client/src/views/admin/layouts/grid.js +++ b/client/src/views/admin/layouts/grid.js @@ -140,7 +140,7 @@ Espo.define('views/admin/layouts/grid', 'views/admin/layouts/base', function (De var count = 0; var isEmpty = false; - if ($ul.children('li:not(.empty)').size() == 0) { + if ($ul.children('li:not(.empty)').length == 0) { isEmpty = true; } diff --git a/client/src/views/email/record/list.js b/client/src/views/email/record/list.js index b159979f32..09f96e88a9 100644 --- a/client/src/views/email/record/list.js +++ b/client/src/views/email/record/list.js @@ -34,11 +34,10 @@ Espo.define('views/email/record/list', 'views/record/list', function (Dep) { massActionList: ['remove', 'massUpdate'], - buttonList: [ + dropdownItemList: [ { name: 'markAllAsRead', - label: 'Mark all as read', - style: 'default' + label: 'Mark all as read' } ], diff --git a/client/src/views/fields/attachment-multiple.js b/client/src/views/fields/attachment-multiple.js index 2126f965c5..b89fc1a655 100644 --- a/client/src/views/fields/attachment-multiple.js +++ b/client/src/views/fields/attachment-multiple.js @@ -529,7 +529,7 @@ Espo.define('views/fields/attachment-multiple', 'views/fields/base', function (D previews.push('' + this.getDetailPreview(name, type, id) + ''); continue; } - var line = ' ' + Handlebars.Utils.escapeExpression(name) + ''; + var line = ' ' + Handlebars.Utils.escapeExpression(name) + ''; names.push(line); } var string = previews.join('') + names.join(''); diff --git a/client/src/views/fields/base.js b/client/src/views/fields/base.js index 93c6524f30..2c523b4569 100644 --- a/client/src/views/fields/base.js +++ b/client/src/views/fields/base.js @@ -154,7 +154,7 @@ Espo.define('views/fields/base', 'view', function (Dep) { * {jQuery} */ getLabelElement: function () { - if (!this.$label || !this.$label.size()) { + if (!this.$label || !this.$label.length) { this.$label = this.$el.parent().children('label'); } return this.$label; @@ -351,7 +351,7 @@ Espo.define('views/fields/base', 'view', function (Dep) { var $label = this.getLabelElement(); var $sign = $label.find('span.required-sign'); - if ($label.size() && !$sign.size()) { + if ($label.length && !$sign.length) { $text = $label.find('span.label-text'); $(' *').insertAfter($text); $sign = $label.find('span.required-sign'); @@ -385,7 +385,7 @@ Espo.define('views/fields/base', 'view', function (Dep) { var $cell = this.getCellElement(); var $editLink = $(''); - if ($cell.size() == 0) { + if ($cell.length == 0) { this.listenToOnce(this, 'after:render', this.initInlineEdit, this); return; } @@ -552,7 +552,7 @@ Espo.define('views/fields/base', 'view', function (Dep) { $el = $(target); } - if (!$el.size() && this.$element) { + if (!$el.length && this.$element) { $el = this.$element; } $el.popover({ diff --git a/client/src/views/fields/duration.js b/client/src/views/fields/duration.js index f5798d24e5..ee6842bd8c 100644 --- a/client/src/views/fields/duration.js +++ b/client/src/views/fields/duration.js @@ -220,7 +220,7 @@ Espo.define('views/fields/duration', 'views/fields/enum', function (Dep) { return $(el).val() >= seconds; }).first(); - if ($found.size()) { + if ($found.length) { if ($found.val() != seconds) { $o.insertBefore($found); }; diff --git a/client/src/views/fields/email.js b/client/src/views/fields/email.js index c515adcb3f..b087f63414 100644 --- a/client/src/views/fields/email.js +++ b/client/src/views/fields/email.js @@ -155,7 +155,7 @@ Espo.define('views/fields/email', 'views/fields/varchar', function (Dep) { 'click [data-action="removeEmailAddress"]': function (e) { var $block = $(e.currentTarget).closest('div.email-address-block'); - if ($block.parent().children().size() == 1) { + if ($block.parent().children().length == 1) { $block.find('input.email-address').val(''); } else { this.removeEmailAddressBlock($block); @@ -168,7 +168,7 @@ Espo.define('views/fields/email', 'views/fields/varchar', function (Dep) { var $block = $input.closest('div.email-address-block'); if ($input.val() == '') { - if ($block.parent().children().size() == 1) { + if ($block.parent().children().length == 1) { $block.find('input.email-address').val(''); } else { this.removeEmailAddressBlock($block); @@ -273,7 +273,7 @@ Espo.define('views/fields/email', 'views/fields/varchar', function (Dep) { } }); - if (c == $input.size()) { + if (c == $input.length) { this.$el.find('[data-action="addEmailAddress"]').removeClass('disabled').removeAttr('disabled'); } else { this.$el.find('[data-action="addEmailAddress"]').addClass('disabled').attr('disabled', 'disabled'); @@ -283,7 +283,7 @@ Espo.define('views/fields/email', 'views/fields/varchar', function (Dep) { manageButtonsVisibility: function () { var $primary = this.$el.find('button[data-property-type="primary"]'); var $remove = this.$el.find('button[data-action="removeEmailAddress"]'); - if ($primary.size() > 1) { + if ($primary.length > 1) { $primary.removeClass('hidden'); $remove.removeClass('hidden'); } else { @@ -387,7 +387,7 @@ Espo.define('views/fields/email', 'views/fields/varchar', function (Dep) { var $list = this.$el.find('div.email-address-block'); - if ($list.size()) { + if ($list.length) { $list.each(function (i, d) { var row = {}; var $d = $(d); diff --git a/client/src/views/fields/file.js b/client/src/views/fields/file.js index 0a004ab544..1e0085aeb4 100644 --- a/client/src/views/fields/file.js +++ b/client/src/views/fields/file.js @@ -285,7 +285,7 @@ Espo.define('views/fields/file', 'views/fields/link', function (Dep) { if (this.showPreview && ~this.previewTypeList.indexOf(type)) { string = '' + this.getDetailPreview(name, type, id) + ''; } else { - string = ' ' + Handlebars.Utils.escapeExpression(name) + ''; + string = ' ' + Handlebars.Utils.escapeExpression(name) + ''; } return string; } diff --git a/client/src/views/fields/formula.js b/client/src/views/fields/formula.js index e606793096..8f644c8306 100644 --- a/client/src/views/fields/formula.js +++ b/client/src/views/fields/formula.js @@ -89,7 +89,7 @@ Espo.define('views/fields/formula', 'views/fields/text', function (Dep) { this.$editor = this.$el.find('#' + this.containerId); - if (this.$editor.size() && (this.mode === 'edit' || this.mode == 'detail')) { + if (this.$editor.length && (this.mode === 'edit' || this.mode == 'detail')) { this.$editor .css('height', this.height + 'px') .css('fontSize', '14px'); diff --git a/client/src/views/fields/link-multiple-with-columns.js b/client/src/views/fields/link-multiple-with-columns.js index c849bd8156..0cbb86b50d 100644 --- a/client/src/views/fields/link-multiple-with-columns.js +++ b/client/src/views/fields/link-multiple-with-columns.js @@ -282,7 +282,7 @@ Espo.define('views/fields/link-multiple-with-columns', 'views/fields/link-multip if (this.mode == 'edit') { columnFormElementJQList.forEach(function ($column) { var fetch = function ($target) { - if (!$target || !$target.size()) return; + if (!$target || !$target.length) return; var column = $target.data('column'); var value = $target.val().toString().trim(); var id = $target.data('id'); diff --git a/client/src/views/fields/link-multiple-with-primary.js b/client/src/views/fields/link-multiple-with-primary.js index 40daa85b31..5a1937e6d1 100644 --- a/client/src/views/fields/link-multiple-with-primary.js +++ b/client/src/views/fields/link-multiple-with-primary.js @@ -160,15 +160,15 @@ Espo.define('views/fields/link-multiple-with-primary', 'views/fields/link-multip managePrimaryButton: function () { var $primary = this.$el.find('button[data-action="switchPrimary"]'); - if ($primary.size() > 1) { + if ($primary.length > 1) { $primary.removeClass('hidden'); } else { $primary.addClass('hidden'); } - if ($primary.filter('.active').size() == 0) { + if ($primary.filter('.active').length == 0) { var $first = $primary.first(); - if ($first.size()) { + if ($first.length) { $first.addClass('active').children().removeClass('text-muted'); this.setPrimaryId($first.data('id')); } diff --git a/client/src/views/fields/link-multiple-with-role.js b/client/src/views/fields/link-multiple-with-role.js index 89943f7f88..0945c1322e 100644 --- a/client/src/views/fields/link-multiple-with-role.js +++ b/client/src/views/fields/link-multiple-with-role.js @@ -182,7 +182,7 @@ Espo.define('views/fields/link-multiple-with-role', 'views/fields/link-multiple' if (this.mode == 'edit') { if ($role) { var fetch = function ($target) { - if (!$target || !$target.size()) return; + if (!$target || !$target.length) return; var value = $target.val().toString().trim(); var id = $target.data('id'); diff --git a/client/src/views/fields/phone.js b/client/src/views/fields/phone.js index d2055339aa..07a435f86f 100644 --- a/client/src/views/fields/phone.js +++ b/client/src/views/fields/phone.js @@ -133,7 +133,7 @@ Espo.define('views/fields/phone', 'views/fields/varchar', function (Dep) { 'click [data-action="removePhoneNumber"]': function (e) { var $block = $(e.currentTarget).closest('div.phone-number-block'); - if ($block.parent().children().size() == 1) { + if ($block.parent().children().length == 1) { $block.find('input.phone-number').val(''); } else { this.removePhoneNumberBlock($block); @@ -146,7 +146,7 @@ Espo.define('views/fields/phone', 'views/fields/varchar', function (Dep) { var $block = $input.closest('div.phone-number-block'); if ($input.val() == '') { - if ($block.parent().children().size() == 1) { + if ($block.parent().children().length == 1) { $block.find('input.phone-number').val(''); } else { this.removePhoneNumberBlock($block); @@ -214,7 +214,7 @@ Espo.define('views/fields/phone', 'views/fields/varchar', function (Dep) { } }); - if (c == $input.size()) { + if (c == $input.length) { this.$el.find('[data-action="addPhoneNumber"]').removeClass('disabled').removeAttr('disabled'); } else { this.$el.find('[data-action="addPhoneNumber"]').addClass('disabled').attr('disabled', 'disabled'); @@ -224,7 +224,7 @@ Espo.define('views/fields/phone', 'views/fields/varchar', function (Dep) { manageButtonsVisibility: function () { var $primary = this.$el.find('button[data-property-type="primary"]'); var $remove = this.$el.find('button[data-action="removePhoneNumber"]'); - if ($primary.size() > 1) { + if ($primary.length > 1) { $primary.removeClass('hidden'); $remove.removeClass('hidden'); } else { @@ -253,7 +253,7 @@ Espo.define('views/fields/phone', 'views/fields/varchar', function (Dep) { var $list = this.$el.find('div.phone-number-block'); - if ($list.size()) { + if ($list.length) { $list.each(function (i, d) { var row = {}; var $d = $(d); diff --git a/client/src/views/fields/wysiwyg.js b/client/src/views/fields/wysiwyg.js index 49047856e1..7af8ce25e9 100644 --- a/client/src/views/fields/wysiwyg.js +++ b/client/src/views/fields/wysiwyg.js @@ -79,7 +79,7 @@ Espo.define('views/fields/wysiwyg', ['views/fields/text', 'lib!Summernote'], fun var AttachmentButton = function (context) { var ui = $.summernote.ui; var button = ui.button({ - contents: '', + contents: '', tooltip: this.translate('Attach File'), click: function () { this.attachFile(); @@ -374,7 +374,7 @@ Espo.define('views/fields/wysiwyg', ['views/fields/text', 'lib!Summernote'], fun options.height = this.height; } else { var $scrollable = this.$el.closest('.modal-body'); - if (!$scrollable.size()) { + if (!$scrollable.length) { $scrollable = $(window); } this.$scrollable = $scrollable; diff --git a/client/src/views/modal.js b/client/src/views/modal.js index 1502e3c18a..385fd7ae6e 100644 --- a/client/src/views/modal.js +++ b/client/src/views/modal.js @@ -151,6 +151,7 @@ Espo.define('views/modal', 'view', function (Dep) { footerAtTheTop: this.getThemeManager().getParam('modalFooterAtTheTop'), fullHeight: this.getThemeManager().getParam('modalFullHeight'), screenWidthXs: this.getThemeManager().getParam('screenWidthXs'), + fixedHeaderHeight: this.fixedHeaderHeight, onRemove: function () { this.onDialogClose(); }.bind(this) @@ -265,4 +266,3 @@ Espo.define('views/modal', 'view', function (Dep) { }, }); }); - diff --git a/client/src/views/modals/image-crop.js b/client/src/views/modals/image-crop.js index 043d1fd450..6e18c69574 100644 --- a/client/src/views/modals/image-crop.js +++ b/client/src/views/modals/image-crop.js @@ -59,7 +59,7 @@ Espo.define('views/modals/image-crop', ['views/modal', 'lib!Cropper'], function ]; this.on('remove', function () { - if (this.$img.size()) { + if (this.$img.length) { this.$img.cropper('destroy'); this.$img.parent().empty(); } diff --git a/client/src/views/modals/mass-update.js b/client/src/views/modals/mass-update.js index 012a3aa4bc..a489496ba4 100644 --- a/client/src/views/modals/mass-update.js +++ b/client/src/views/modals/mass-update.js @@ -104,7 +104,7 @@ Espo.define('views/modals/mass-update', 'views/modal', function (Dep) { this.$el.find('ul.filter-list li[data-name="'+name+'"]').addClass('hidden'); - if (this.$el.find('ul.filter-list li:not(.hidden)').size() == 0) { + if (this.$el.find('ul.filter-list li:not(.hidden)').length == 0) { this.$el.find('button.select-field').addClass('disabled').attr('disabled', 'disabled'); } diff --git a/client/src/views/modals/related-list.js b/client/src/views/modals/related-list.js index 9708adc854..a4ea9ba3d8 100644 --- a/client/src/views/modals/related-list.js +++ b/client/src/views/modals/related-list.js @@ -42,6 +42,8 @@ Espo.define('views/modals/related-list', ['views/modal', 'search-manager'], func backdrop: true, + fixedHeaderHeight: true, + events: { 'click button[data-action="createRelated"]': function () { this.actionCreateRelated(); diff --git a/client/src/views/note/fields/post.js b/client/src/views/note/fields/post.js index 2911680e73..13359c5d44 100644 --- a/client/src/views/note/fields/post.js +++ b/client/src/views/note/fields/post.js @@ -138,7 +138,7 @@ Espo.define('views/note/fields/post', ['views/fields/text', 'lib!Textcomplete'], }); this.once('remove', function () { - if (this.$element.size()) { + if (this.$element.length) { this.$element.textcomplete('destroy'); } }, this); diff --git a/client/src/views/notification/badge.js b/client/src/views/notification/badge.js index c21fd71674..0a45147e16 100644 --- a/client/src/views/notification/badge.js +++ b/client/src/views/notification/badge.js @@ -97,7 +97,7 @@ Espo.define('views/notification/badge', 'view', function (Dep) { this.runCheckUpdates(true); this.$popupContainer = $('#popup-notifications-container'); - if (!$(this.$popupContainer).size()) { + if (!$(this.$popupContainer).length) { this.$popupContainer = $('').attr('id', 'popup-notifications-container').addClass('hidden').appendTo('body'); } @@ -275,7 +275,7 @@ Espo.define('views/notification/badge', 'view', function (Dep) { $document = $(document); $document.on('mouseup.notification', function (e) { if (!$container.is(e.target) && $container.has(e.target).length === 0) { - if (!$(e.target).closest('div.modal-dialog').size()) { + if (!$(e.target).closest('div.modal-dialog').length) { this.closeNotifications(); } } diff --git a/client/src/views/record/kanban.js b/client/src/views/record/kanban.js index ebdfc5b290..34732269e9 100644 --- a/client/src/views/record/kanban.js +++ b/client/src/views/record/kanban.js @@ -584,7 +584,7 @@ Espo.define('views/record/kanban', ['views/record/list'], function (Dep) { var $item = this.$el.find('.item[data-id="'+id+'"]'); var $column = this.$el.find('.group-column[data-name="'+group+'"] .group-column-list'); - if ($column.size()) { + if ($column.length) { $column.prepend($item); } else { $item.remove(); diff --git a/client/src/views/record/list.js b/client/src/views/record/list.js index 392b7e62aa..0851ffc6d6 100644 --- a/client/src/views/record/list.js +++ b/client/src/views/record/list.js @@ -73,6 +73,8 @@ Espo.define('views/record/list', 'view', function (Dep) { portalLayoutDisabled: false, + dropdownItemList: [], + events: { 'click a.link': function (e) { e.stopPropagation(); @@ -147,7 +149,7 @@ Espo.define('views/record/list', 'view', function (Dep) { 'click .checkbox-dropdown [data-action="selectAllResult"]': function (e) { this.selectAllResult(); }, - 'click .actions a.mass-action': function (e) { + 'click .actions-menu a.mass-action': function (e) { $el = $(e.currentTarget); var action = $el.data('action'); @@ -181,14 +183,111 @@ Espo.define('views/record/list', 'view', function (Dep) { this.deactivate(); }, + initStickedBar: function () { + var $stickedBar = this.$stickedBar = this.$el.find('.sticked-bar'); + var $middle = this.$el.find('> .list'); + var $window = $(window); + var $scrollable = $window; + + this.on('render', function () { + this.$stickedBar = null; + }, this); + + var screenWidthXs = this.getThemeManager().getParam('screenWidthXs'); + + function getOffsetTop (element) { + var offsetTop = 0; + do { + if (element.classList.contains('modal-body')) break; + if (!isNaN(element.offsetTop)) { + offsetTop += element.offsetTop; + } + } while (element = element.offsetParent); + return offsetTop; + } + + var top; + + + if (this.$el.closest('.modal-body').length) { + $scrollable = this.$el.closest('.modal-body'); + top = 0; + } else { + top = getOffsetTop(this.getParentView().$el.get(0)); + if ($(window.document).width() < screenWidthXs) { + top = 0; + } + } + + top += this.$el.find('.list-buttons-container').height(); + + var topBarHeight = this.getThemeManager().getParam('navbarHeight') || 30; + + $scrollable.off('scroll.list-' + this.cid); + $scrollable.on('scroll.list-' + this.cid, function (e) { + cotrolSticking(); + }.bind(this)); + + $window.off('resize.list-' + this.cid); + $window.on('resize.list-' + this.cid, function (e) { + cotrolSticking(); + }.bind(this)); + + this.on('check', function () { + if (this.checkedList.length === 0) return; + cotrolSticking(); + }, this); + + this.once('remove', function () { + $scrollable.off('scroll.list-' + this.cid); + $window.off('resize.list-' + this.cid); + }); + + var cotrolSticking = function () { + if (this.checkedList.length === 0) return; + + var middleTop = getOffsetTop($middle.get(0)); + + var stickTop = middleTop - top; + var edge = middleTop + $middle.outerHeight(true); + var scrollTop = $scrollable.scrollTop(); + + if (scrollTop < edge) { + if (scrollTop > stickTop) { + $stickedBar.removeClass('hidden'); + } else { + $stickedBar.addClass('hidden'); + } + } else { + $stickedBar.removeClass('hidden'); + } + }.bind(this); + }, + + showActions: function () { + this.$el.find('.actions-button').removeClass('hidden'); + + if (!this.options.stickedBarDisabled && !this.stickedBarDisabled && this.massActionList.length) { + if (!this.$stickedBar) { + this.initStickedBar(); + } + } + }, + + hideActions: function () { + this.$el.find('.actions-button').addClass('hidden'); + + if (this.$stickedBar) { + this.$stickedBar.addClass('hidden'); + } + }, + selectAllHandler: function (isChecked) { this.checkedList = []; - var $actionsButton = this.$el.find('.actions-button'); - if (isChecked) { this.$el.find('input.record-checkbox').prop('checked', true); - $actionsButton.removeAttr('disabled'); + this.showActions(); this.collection.models.forEach(function (model) { this.checkedList.push(model.id); }, this); @@ -198,7 +297,7 @@ Espo.define('views/record/list', 'view', function (Dep) { this.unselectAllResult(); } this.$el.find('input.record-checkbox').prop('checked', false); - $actionsButton.attr('disabled', true); + this.hideActions(); this.$el.find('.list > table tbody tr').removeClass('active'); } @@ -242,11 +341,12 @@ Espo.define('views/record/list', 'view', function (Dep) { allResultIsChecked: false, data: function () { - var paginationTop = this.pagination === 'both' || this.pagination === true || this.pagination === 'top'; var paginationBottom = this.pagination === 'both' || this.pagination === true || this.pagination === 'bottom'; + return { scope: this.scope, + entityType: this.entityType, header: this.header, headerDefs: this._getHeaderDefs(), paginationEnabled: this.pagination, @@ -259,11 +359,13 @@ Espo.define('views/record/list', 'view', function (Dep) { checkboxes: this.checkboxes, massActionList: this.massActionList, rowList: this.rowList, - topBar: paginationTop || this.checkboxes || (this.buttonList.length && !this.buttonsDisabled), + topBar: paginationTop || this.checkboxes || (this.buttonList.length && !this.buttonsDisabled) || (this.dropdownItemList.length && !this.buttonsDisabled), bottomBar: paginationBottom, checkAllResultDisabled: this.checkAllResultDisabled, buttonList: this.buttonList, - displayTotalCount: this.displayTotalCount && this.collection.total > 0 + dropdownItemList: this.dropdownItemList, + displayTotalCount: this.displayTotalCount && this.collection.total > 0, + displayActionsButtonGroup: this.checkboxes || this.massActionList || this.buttonList.length || this.dropdownItemList.length, }; }, @@ -294,6 +396,8 @@ Espo.define('views/record/list', 'view', function (Dep) { this.rowActionsDisabled = this.options.rowActionsDisabled || this.rowActionsDisabled; + this.dropdownItemList = Espo.Utils.cloneDeep(this.options.dropdownItemList || this.dropdownItemList); + if ('buttonsDisabled' in this.options) { this.buttonsDisabled = this.options.buttonsDisabled; } @@ -315,12 +419,12 @@ Espo.define('views/record/list', 'view', function (Dep) { this.massActionList.forEach(function(item) { if (!~this.checkAllResultMassActionList.indexOf(item)) { - this.$el.find('div.list-buttons-container .actions li a.mass-action[data-action="'+item+'"]').parent().addClass('hidden'); + this.$el.find('div.list-buttons-container .actions-menu li a.mass-action[data-action="'+item+'"]').parent().addClass('hidden'); } }, this); if (this.checkAllResultMassActionList.length) { - this.$el.find('.actions-button').removeAttr('disabled'); + this.showActions(); } this.$el.find('.list > table tbody tr').removeClass('active'); @@ -337,7 +441,7 @@ Espo.define('views/record/list', 'view', function (Dep) { this.massActionList.forEach(function(item) { if (!~this.checkAllResultMassActionList.indexOf(item)) { - this.$el.find('div.list-buttons-container .actions li a.mass-action[data-action="'+item+'"]').parent().removeClass('hidden'); + this.$el.find('div.list-buttons-container .actions-menu li a.mass-action[data-action="'+item+'"]').parent().removeClass('hidden'); } }, this); }, @@ -1072,7 +1176,7 @@ Espo.define('views/record/list', 'view', function (Dep) { checkRecord: function (id, $target, isSilent) { $target = $target || this.$el.find('.record-checkbox[data-id="' + id + '"]'); - if (!$target.size()) return; + if (!$target.length) return; $target.get(0).checked = true; @@ -1106,9 +1210,9 @@ Espo.define('views/record/list', 'view', function (Dep) { handleAfterCheck: function (isSilent) { if (this.checkedList.length) { - this.$el.find('.actions-button').removeAttr('disabled'); + this.showActions(); } else { - this.$el.find('.actions-button').attr('disabled', true); + this.hideActions(); } if (this.checkedList.length == this.collection.models.length) { diff --git a/client/src/views/record/panels/relationship.js b/client/src/views/record/panels/relationship.js index 058033aab0..eb452e454c 100644 --- a/client/src/views/record/panels/relationship.js +++ b/client/src/views/record/panels/relationship.js @@ -105,13 +105,6 @@ Espo.define('views/record/panels/relationship', ['views/record/panels/bottom', ' } } - if (this.defs.view) { - this.actionList.unshift({ - label: 'View List', - action: this.defs.viewAction || 'viewRelatedList' - }); - } - if (this.defs.select) { var data = {link: this.link}; if (this.defs.selectPrimaryFilterName) { @@ -130,6 +123,13 @@ Espo.define('views/record/panels/relationship', ['views/record/panels/bottom', ' }); } + if (this.defs.view) { + this.actionList.unshift({ + label: 'View List', + action: this.defs.viewAction || 'viewRelatedList' + }); + } + this.setupActions(); var layoutName = 'listSmall'; diff --git a/client/src/views/record/panels/side.js b/client/src/views/record/panels/side.js index f4eced38e2..5049d4d301 100644 --- a/client/src/views/record/panels/side.js +++ b/client/src/views/record/panels/side.js @@ -121,7 +121,7 @@ Espo.define('views/record/panels/side', 'view', function (Dep) { }, afterRender: function () { - if (this.$el.children().size() === 0) { + if (this.$el.children().length === 0) { this.$el.parent().addClass('hidden'); } }, diff --git a/client/src/views/record/search.js b/client/src/views/record/search.js index defed6b7d9..4d5f8cc937 100644 --- a/client/src/views/record/search.js +++ b/client/src/views/record/search.js @@ -462,7 +462,7 @@ Espo.define('views/record/search', 'view', function (Dep) { updateAddFilterButton: function () { var $ul = this.$el.find('ul.filter-list'); - if ($ul.children().not('.hide').size() == 0) { + if ($ul.children().not('.hide').length == 0) { this.$el.find('button.add-filter-button').addClass('disabled'); } else { this.$el.find('button.add-filter-button').removeClass('disabled'); diff --git a/client/src/views/role/record/table.js b/client/src/views/role/record/table.js index 9cefea3560..63e8961502 100644 --- a/client/src/views/role/record/table.js +++ b/client/src/views/role/record/table.js @@ -375,7 +375,7 @@ Espo.define('views/role/record/table', 'view', function (Dep) { var fieldObj = {}; this.fieldActionList.forEach(function (action) { var $select = this.$el.find('select[data-scope="'+scope+'"][data-field="'+field+'"][data-action="'+action+'"]'); - if (!$select.size()) return; + if (!$select.length) return; fieldObj[action] = $select.val(); }, this); scopeObj[field] = fieldObj; diff --git a/client/src/views/site/navbar.js b/client/src/views/site/navbar.js index 08b48b1ce4..80d61a8695 100644 --- a/client/src/views/site/navbar.js +++ b/client/src/views/site/navbar.js @@ -188,14 +188,14 @@ Espo.define('views/site/navbar', 'view', function (Dep) { }); var hideOneTab = function () { - var count = $tabs.children().size(); + var count = $tabs.children().length; if (count <= 1) return; var $one = $tabs.children().eq(count - 2); $one.prependTo($more); }; var unhideOneTab = function () { var $one = $more.children().eq(0); - if ($one.size()) { + if ($one.length) { $one.insertBefore($moreDropdown); } }; @@ -242,7 +242,7 @@ Espo.define('views/site/navbar', 'view', function (Dep) { } } - if ($more.children().size() > 0) { + if ($more.children().length > 0) { $moreDropdown.removeClass('hidden'); } }.bind(this); @@ -265,7 +265,7 @@ Espo.define('views/site/navbar', 'view', function (Dep) { } }; - if ($navbar.height() <= navbarNeededHeight && $more.children().size() === 0) { + if ($navbar.height() <= navbarNeededHeight && $more.children().length === 0) { $more.parent().addClass('hidden'); } @@ -278,7 +278,7 @@ Espo.define('views/site/navbar', 'view', function (Dep) { var $more = $tabs.find('li.more > ul'); - if ($more.children().size() === 0) { + if ($more.children().length === 0) { $more.parent().addClass('hidden'); } diff --git a/client/src/views/stream/panel.js b/client/src/views/stream/panel.js index 74527c887c..5b3b9bd182 100644 --- a/client/src/views/stream/panel.js +++ b/client/src/views/stream/panel.js @@ -187,7 +187,7 @@ Espo.define('views/stream/panel', ['views/record/panels/relationship', 'lib!Text }, storeControl: function () { - if (this.$textarea && this.$textarea.size()) { + if (this.$textarea && this.$textarea.length) { var text = this.$textarea.val(); if (text.length) { this.getSessionStorage().set(this.storageTextKey, text); @@ -327,7 +327,7 @@ Espo.define('views/stream/panel', ['views/record/panels/relationship', 'lib!Text }]); this.once('remove', function () { - if (this.$textarea.size()) { + if (this.$textarea.length) { this.$textarea.textcomplete('destroy'); } }, this); diff --git a/client/src/views/stream/record/edit.js b/client/src/views/stream/record/edit.js index d0c0518a84..bfeaa48ab2 100644 --- a/client/src/views/stream/record/edit.js +++ b/client/src/views/stream/record/edit.js @@ -185,7 +185,7 @@ Espo.define('views/stream/record/edit', 'views/record/base', function (Dep) { if (!this.postingMode) { $('body').off('click.stream-create-post'); $('body').on('click.stream-create-post', function (e) { - if ($.contains(window.document.body, e.target) && !$.contains(this.$el.get(0), e.target) && !$(e.target).closest('.modal-dialog').size()) { + if ($.contains(window.document.body, e.target) && !$.contains(this.$el.get(0), e.target) && !$(e.target).closest('.modal-dialog').length) { if (this.getFieldView('post') && this.getFieldView('post').$element.val() == '') { if (!(this.model.get('attachmentsIds') || []).length) { this.disablePostingMode(); diff --git a/frontend/less/espo-vertical/layout.less b/frontend/less/espo-vertical/layout.less index 2cca2580b3..c74829d2ed 100644 --- a/frontend/less/espo-vertical/layout.less +++ b/frontend/less/espo-vertical/layout.less @@ -389,3 +389,25 @@ body .stick-sub.button-container { body.minimized .stick-sub.button-container { width: calc(~"100% - "@navbar-minimized-width); } + + +body .list-buttons-container .sticked-bar { + width: calc(~"100% - "@navbar-width); + left: @navbar-width; + top: @tob-bar-height; + padding-left: @container-padding; +} + +body.minimized .list-buttons-container .sticked-bar { + width: calc(~"100% - "@navbar-minimized-width); + left: @navbar-minimized-width; +} + +@media screen and (max-width: (@screen-sm-min - 1px)) { + body .list-buttons-container .sticked-bar, + body.minimized .list-buttons-container .sticked-bar { + width: 100%; + top: 0; + left: 0; + } +} diff --git a/frontend/less/espo/custom.less b/frontend/less/espo/custom.less index c4ba4fd90c..aa68ecc46e 100644 --- a/frontend/less/espo/custom.less +++ b/frontend/less/espo/custom.less @@ -60,6 +60,10 @@ } } +.text-soft { + color: @gray-soft; +} + .btn { border-radius: @button-radius; } @@ -538,19 +542,48 @@ ul.dropdown-menu > li.checkbox:last-child { padding: 0 6px; } +.modal-header.fixed-height { + height: 40px; + max-height: 40px; + overflow: hidden; + + .modal-title { + width: ~"calc(100% - 20px)"; + > .modal-title-text { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; + } + } +} + .modal-header a { color: @text-color; } -.list-buttons-container > div { - float: left; - margin-right: @panel-padding; +.list-buttons-container .sticked-bar { + position: fixed; + background-color: @body-bg; + z-index: 1000; +} + +.modal-dialog .modal-body .list-buttons-container .sticked-bar { + top: 94px !important; + width: 100% !important; + right: 0 !important; + left: unset; +} + +.list-buttons-container > .actions { + min-height: 33px; } .list-buttons-container > div.total-count { margin-right: 0px; float: right; - padding: 6px 0; + padding: 7px 0; } .list-container .pagination { diff --git a/frontend/less/espo/layout.less b/frontend/less/espo/layout.less index aea771739b..5af9d0a71e 100644 --- a/frontend/less/espo/layout.less +++ b/frontend/less/espo/layout.less @@ -135,3 +135,19 @@ body > footer { max-width: @container-max-width; } } + +body .list-buttons-container .sticked-bar { + width: 100%; + left: 0; + top: @navbar-height; + padding-left: @container-padding; +} + +@media screen and (max-width: (@screen-sm-min - 1px)) { + body .list-buttons-container .sticked-bar, + body.minimized .list-buttons-container .sticked-bar { + width: 100%; + top: 0; + left: 0; + } +} \ No newline at end of file diff --git a/frontend/less/hazyblue-vertical/custom.less b/frontend/less/hazyblue-vertical/custom.less index 5bf32f8221..246b006c2b 100644 --- a/frontend/less/hazyblue-vertical/custom.less +++ b/frontend/less/hazyblue-vertical/custom.less @@ -28,6 +28,11 @@ color: @gray-soft; } +.btn-default > .fa.text-muted, +.btn-default > .fas.text-muted { + color: @gray-light; +} + .btn-default.disabled > .fa, .btn-default.disabled > .fas { color: @gray-light; @@ -37,9 +42,9 @@ border-bottom-width: 0; } -.panel-default.note-editor .panel-heading .btn-default { - background-color: @btn-default-bg; - border-color: @btn-default-border; +.panel-default.note-editor > .panel-heading .btn-default { + background-color: @btn-default-bg !important; + border-color: @btn-default-border !important; } .panel > .panel-heading > .btn-group > .btn { diff --git a/install/core/i18n/it_IT/install.json b/install/core/i18n/it_IT/install.json index ac1765c981..53b04b81ef 100644 --- a/install/core/i18n/it_IT/install.json +++ b/install/core/i18n/it_IT/install.json @@ -27,11 +27,6 @@ "Configuration Instructions": "Istruzioni di configurazione", "phpVersion": "versione PHP", "requiredMysqlVersion": "Versione MySQL", - "dbHostName": "Host Name", - "dbName": "Database Name", - "dbUserName": "Nome Utente Database", - "OK": "OK", - "mysqlVersion": "Versione MySQL", "dbUserName": "Nome Utente Database" }, "fields": { @@ -63,7 +58,6 @@ "Some errors occurred!": "Alcuni errori si sono verificati!", "phpVersion": "la versione di PHP in uso non è supportata da EspoCRM, aggiornare PHP dalla versione {minVersion} in poi.", "requiredMysqlVersion": "la versione di MySQL in uso non è supportata da EspoCRM, si raccomanda di aggiornare MySQL almeno alla versione {minVersion}.", - "requiredMariadbVersion": "la versione di MariaDB in uso non è supportata da EspoCRM, si raccomanda di aggiornare MariaDB almeno alla versione {minVersion}.", "The PHP extension was not found...": "PHP Errore: l'Estensione {extName} non è stata trovata.", "All Settings correct": "Tutte le impostazioni sono corrette", "Failed to connect to database": "Impossibile connettersi al database", @@ -71,7 +65,6 @@ "You must agree to the license agreement": "E' necessario accettare il contratto di licenza", "Passwords do not match": "Le password non corrispondono", "Enable mod_rewrite in Apache server": "Attivare mod_rewrite in server Apache", - "Ajax failed": "Ajax non è riuscita", "Cannot create user": "Non è possibile creare un utente", "Permission denied": "Permesso negato", "Permission denied to": "Permesso negato",