diff --git a/data/web/edit.php b/data/web/edit.php index dfba8479..742d2d64 100644 --- a/data/web/edit.php +++ b/data/web/edit.php @@ -187,5 +187,6 @@ $js_minifier->add('/web/js/site/pwgen.js'); $template_data['result'] = $result; $template_data['return_to'] = $_SESSION['return_to']; $template_data['lang_user'] = json_encode($lang['user']); +$template_data['lang_datatables'] = json_encode($lang['datatables']); require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php'; diff --git a/data/web/js/site/edit.js b/data/web/js/site/edit.js index 786a5995..5c9755b3 100644 --- a/data/web/js/site/edit.js +++ b/data/web/js/site/edit.js @@ -66,22 +66,14 @@ jQuery(function($){ return re.test(email); } function draw_wl_policy_domain_table() { - ft_wl_policy_mailbox_table = FooTable.init('#wl_policy_domain_table', { - "columns": [ - {"name":"chkbox","title":"","style":{"maxWidth":"40px","width":"40px"},"filterable": false,"sortable": false,"type":"html"}, - {"name":"prefid","style":{"maxWidth":"40px","width":"40px"},"title":"ID","filterable": false,"sortable": false}, - {"sorted": true,"name":"value","title":lang_user.spamfilter_table_rule}, - {"name":"object","title":"Scope"} - ], - "empty": lang_user.empty, - "rows": $.ajax({ - dataType: 'json', + $('#wl_policy_domain_table').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", url: '/api/v1/get/policy_wl_domain/' + table_for_domain, - jsonp: false, - error: function () { - console.log('Cannot draw mailbox policy wl table'); - }, - success: function (data) { + dataSrc: function(data){ $.each(data, function (i, item) { if (!validateEmail(item.object)) { item.chkbox = ''; @@ -90,35 +82,47 @@ jQuery(function($){ item.chkbox = ''; } }); + + return data; } - }), - "paging": { - "enabled": true, - "limit": 5, - "size": pagination_size }, - "sorting": { - "enabled": true - } + columns: [ + { + // placeholder, so checkbox will not block child row toggle + title: '', + data: null, + searchable: false, + orderable: false, + defaultContent: '' + }, + { + title: '', + data: 'chkbox' + }, + { + title: 'ID', + data: 'prefid', + }, + { + title: lang_user.spamfilter_table_rule, + data: 'value' + }, + { + title: 'Scope', + data: 'object' + } + ] }); } function draw_bl_policy_domain_table() { - ft_bl_policy_mailbox_table = FooTable.init('#bl_policy_domain_table', { - "columns": [ - {"name":"chkbox","title":"","style":{"maxWidth":"40px","width":"40px"},"filterable": false,"sortable": false,"type":"html"}, - {"name":"prefid","style":{"maxWidth":"40px","width":"40px"},"title":"ID","filterable": false,"sortable": false}, - {"sorted": true,"name":"value","title":lang_user.spamfilter_table_rule}, - {"name":"object","title":"Scope"} - ], - "empty": lang_user.empty, - "rows": $.ajax({ - dataType: 'json', + $('#bl_policy_domain_table').DataTable({ + processing: true, + serverSide: false, + language: lang_datatables, + ajax: { + type: "GET", url: '/api/v1/get/policy_bl_domain/' + table_for_domain, - jsonp: false, - error: function () { - console.log('Cannot draw mailbox policy bl table'); - }, - success: function (data) { + dataSrc: function(data){ $.each(data, function (i, item) { if (!validateEmail(item.object)) { item.chkbox = ''; @@ -127,18 +131,55 @@ jQuery(function($){ item.chkbox = ''; } }); + + return data; } - }), - "paging": { - "enabled": true, - "limit": 5, - "size": pagination_size }, - "sorting": { - "enabled": true - } + columns: [ + { + // placeholder, so checkbox will not block child row toggle + title: '', + data: null, + searchable: false, + orderable: false, + defaultContent: '' + }, + { + title: '', + data: 'chkbox' + }, + { + title: 'ID', + data: 'prefid', + }, + { + title: lang_user.spamfilter_table_rule, + data: 'value' + }, + { + title: 'Scope', + data: 'object' + } + ] }); } - draw_wl_policy_domain_table(); - draw_bl_policy_domain_table(); + + + // detect element visibility changes + function onVisible(element, callback) { + $(element).ready(function() { + element_object = document.querySelector(element) + new IntersectionObserver((entries, observer) => { + entries.forEach(entry => { + if(entry.intersectionRatio > 0) { + callback(element_object); + observer.disconnect(); + } + }); + }).observe(element_object); + }); + } + // Draw Table if tab is active + onVisible("[id^=wl_policy_domain_table]", () => draw_wl_policy_domain_table()); + onVisible("[id^=bl_policy_domain_table]", () => draw_bl_policy_domain_table()); }); diff --git a/data/web/templates/edit.twig b/data/web/templates/edit.twig index f1b9e651..1d5a4e0e 100644 --- a/data/web/templates/edit.twig +++ b/data/web/templates/edit.twig @@ -23,6 +23,7 @@