diff --git a/application/ui.extkeywidget.class.inc.php b/application/ui.extkeywidget.class.inc.php index 5f6a30dba..702180498 100644 --- a/application/ui.extkeywidget.class.inc.php +++ b/application/ui.extkeywidget.class.inc.php @@ -663,7 +663,7 @@ JS 'table_inner_id' => "{$this->iId}_results", 'selection_mode' => true, 'selection_type' => 'single', - 'cssCount' => '#count_'.$this->iId, + 'cssCount' => '#count_'.$this->iId.'_results', ) )); $sCancel = Dict::S('UI:Button:Cancel'); @@ -719,7 +719,7 @@ JS $iCurrentExtKeyId = (is_null($oObj)) ? 0 : $oObj->Get($this->sAttCode); $oBlock = new DisplayBlock($oFilter, 'list_search', false, array('query_params' => array('this' => $oObj, 'current_extkey_id' => $iCurrentExtKeyId))); - $oBlock->Display($oP, $this->iId.'_results', array('this' => $oObj, 'cssCount'=> '#count_'.$this->iId, 'menu' => false, 'selection_mode' => true, 'selection_type' => 'single', 'table_id' => 'select_'.$this->sAttCode)); // Don't display the 'Actions' menu on the results + $oBlock->Display($oP, $this->iId.'_results', array('this' => $oObj, 'cssCount'=> '#count_'.$this->iId.'_results', 'menu' => false, 'selection_mode' => true, 'selection_type' => 'single', 'table_id' => 'select_'.$this->sAttCode)); // Don't display the 'Actions' menu on the results } /** diff --git a/application/ui.linkswidget.class.inc.php b/application/ui.linkswidget.class.inc.php index 7d7894468..3ba88ef87 100644 --- a/application/ui.linkswidget.class.inc.php +++ b/application/ui.linkswidget.class.inc.php @@ -524,7 +524,7 @@ JS    - + HTML ); diff --git a/js/dataTables.main.js b/js/dataTables.main.js index 80890d49a..e43507204 100644 --- a/js/dataTables.main.js +++ b/js/dataTables.main.js @@ -34,15 +34,25 @@ function checkAllDataTable(tableId, value, listId) { function updateDataTableSelection(listId) { let selectionContainer = $('#'+listId+' [data-target="ibo-datatable--selection"]'); let selectionCount = $('#'+listId+' [name="selectionCount"]'); + let selectionMode = $('#'+listId+' [name=selectionMode]'); + selectionContainer.html(''); let currentSelection = window['oSelectedItems'+listId]; for(let i in currentSelection) { let value = currentSelection[i]; selectionContainer.append(''); } - selectionCount.val(currentSelection.length); + + if (selectionMode === 'negative') { + let total = window['oTable'+listId].page.info()["recordsTotal"]; + selectionCount.val(total - currentSelection.length); + } else { + selectionCount.val(currentSelection.length); + } + selectionCount.trigger('change'); } + function getMultipleSelectionParams(listId) { var oRes = {}; diff --git a/js/extkeywidget.js b/js/extkeywidget.js index 4bf82d1f5..94575e273 100644 --- a/js/extkeywidget.js +++ b/js/extkeywidget.js @@ -234,7 +234,7 @@ function ExtKeyWidget(id, sTargetClass, sFilter, sTitle, bSelectMode, oWizHelper me.UpdateSizes(); me.UpdateButtons(); me.ajax_request = null; - $('#count_'+me.id).change(function () { + $('#count_'+me.id+ '_results').change(function () { me.UpdateButtons(); }); if (me.bDoSearch) diff --git a/js/linkswidget.js b/js/linkswidget.js index 0eb82ad57..17651742f 100644 --- a/js/linkswidget.js +++ b/js/linkswidget.js @@ -31,7 +31,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH this.aRemoved = []; this.aModified = {}; this.bDoSearch = bDoSearch; // false if the search is not launched - var me = this; + let me = this; this.Init = function () { // make sure that the form is clean @@ -47,7 +47,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH me.RegisterChange(); - var oInput = $('#'+this.iInputId); + let oInput = $('#'+this.iInputId); oInput.bind('update_value', function () { $(this).val(me.GetUpdatedValue()); }); @@ -57,10 +57,10 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.RemoveSelected = function () { - var my_id = '#'+me.id; + let my_id = '#'+me.id; $('#linkedset_'+me.id+' .selection:checked').each(function () { $(my_id+'_row_'+this.value).remove(); - var iLink = $(this).attr('data-link-id'); + let iLink = $(this).attr('data-link-id'); if (iLink > 0) { me.aRemoved.push(iLink); @@ -71,7 +71,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH } else { - var iUniqueId = $(this).attr('data-unique-id'); + let iUniqueId = $(this).attr('data-unique-id'); if (iUniqueId < 0) { iUniqueId = -iUniqueId; @@ -92,7 +92,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.OnSelectChange = function () { - var nbChecked = $('#linkedset_'+me.id+' .selection:checked').length; + let nbChecked = $('#linkedset_'+me.id+' .selection:checked').length; if (nbChecked > 0) { $('#'+me.id+'_btnRemove').prop('disabled', false); @@ -104,10 +104,10 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.AddObjects = function () { - var me = this; + let me = this; $('#'+me.id+'_indicatorAdd').html(' '); me.oWizardHelper.UpdateWizard(); - var theMap = { + let theMap = { sAttCode: me.sAttCode, iInputId: me.iInputId, sSuffix: me.sSuffix, @@ -120,7 +120,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH // Gather the already linked target objects theMap.aAlreadyLinked = []; $('#linkedset_'+me.id+' .selection:input').each(function (i) { - var iRemote = $(this).attr('data-remote-id'); + let iRemote = $(this).attr('data-remote-id'); theMap.aAlreadyLinked.push(iRemote); }); @@ -141,7 +141,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH else { $('#count_'+me.id).change(function () { - var c = this.value; + let c = this.value; me.UpdateButtons(c); }); } @@ -152,7 +152,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH this.SearchObjectsToAdd = function () { $('#count_'+me.id).change(function () { - var c = this.value; + let c = this.value; me.UpdateButtons(c); }); me.UpdateSizes(null, null); @@ -163,7 +163,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.UpdateButtons = function (iCount) { - var okBtn = $('#btn_ok_'+me.id); + let okBtn = $('#btn_ok_'+me.id); if (iCount > 0) { okBtn.prop('disabled', false); @@ -175,7 +175,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.DoAddObjects = function () { - var theMap = { + let theMap = { sAttCode: me.sAttCode, iInputId: me.iInputId, sSuffix: me.sSuffix, @@ -184,12 +184,12 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; // Gather the parameters from the search form - var context = $('#SearchResultsToAdd_'+me.id); - var selectionMode = $(':input[name=selectionMode]', context); + let context = $('#SearchResultsToAdd_'+me.id); + let selectionMode = $(':input[name=selectionMode]', context); if (selectionMode.length > 0) { // Paginated table retrieve the mode and the exceptions - var sMode = selectionMode.val(); + let sMode = selectionMode.val(); theMap['selectionMode'] = sMode; $('#fs_SearchFormToAdd_'+me.id+' :input').each( function (i) { @@ -278,7 +278,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH this.AddLink = function (iAddedId, iRemote) { // Assumption: this identifier will be higher than the previous one me.iMaxAddedId = iAddedId; - var sFormPrefix = me.iInputId; + let sFormPrefix = me.iInputId; oAdded = {}; oAdded['formPrefix'] = sFormPrefix; oAdded['attr_'+sFormPrefix+this.sExtKeyToRemote] = iRemote; @@ -291,25 +291,25 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.UpdateSizes = function (event, ui) { - var dlg = $('#dlg_'+me.id); - var searchForm = $('#SearchFormToAdd_'+me.id); - var results = $('#SearchResultsToAdd_'+me.id); - var padding_right = 0; + let dlg = $('#dlg_'+me.id); + let searchForm = $('#SearchFormToAdd_'+me.id); + let results = $('#SearchResultsToAdd_'+me.id); + let padding_right = 0; if (dlg.css('padding-right')) { padding_right = parseInt(dlg.css('padding-right').replace('px', '')); } - var padding_left = 0; + let padding_left = 0; if (dlg.css('padding-left')) { padding_left = parseInt(dlg.css('padding-left').replace('px', '')); } - var padding_top = 0; + let padding_top = 0; if (dlg.css('padding-top')) { padding_top = parseInt(dlg.css('padding-top').replace('px', '')); } - var padding_bottom = 0; + let padding_bottom = 0; if (dlg.css('padding-bottom')) { padding_bottom = parseInt(dlg.css('padding-bottom').replace('px', '')); @@ -324,26 +324,26 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.GetUpdatedValue = function () { - var sSelector = '#linkedset_'+me.id+' :input[name^=attr_'+me.id+']'; - var aIndexes = []; - var aValues = []; + let sSelector = '#linkedset_'+me.id+' :input[name^=attr_'+me.id+']'; + let aIndexes = []; + let aValues = []; $(sSelector).each(function () { - var re = /\[([^\[]+)\]\[(.+)\]/; - var aMatches = []; + let re = /\[([^\[]+)\]\[(.+)\]/; + let aMatches = []; if (aMatches = this.name.match(re)) { - var idx = aMatches[1]; - var index = jQuery.inArray(idx, aIndexes); + let idx = aMatches[1]; + let index = jQuery.inArray(idx, aIndexes); if (index == -1) { aIndexes.push(idx); index = jQuery.inArray(idx, aIndexes); aValues[index] = {}; } - var value = $(this).val(); + let value = $(this).val(); if (aMatches[2] == "id") { - var iId = parseInt(aMatches[1], 10); + let iId = parseInt(aMatches[1], 10); if (iId < 0) { aValues[index][me.sExtKeyToRemote] = -iId; @@ -367,11 +367,11 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH $('#linkedset_'+me.id+' :input[name^="attr_'+me.sAttCode+'["]').off('change').on('change', function () { if (!($(this).hasClass('selection'))) { - var oCheckbox = $(this).closest('tr').find('.selection'); - var iLink = oCheckbox.attr('data-link-id'); - var iUniqueId = oCheckbox.attr('data-unique-id'); - var sAttCode = $(this).closest('.attribute-edit').attr('data-attcode'); - var value = $(this).val(); + let oCheckbox = $(this).closest('tr').find('.selection'); + let iLink = oCheckbox.attr('data-link-id'); + let iUniqueId = oCheckbox.attr('data-unique-id'); + let sAttCode = $(this).closest('.attribute-edit').attr('data-attcode'); + let value = $(this).val(); return me.OnValueChange(iLink, iUniqueId, sAttCode, value, this); } return true; @@ -386,11 +386,11 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH * @param jQuery $oSourceObject object which fires the event */ this.OnValueChange = function (iLink, iUniqueId, sAttCode, value, $oSourceObject) { - var sFormPrefix = me.iInputId; + let sFormPrefix = me.iInputId; if (iLink > 0) { // Modifying an existing link - var oModified = me.aModified[iLink]; + let oModified = me.aModified[iLink]; if (oModified == undefined) { // Still not marked as modified @@ -413,23 +413,23 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }; this.OnFormSubmit = function () { - var oDiv = $('#linkedset_'+me.id); + let oDiv = $('#linkedset_'+me.id); - var sToBeDeleted = JSON.stringify(me.aRemoved); + let sToBeDeleted = JSON.stringify(me.aRemoved); $('').val(sToBeDeleted).appendTo(oDiv); - var sToBeModified = JSON.stringify(me.aModified); + let sToBeModified = JSON.stringify(me.aModified); $('').val(sToBeModified).appendTo(oDiv); - var aToBeCreated = []; + let aToBeCreated = []; me.aAdded.forEach(function (oAdded) { if (oAdded != null) { aToBeCreated.push(oAdded); } }); - var sToBeCreated = JSON.stringify(aToBeCreated); + let sToBeCreated = JSON.stringify(aToBeCreated); $('').val(sToBeCreated).appendTo(oDiv); // Remove unused inputs diff --git a/sources/application/UI/Base/Component/DataTable/DataTableFactory.php b/sources/application/UI/Base/Component/DataTable/DataTableFactory.php index bce12190d..2d71c5be2 100644 --- a/sources/application/UI/Base/Component/DataTable/DataTableFactory.php +++ b/sources/application/UI/Base/Component/DataTable/DataTableFactory.php @@ -347,6 +347,10 @@ class DataTableFactory } } + if (isset($aExtraParams['cssCount'])) { + $aOptions['sCountSelector'] = $aExtraParams['cssCount']; + } + $aOptions['iPageSize'] = 10; if ($oCustomSettings->iDefaultPageSize > 0) { $aOptions['iPageSize'] = $oCustomSettings->iDefaultPageSize; diff --git a/templates/base/components/datatable/layout.js.twig b/templates/base/components/datatable/layout.js.twig index 1ad7fad4a..16eb5c304 100644 --- a/templates/base/components/datatable/layout.js.twig +++ b/templates/base/components/datatable/layout.js.twig @@ -17,7 +17,7 @@ if ($.fn.dataTable.isDataTable('#{{ oUIBlock.GetId() }}')) { $('#{{ oUIBlock.GetId() }}').DataTable().destroy(false); } -var oTable{{ oUIBlock.GetId() }} = $('#{{ oUIBlock.GetId() }}').DataTable({ +var oTable{{ sListId }} = $('#{{ oUIBlock.GetId() }}').DataTable({ language: { processing: "{{ 'UI:Datatables:Language:Processing'|dict_s }}", search: "{{ 'UI:Datatables:Language:Search'|dict_s }}", @@ -93,7 +93,7 @@ var oTable{{ oUIBlock.GetId() }} = $('#{{ oUIBlock.GetId() }}').DataTable({ type: "html", data: "", render: function (data, type, row) { - var oCheckboxElem = + let oCheckboxElem = {% if oUIBlock.GetOption("select_mode") != "single" %} $(''); {% else %} @@ -148,99 +148,82 @@ var oTable{{ oUIBlock.GetId() }} = $('#{{ oUIBlock.GetId() }}').DataTable({ {% if oUIBlock.GetOption("select_mode") is not empty %} {% if oUIBlock.GetOption("select_mode") != "single" %} - oTable{{ oUIBlock.GetId() }}.off('select').on('select', function (oEvent, dt, type, indexes) { - var aData = oTable{{ oUIBlock.GetId() }}.rows(indexes).data().toArray(); + oTable{{ sListId }}.off('select').on('select', function (oEvent, dt, type, indexes) { + let aData = oTable{{ sListId }}.rows(indexes).data().toArray(); if( $(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "negative") { // Checking input $('#{{ oUIBlock.GetId() }} tr[role="row"].selected td:first-child input').prop('checked', true); // Saving values in temp array - for (var i in aData) { - var iItemId = aData[i].id; + for (let i in aData) { + let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) > -1) { oSelectedItems{{ sListId }}.splice(oSelectedItems{{ sListId }}.indexOf(iItemId), 1); updateDataTableSelection('{{ sListId }}'); } } - if (oSelectedItems{{ sListId }}.length === oTable{{ oUIBlock.GetId() }}.page.info()["recordsTotal"] ) { - $('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', true); - } else { - $('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', false); - } } else { // Checking input $('#{{ oUIBlock.GetId() }} tr[role="row"].selected td:first-child input').prop('checked', true); // Saving values in temp array - for (var i in aData) { - var iItemId = aData[i].id; + for (let i in aData) { + let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); updateDataTableSelection('{{ sListId }}'); } } - $('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', false); } }); - oTable{{ oUIBlock.GetId() }}.off('deselect').on('deselect', function (oEvent, dt, type, indexes) { - var aData = oTable{{ oUIBlock.GetId() }}.rows(indexes).data().toArray(); + oTable{{ sListId }}.off('deselect').on('deselect', function (oEvent, dt, type, indexes) { + let aData = oTable{{ sListId }}.rows(indexes).data().toArray(); // Checking input $('#{{ oUIBlock.GetId() }} tr[role="row"]:not(.selected) td:first-child input').prop('checked', false); // Saving values in temp array if ($(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "negative") { - for (var i in aData) { - var iItemId = aData[i].id; + for (let i in aData) { + let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); updateDataTableSelection('{{ sListId }}'); } } - if (oSelectedItems{{ sListId }}.length === oTable{{ oUIBlock.GetId() }}.page.info()["recordsTotal"]) { - $('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', true); - } else { - $('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', false); - } } else { - for (var i in aData) { - var iItemId = aData[i].id; + for (let i in aData) { + let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) > -1) { oSelectedItems{{ sListId }}.splice(oSelectedItems{{ sListId }}.indexOf(iItemId), 1); updateDataTableSelection('{{ sListId }}'); } } - if (oSelectedItems{{ sListId }}.length === 0) { - $('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', true); - } else { - $('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', false); - } } }); {% else %} - oTable{{ oUIBlock.GetId() }}.off('select').on('select', function (oEvent, dt, type, indexes) { - var aData = oTable{{ oUIBlock.GetId() }}.rows(indexes).data().toArray(); + oTable{{ sListId }}.off('select').on('select', function (oEvent, dt, type, indexes) { + let aData = oTable{{ sListId }}.rows(indexes).data().toArray(); // Checking input $('#{{ oUIBlock.GetId() }} tr[role="row"].selected td:first-child input').prop('checked', true); // Saving values in temp array - for (var i in aData) { - var iItemId = aData[i].id; + for (let i in aData) { + let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); updateDataTableSelection('{{ sListId }}'); } } - $('#btn_ok_{{ sListId }}').prop('disabled', false); }); - oTable{{ oUIBlock.GetId() }}.off('deselect').on('deselect', function (oEvent, dt, type, indexes) { - var aData = oTable{{ oUIBlock.GetId() }}.rows(indexes).data().toArray(); + oTable{{ sListId }}.off('deselect').on('deselect', function (oEvent, dt, type, indexes) { + let aData = oTable{{ sListId }}.rows(indexes).data().toArray(); // Checking input $('#{{ oUIBlock.GetId() }} tr[role="row"]:not(.selected) td:first-child input').prop('checked', false); // Saving values in temp array - for (var i in aData) { - var iItemId = aData[i].id; + for (let i in aData) { + let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) > -1) { oSelectedItems{{ sListId }}.splice(oSelectedItems{{ sListId }}.indexOf(iItemId), 1); updateDataTableSelection('{{ sListId }}'); @@ -248,6 +231,14 @@ var oTable{{ oUIBlock.GetId() }} = $('#{{ oUIBlock.GetId() }}').DataTable({ } }); {% endif %} + + {% if oUIBlock.GetOption('sCountSelector') is not empty %} + $('#{{ sListId }} [name="selectionCount"]').bind('change', function() { + $('{{ oUIBlock.GetOption('sCountSelector') }}').val($('#{{ sListId }} [name="selectionCount"]').val()); + $('{{ oUIBlock.GetOption('sCountSelector') }}').trigger('change'); + }); + {% endif %} + {% endif %} $('#datatable_dlg_{{ oUIBlock.GetId() }}').dialog(