{# @copyright Copyright (C) 2010-2021 Combodo SARL #} {# @license http://opensource.org/licenses/AGPL-3.0 #} {% set sListId = oUIBlock.GetOption('sListId') %} {% set sListIDForVarSuffix = ('' ~ sListId)|sanitize(constant('utils::ENUM_SANITIZATION_FILTER_VARIABLE_NAME')) %} {% if oUIBlock.GetOption("iPageSize") is not empty %} {% set iPageSize = oUIBlock.GetOption("iPageSize") %} {% else %} {% set iPageSize = 10 %} {% endif %} $('#{{ oUIBlock.GetId() }}').closest("[role=dialog]").on("dialogbeforeclose", function () { $('#{{ oUIBlock.GetId() }}').DataTable().clear(); }); $('#{{ sListId }}').data('target', 'ibo-datatables--outer'); if ($('#{{ oUIBlock.GetId() }}') != 'undefined' && $.fn.dataTable.isDataTable('#{{ oUIBlock.GetId() }}')) { $('#{{ oUIBlock.GetId() }}').DataTable().destroy(false); } var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ language: { processing: "{{ 'UI:Datatables:Language:Processing'|dict_s }}", search: "{{ 'UI:Datatables:Language:Search'|dict_s }}", lengthMenu: "{{ 'UI:Datatables:Language:LengthMenu'|dict_s }}", zeroRecords: "{{ 'UI:Datatables:Language:ZeroRecords'|dict_s }}", info: "{{ 'UI:Datatables:Language:Info'|dict_s }}", infoEmpty: "{{ 'UI:Datatables:Language:InfoEmpty'|dict_s }}", infoFiltered: "({{ 'UI:Datatables:Language:InfoFiltered'|dict_s }})", emptyTable: "{{ 'UI:Datatables:Language:EmptyTable'|dict_s }}", paginate: { first: "", previous: "", next: "", last: "" }, aria: { sortAscending: ": {{ 'UI:Datatables:Language:Sort:Ascending'|dict_s }}", sortDescending: ": {{ 'UI:Datatables:Language:Sort:Descending'|dict_s }}" } }, scrollX: true, {% if oUIBlock.GetOption('sMaxHeight') is not empty %} scrollY: "{{ oUIBlock.GetOption('sMaxHeight') }}", {% endif %} scrollCollapse: true, lengthMenu: [[ {{ iPageSize }}, {{ iPageSize*2 }}, {{ iPageSize*3 }}, {{ iPageSize*4 }}, -1], [ {{ iPageSize }}, {{ iPageSize*2 }}, {{ iPageSize*3 }}, {{ iPageSize*4 }}, "{{ 'UI:Datatables:Language:DisplayLength:All'|dict_s }}"]], dom: "<'ibo-datatable--toolbar'<'ibo-datatable--toolbar-left' pl><'ibo-datatable--toolbar-right' i>>t<'ibo-datatable--toolbar'<'ibo-datatable--toolbar-left' pl><'ibo-datatable--toolbar-right' i>>", {% if( oUIBlock.GetOption("sort")[0] is defined ) %} order: [[{{ oUIBlock.GetOptions()["sort"][0] }}, '{{ oUIBlock.GetOptions()["sort"][1] }}']], {% else %} order: [], {% endif %} ordering: true, {% if oUIBlock.GetOption("select_mode") is not empty %} select: { style: "{% if oUIBlock.GetOption("select_mode") == "multiple" %}multi{% else %}single{% endif %}", info: false }, rowCallback: function (oRow, oData) { if ($(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "negative") { if (oSelectedItems{{ sListId }}.indexOf(oData.id) === -1) { this.api().row($(oRow)).select(); // $(oRow).addClass('selected'); $(oRow).find('td:first-child input').prop('checked', true); } } else { if (oSelectedItems{{ sListId }}.indexOf(oData.id) > -1) { this.api().row($(oRow)).select(); $(oRow).find('td:first-child input').prop('checked', true); } } }, drawCallback: function () { if ($(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "negative") { $(this).closest('.dataTables_wrapper').find('.checkAll')[0].checked = true; } bSelectAllowed{{ oUIBlock.GetId() }} = true; // Hiding pagination if only one page if ($(this).closest('.dataTables_wrapper').find('.dataTables_paginate:last .paginate_button:not(.previous):not(.next)').length < 2) { $(this).closest('.dataTables_wrapper').find('.dataTables_paginate, .dataTables_info').hide(); } else { $(this).closest('.dataTables_wrapper').find('.dataTables_paginate, .dataTables_info').show(); } $("#{{ oUIBlock.GetId() }} a").on('click', function (e) { //disable select action when there is a link e.stopPropagation(); }); }, {% else %} drawCallback: function () { // Hiding pagination if only one page if ($(this).closest('.dataTables_wrapper').find('.dataTables_paginate:last .paginate_button:not(.previous):not(.next)').length < 2) { $(this).closest('.dataTables_wrapper').find('.dataTables_paginate, .dataTables_info').hide(); } else { $(this).closest('.dataTables_wrapper').find('.dataTables_paginate, .dataTables_info').show(); } }, {% endif %} rowId: "id", filter: false, retrieve: true, destroy: true, processing: true, serverSide: true, columns: [ {% if oUIBlock.GetOption("select_mode") is not empty %} { width: "20px", searchable: false, sortable: false, orderable: false, title: {% if oUIBlock.GetOption("select_mode") != "single" %} '' {% else %} '' {% endif %}, type: "html", data: "", render: function (data, type, row) { let oCheckboxElem = {% if oUIBlock.GetOption("select_mode") != "single" %} $(''); {% else %} $(''); {% endif %} if (row.limited_access) { oCheckboxElem.html('-'); } else { oCheckboxElem.find(':input').attr('data-object-id', row.id).attr('data-target-object-id', row.target_id); } return oCheckboxElem.prop('outerHTML'); } }, {% endif %} {% for aColumn in oUIBlock.GetDisplayColumns() %} { // width: 100, autoWidth: true, searchable: false, sortable: true, title: "{{ aColumn["attribute_label"] }}", defaultContent: "", type: "html", metadata: { object_class: "{{ aColumn["object_class"] }}", attribute_code: "{{ aColumn["attribute_code"] }}", attribute_type: "{{ aColumn["attribute_type"] }}", attribute_label: "{{ aColumn["attribute_label"] }}" }, data: "{{ aColumn["class_alias"] }}/{{ aColumn["attribute_code"] }}", render: { display: function (data, type, row) { {{ aColumn["render"]|raw }}}, _: "{{ aColumn["class_alias"] }}/{{ aColumn["attribute_code"] }}" } }, {% endfor %} ], ajax: $.fn.dataTable.pipeline({ url: "{{ oUIBlock.GetAjaxUrl() }}", data: {{ oUIBlock.GetJsonAjaxData() |raw }}, method: "post", pages: 1 // number of pages to cache }), createdRow: function( row, data, dataIndex ) { if (data['@class'] !== undefined) { $(row).addClass(data['@class']); } }, initComplete: function () { this.api().columns.adjust().draw(); if (this.api().page.info().pages < 2) { this.parent().find('.dataTables_paginate').hide(); this.parent().find('.dataTables_length').hide(); } this.find('.ibo-dataTables--processing').remove(); this.find('tbody').unblock(); this.find('thead').unblock(); {% if oUIBlock.GetOption("select_mode") is not empty %} updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); {% if oUIBlock.GetOption("select_mode") != "single" %} this.api().on('select', function (oEvent, dt, type, indexes) { if (bSelectAllowed{{ oUIBlock.GetId() }}) { let aData = oTable{{ sListIDForVarSuffix }}.rows(indexes).data().toArray(); if ($(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "negative") { // Checking input $('#{{ oUIBlock.GetId() }} tbody tr.selected td:first-child input').prop('checked', true); // Saving values in temp array 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 }}', '{{ oUIBlock.GetId() }}'); } } } else { // Checking input $('#{{ oUIBlock.GetId() }} tbody tr.selected td:first-child input').prop('checked', true); // Saving values in temp array for (let i in aData) { let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } } }); this.api().off('deselect').on('deselect', function (oEvent, dt, type, indexes) { if (bSelectAllowed{{ oUIBlock.GetId() }} ) { let aData = oTable{{ sListIDForVarSuffix }}.rows(indexes).data().toArray(); // Checking input $('#{{ oUIBlock.GetId() }} tbody tr: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 (let i in aData) { let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } else { 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 }}', '{{ oUIBlock.GetId() }}'); } } } } }); {% else %} this.api().off('select').on('select', function (oEvent, dt, type, indexes) { if (bSelectAllowed{{ oUIBlock.GetId() }} ) { let aData = oTable{{ sListIDForVarSuffix }}.rows(indexes).data().toArray(); // Checking input $('#{{ oUIBlock.GetId() }} tbody tr.selected td:first-child input').prop('checked', true); // Saving values in temp array for (let i in aData) { let iItemId = aData[i].id; if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } }); this.api().off('deselect').on('deselect', function (oEvent, dt, type, indexes) { if (bSelectAllowed{{ oUIBlock.GetId() }} ) { let aData = oTable{{ sListIDForVarSuffix }}.rows(indexes).data().toArray(); // Checking input $('#{{ oUIBlock.GetId() }} tr tbody tr:not(.selected) td:first-child input').prop('checked', false); // Saving values in temp array 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 }}', '{{ oUIBlock.GetId() }}'); } } } }); {% endif %} {% if oUIBlock.GetDisabledSelect() is not empty %} {% for key in oUIBlock.GetDisabledSelect() %} $('.selectList{{ oUIBlock.GetId() }}[value={{ key }}]').prop("disabled","disabled"); {% endfor %} {% endif %} {% endif %} } }); oTable{{ sListIDForVarSuffix }}.select(); {% 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 %} $('#datatable_dlg_{{ oUIBlock.GetId() }}').dialog( { autoOpen: false, title: "{{ 'UI:ListConfigurationTitle'|dict_s }}", width: 500, modal: true, open: function () { $('#datatable_dlg_{{ oUIBlock.GetId() }}').find('[name=action]').val("none"); }, close: function (event, ui) { //save data and refresh if ($('#datatable_dlg_{{ oUIBlock.GetId() }}').find('[name=action]').val() === "none") { $('#datatable_dlg_{{ oUIBlock.GetId() }}').DataTableSettings('onDlgCancel'); } } }); var aOptions{{ sListIDForVarSuffix }} = { sListId: '{{ oUIBlock.GetId() }}', oColumns: {{ oUIBlock.GetResultColumnsAsJson()|raw }}, sSelectMode: "{{ oUIBlock.GetOption("select_mode") }}", sSelectedItemsName: "oSelectedItems{{ sListId }}", sViewLink: '{{ oUIBlock.GetOption("bViewLink") }}', iPageSize: '{{ oUIBlock.GetOption("iPageSize") }}', oClassAliases: JSON.parse('{{ oUIBlock.GetOption("oClassAliases") |raw }}'), sTableId: '{{ oUIBlock.GetOption("sTableId") }}', sRenderUrl: "{{ oUIBlock.GetAjaxUrl() }}", oData: {{ oUIBlock.GetJsonAjaxData() |raw }}, oDefaultSettings: {{ oUIBlock.GetOption("oDefaultSettings")|raw }}, oLabels: {moveup: "{{ 'UI:Button:MoveUp'|dict_s }}", movedown: "{{ 'UI:Button:MoveDown'|dict_s }}"}, }; if ($('#datatable_dlg_{{ oUIBlock.GetId() }}').hasClass('itop-datatable')) { $('#datatable_dlg_{{ oUIBlock.GetId() }}').DataTableSettings('destroy'); } $('#datatable_dlg_{{ oUIBlock.GetId() }}').DataTableSettings(aOptions{{ sListIDForVarSuffix }}); if(window.ResizeObserver){ let oTable{{ sListIDForVarSuffix }}ResizeTimeout = null; const oTable{{ sListIDForVarSuffix }}Resize = new ResizeObserver(function(){ clearTimeout(oTable{{ sListIDForVarSuffix }}ResizeTimeout); oTable{{ sListIDForVarSuffix }}ResizeTimeout = setTimeout(function(){ $('#{{ oUIBlock.GetId() }}').DataTable().columns.adjust(); }, 120); }); oTable{{ sListIDForVarSuffix }}Resize.observe($('#{{ oUIBlock.GetId() }}')[0]); }