[BS5] add responsive tabs and more
This commit is contained in:
67 files changed
+786
-409
No files matched your search
+1
-1
@@ -1 +1 @@
|
||||
!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){function s(s){var e=!1;return t('[data-notify="container"]').each(function(i,n){var a=t(n),o=a.find('[data-notify="title"]').text().trim(),r=a.find('[data-notify="message"]').html().trim(),l=o===t("<div>"+s.settings.content.title+"</div>").html().trim(),d=r===t("<div>"+s.settings.content.message+"</div>").html().trim(),g=a.hasClass("alert-"+s.settings.type);return l&&d&&g&&(e=!0),!e}),e}function e(e,n,a){var o={content:{message:"object"==typeof n?n.message:n,title:n.title?n.title:"",icon:n.icon?n.icon:"",url:n.url?n.url:"#",target:n.target?n.target:"-"}};a=t.extend(!0,{},o,a),this.settings=t.extend(!0,{},i,a),this._defaults=i,"-"===this.settings.content.target&&(this.settings.content.target=this.settings.url_target),this.animations={start:"webkitAnimationStart oanimationstart MSAnimationStart animationstart",end:"webkitAnimationEnd oanimationend MSAnimationEnd animationend"},"number"==typeof this.settings.offset&&(this.settings.offset={x:this.settings.offset,y:this.settings.offset}),(this.settings.allow_duplicates||!this.settings.allow_duplicates&&!s(this))&&this.init()}var i={element:"body",position:null,type:"info",allow_dismiss:!0,allow_duplicates:!0,newest_on_top:!1,showProgressbar:!1,placement:{from:"top",align:"right"},offset:20,spacing:10,z_index:1031,delay:5e3,timer:1e3,url_target:"_blank",mouse_over:null,animate:{enter:"animated fadeInDown",exit:"animated fadeOutUp"},onShow:null,onShown:null,onClose:null,onClosed:null,icon_type:"class",template:'<div data-notify="container" class="col-xs-11 col-sm-4 alert alert-{0}" role="alert"><button type="button" aria-hidden="true" class="close" data-notify="dismiss">×</button><span data-notify="icon"></span> <span data-notify="title">{1}</span> <span data-notify="message">{2}</span><div class="progress" data-notify="progressbar"><div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div></div><a href="{3}" target="{4}" data-notify="url"></a></div>'};String.format=function(){for(var t=arguments[0],s=1;s<arguments.length;s++)t=t.replace(RegExp("\\{"+(s-1)+"\\}","gm"),arguments[s]);return t},t.extend(e.prototype,{init:function(){var t=this;this.buildNotify(),this.settings.content.icon&&this.setIcon(),"#"!=this.settings.content.url&&this.styleURL(),this.styleDismiss(),this.placement(),this.bind(),this.notify={$ele:this.$ele,update:function(s,e){var i={};"string"==typeof s?i[s]=e:i=s;for(var n in i)switch(n){case"type":this.$ele.removeClass("alert-"+t.settings.type),this.$ele.find('[data-notify="progressbar"] > .progress-bar').removeClass("progress-bar-"+t.settings.type),t.settings.type=i[n],this.$ele.addClass("alert-"+i[n]).find('[data-notify="progressbar"] > .progress-bar').addClass("progress-bar-"+i[n]);break;case"icon":var a=this.$ele.find('[data-notify="icon"]');"class"===t.settings.icon_type.toLowerCase()?a.removeClass(t.settings.content.icon).addClass(i[n]):(a.is("img")||a.find("img"),a.attr("src",i[n]));break;case"progress":var o=t.settings.delay-t.settings.delay*(i[n]/100);this.$ele.data("notify-delay",o),this.$ele.find('[data-notify="progressbar"] > div').attr("aria-valuenow",i[n]).css("width",i[n]+"%");break;case"url":this.$ele.find('[data-notify="url"]').attr("href",i[n]);break;case"target":this.$ele.find('[data-notify="url"]').attr("target",i[n]);break;default:this.$ele.find('[data-notify="'+n+'"]').html(i[n])}var r=this.$ele.outerHeight()+parseInt(t.settings.spacing)+parseInt(t.settings.offset.y);t.reposition(r)},close:function(){t.close()}}},buildNotify:function(){var s=this.settings.content;this.$ele=t(String.format(this.settings.template,this.settings.type,s.title,s.message,s.url,s.target)),this.$ele.attr("data-notify-position",this.settings.placement.from+"-"+this.settings.placement.align),this.settings.allow_dismiss||this.$ele.find('[data-notify="dismiss"]').css("display","none"),(this.settings.delay<=0&&!this.settings.showProgressbar||!this.settings.showProgressbar)&&this.$ele.find('[data-notify="progressbar"]').remove()},setIcon:function(){"class"===this.settings.icon_type.toLowerCase()?this.$ele.find('[data-notify="icon"]').addClass(this.settings.content.icon):this.$ele.find('[data-notify="icon"]').is("img")?this.$ele.find('[data-notify="icon"]').attr("src",this.settings.content.icon):this.$ele.find('[data-notify="icon"]').append('<img src="'+this.settings.content.icon+'" alt="Notify Icon" />')},styleDismiss:function(){this.$ele.find('[data-notify="dismiss"]').css({position:"absolute",right:"10px",top:"5px",zIndex:this.settings.z_index+2})},styleURL:function(){this.$ele.find('[data-notify="url"]').css({backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)",height:"100%",left:0,position:"absolute",top:0,width:"100%",zIndex:this.settings.z_index+1})},placement:function(){varLine truncated
|
||||
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(h,b,d){var f,e,g={content:{message:"object"==typeof b?b.message:b,title:b.title?b.title:"",icon:b.icon?b.icon:"",url:b.url?b.url:"#",target:b.target?b.target:"-"}};d=a.extend(!0,{},g,d),this.settings=a.extend(!0,{},c,d),this._defaults=c,"-"===this.settings.content.target&&(this.settings.content.target=this.settings.url_target),this.animations={start:"webkitAnimationStart oanimationstart MSAnimationStart animationstart",end:"webkitAnimationEnd oanimationend MSAnimationEnd animationend"},"number"==typeof this.settings.offset&&(this.settings.offset={x:this.settings.offset,y:this.settings.offset}),!this.settings.allow_duplicates&&(this.settings.allow_duplicates||(f=this,e=!1,a('[data-notify="container"]').each(function(k,c){var b=a(c),d=b.find('[data-notify="title"]').text().trim(),g=b.find('[data-notify="message"]').html().trim(),h=d===a("<div>"+f.settings.content.title+"</div>").html().trim(),i=g===a("<div>"+f.settings.content.message+"</div>").html().trim(),j=b.hasClass("alert-"+f.settings.type);return h&&i&&j&&(e=!0),!e}),e))||this.init()}var c={element:"body",position:null,type:"info",allow_dismiss:!0,allow_duplicates:!0,newest_on_top:!1,showProgressbar:!1,placement:{from:"top",align:"right"},offset:20,spacing:10,z_index:1031,delay:5e3,timer:1e3,url_target:"_blank",mouse_over:null,animate:{enter:"animated fadeInDown",exit:"animated fadeOutUp"},onShow:null,onShown:null,onClose:null,onClosed:null,icon_type:"class",template:'<div data-notify="container" class="col-xs-11 col-sm-4 alert alert-{0}" role="alert"><button type="button" aria-hidden="true" class="btn-close" data-notify="dismiss"></button><span data-notify="icon"></span> <span data-notify="title">{1}</span> <span data-notify="message">{2}</span><div class="progress" data-notify="progressbar"><div class="progress-bar progress-bar-{0}" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;"></div></div><a href="{3}" target="{4}" data-notify="url"></a></div>'};String.format=function(){for(var b=arguments[0],a=1;a<arguments.length;a++)b=b.replace(RegExp("\\{"+(a-1)+"\\}","gm"),arguments[a]);return b},a.extend(b.prototype,{init:function(){var a=this;this.buildNotify(),this.settings.content.icon&&this.setIcon(),"#"!=this.settings.content.url&&this.styleURL(),this.styleDismiss(),this.placement(),this.bind(),this.notify={$ele:this.$ele,update:function(e,f){var b={};for(var c in"string"==typeof e?b[e]=f:b=e,b)switch(c){case"type":this.$ele.removeClass("alert-"+a.settings.type),this.$ele.find('[data-notify="progressbar"] > .progress-bar').removeClass("progress-bar-"+a.settings.type),a.settings.type=b[c],this.$ele.addClass("alert-"+b[c]).find('[data-notify="progressbar"] > .progress-bar').addClass("progress-bar-"+b[c]);break;case"icon":var d=this.$ele.find('[data-notify="icon"]');"class"===a.settings.icon_type.toLowerCase()?d.removeClass(a.settings.content.icon).addClass(b[c]):(d.is("img")||d.find("img"),d.attr("src",b[c]));break;case"progress":var g=a.settings.delay-a.settings.delay*(b[c]/100);this.$ele.data("notify-delay",g),this.$ele.find('[data-notify="progressbar"] > div').attr("aria-valuenow",b[c]).css("width",b[c]+"%");break;case"url":this.$ele.find('[data-notify="url"]').attr("href",b[c]);break;case"target":this.$ele.find('[data-notify="url"]').attr("target",b[c]);break;default:this.$ele.find('[data-notify="'+c+'"]').html(b[c])}var h=this.$ele.outerHeight()+parseInt(a.settings.spacing)+parseInt(a.settings.offset.y);a.reposition(h)},close:function(){a.close()}}},buildNotify:function(){var b=this.settings.content;this.$ele=a(String.format(this.settings.template,this.settings.type,b.title,b.message,b.url,b.target)),this.$ele.attr("data-notify-position",this.settings.placement.from+"-"+this.settings.placement.align),this.settings.allow_dismiss||this.$ele.find('[data-notify="dismiss"]').css("display","none"),(!(this.settings.delay<=0)||this.settings.showProgressbar)&&this.settings.showProgressbar||this.$ele.find('[data-notify="progressbar"]').remove()},setIcon:function(){"class"===this.settings.icon_type.toLowerCase()?this.$ele.find('[data-notify="icon"]').addClass(this.settings.content.icon):this.$ele.find('[data-notify="icon"]').is("img")?this.$ele.find('[data-notify="icon"]').attr("src",this.settings.content.icon):this.$ele.find('[data-notify="icon"]').append('<img src="'+this.settings.content.icon+'" alt="Notify Icon" />')},styleDismiss:function(){this.$ele.find('[data-notify="dismiss"]').css({position:"absolute",right:"10px",top:"5px",zIndex:this.settings.z_index+2})},styleURL:function(){this.$ele.find('[data-notify="url"]').css({backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)",height:"100%",left:0,position:"absolute",top:0,width:"100%",zIndex:this.settings.z_index+1})},placement:function(){var d=this,b=this.settings.Line truncated
|
||||
@@ -318,6 +318,7 @@ $(document).ready(function() {
|
||||
|
||||
// General API delete actions
|
||||
$(document).on('click', "[data-action='delete_selected']", function(e) {
|
||||
console.log("delete");
|
||||
e.preventDefault();
|
||||
var id = $(this).data('id');
|
||||
// If clicked element #delete_selected has data-item attribute, it is added to "items"
|
||||
@@ -336,6 +337,7 @@ $(document).ready(function() {
|
||||
if (typeof multi_data[id] == "undefined" || multi_data[id] == "") return;
|
||||
data_array = multi_data[id];
|
||||
api_url = $(this).data('api-url');
|
||||
console.log("delete modal");
|
||||
$(document).on('show.bs.modal', '#ConfirmDeleteModal', function() {
|
||||
$("#ItemsToDelete").empty();
|
||||
for (var i in data_array) {
|
||||
@@ -343,10 +345,7 @@ $(document).ready(function() {
|
||||
$("#ItemsToDelete").append("<li>" + data_array[i] + "</li>");
|
||||
}
|
||||
})
|
||||
$('#ConfirmDeleteModal').modal({
|
||||
backdrop: 'static',
|
||||
keyboard: false
|
||||
})
|
||||
$('#ConfirmDeleteModal').modal('show')
|
||||
.one('click', '#IsConfirmed', function(e) {
|
||||
if (is_active($('#IsConfirmed'))) { return false; }
|
||||
$.ajax({
|
||||
|
||||
@@ -61,8 +61,8 @@ $(document).ready(function() {
|
||||
// remember last navigation pill
|
||||
(function () {
|
||||
'use strict';
|
||||
if ($('a[data-bs-toggle="tab"]').length) {
|
||||
$('a[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
|
||||
if ($('button[data-bs-toggle="tab"]').length) {
|
||||
$('button[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
|
||||
if ($(this).data('dont-remember') == 1) {
|
||||
return true;
|
||||
}
|
||||
@@ -71,7 +71,7 @@ $(document).ready(function() {
|
||||
if (id) {
|
||||
key += ':' + id;
|
||||
}
|
||||
localStorage.setItem(key, $(e.target).attr('href'));
|
||||
localStorage.setItem(key, $(e.target).attr('data-bs-target').substring(1));
|
||||
});
|
||||
$('[role="tablist"]').each(function (idx, elem) {
|
||||
var id = $(elem).attr('id');
|
||||
@@ -81,7 +81,7 @@ $(document).ready(function() {
|
||||
}
|
||||
var lastTab = localStorage.getItem(key);
|
||||
if (lastTab) {
|
||||
$('[href="' + lastTab + '"]').tab('show');
|
||||
$("[id^=" + lastTab + "]").show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ jQuery(function($){
|
||||
$("#show_rspamd_global_filters").click(function() {
|
||||
$.get("inc/ajax/show_rspamd_global_filters.php");
|
||||
$("#confirm_show_rspamd_global_filters").hide();
|
||||
$("#rspamd_global_filters").removeClass("hidden");
|
||||
$("#rspamd_global_filters").removeClass("d-none");
|
||||
});
|
||||
$("#super_delete").click(function() { return confirm(lang.queue_ays); });
|
||||
$(".refresh_table").on('click', function(e) {
|
||||
@@ -533,17 +533,13 @@ jQuery(function($){
|
||||
});
|
||||
}
|
||||
// Draw Table if tab is active
|
||||
onVisible("[id^=tab-config-admins]", () => {
|
||||
draw_admins();
|
||||
draw_domain_admins();
|
||||
});
|
||||
onVisible("[id^=tab-config-oauth2]", () => draw_oauth2_clients());
|
||||
onVisible("[id^=tab-config-fwdhosts]", () => draw_fwd_hosts());
|
||||
onVisible("[id^=tab-routing]", () => {
|
||||
draw_relayhosts();
|
||||
draw_transport_maps();
|
||||
});
|
||||
onVisible("[id^=tab-mailq]", () => draw_queue());
|
||||
onVisible("[id^=collapse-tab-config-admins]", () => draw_admins());
|
||||
onVisible("[id^=collapse-tab-config-dadmins]", () => draw_domain_admins());
|
||||
onVisible("[id^=collapse-tab-config-oauth2]", () => draw_oauth2_clients());
|
||||
onVisible("[id^=collapse-tab-config-fwdhosts]", () => draw_fwd_hosts());
|
||||
onVisible("[id^=collapse-tab-routing]", () => draw_relayhosts());
|
||||
onVisible("[id^=collapse-tab-maps]", () => draw_transport_maps());
|
||||
onVisible("[id^=collapse-tab-mailq]", () => draw_queue());
|
||||
|
||||
|
||||
$('body').on('click', 'span.footable-toggle', function () {
|
||||
|
||||
@@ -75,6 +75,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/autodiscover/100",
|
||||
@@ -115,6 +116,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/postfix",
|
||||
@@ -147,6 +149,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/watchdog",
|
||||
@@ -183,6 +186,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/api",
|
||||
@@ -223,6 +227,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/ratelimited",
|
||||
@@ -295,6 +300,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/ui",
|
||||
@@ -347,6 +353,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/sasl",
|
||||
@@ -383,6 +390,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/acme",
|
||||
@@ -411,6 +419,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/netfilter",
|
||||
@@ -443,6 +452,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/sogo",
|
||||
@@ -475,6 +485,7 @@ jQuery(function($){
|
||||
processing: true,
|
||||
serverSide: false,
|
||||
language: lang_datatables,
|
||||
order: [[0, 'desc']],
|
||||
ajax: {
|
||||
type: "GET",
|
||||
url: "/api/v1/get/logs/dovecot",
|
||||
@@ -507,11 +518,13 @@ jQuery(function($){
|
||||
url: '/api/v1/get/rspamd/actions',
|
||||
async: true,
|
||||
success: function(data){
|
||||
console.log(data);
|
||||
|
||||
var total = 0;
|
||||
$(data).map(function(){total += this[1];});
|
||||
var labels = $.makeArray($(data).map(function(){return this[0] + ' ' + Math.round(this[1]/total * 100) + '%';}));
|
||||
var values = $.makeArray($(data).map(function(){return this[1];}));
|
||||
console.log(values);
|
||||
|
||||
var graphdata = {
|
||||
labels: labels,
|
||||
@@ -540,7 +553,7 @@ jQuery(function($){
|
||||
}
|
||||
};
|
||||
var chartcanvas = document.getElementById('rspamd_donut');
|
||||
Chart.plugins.register('ChartDataLabels');
|
||||
Chart.register('ChartDataLabels');
|
||||
if(typeof chart == 'undefined') {
|
||||
chart = new Chart(chartcanvas.getContext("2d"), {
|
||||
plugins: [ChartDataLabels],
|
||||
@@ -859,12 +872,8 @@ jQuery(function($){
|
||||
onVisible("[id^=tab-ui]", () => draw_ui_logs());
|
||||
onVisible("[id^=tab-sasl]", () => draw_sasl_logs());
|
||||
onVisible("[id^=tab-netfilter-logs]", () => draw_netfilter_logs());
|
||||
onVisible("[id^=tab-rspamd-history]", () => draw_rspamd_history());
|
||||
|
||||
$('a[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
|
||||
var target = $(e.target).attr("href");
|
||||
if (target == '#tab-rspamd-history') {
|
||||
rspamd_pie_graph();
|
||||
}
|
||||
onVisible("[id^=tab-rspamd-history]", () => {
|
||||
rspamd_pie_graph();
|
||||
draw_rspamd_history()
|
||||
});
|
||||
});
|
||||
+10
-13
@@ -1195,17 +1195,14 @@ jQuery(function($){
|
||||
}
|
||||
|
||||
// Load only if the tab is visible
|
||||
onVisible("[id^=tab-domains]", () => draw_domain_table());
|
||||
onVisible("[id^=tab-mailboxes]", () => draw_mailbox_table());
|
||||
onVisible("[id^=tab-resources]", () => draw_resource_table());
|
||||
onVisible("[id^=tab-mbox-aliases]", () => draw_alias_table());
|
||||
onVisible("[id^=tab-domain-aliases]", () => draw_aliasdomain_table());
|
||||
onVisible("[id^=tab-syncjobs]", () => draw_sync_job_table());
|
||||
onVisible("[id^=tab-filters]", () => draw_filter_table());
|
||||
onVisible("[id^=tab-bcc]", () => {
|
||||
draw_bcc_table();
|
||||
draw_recipient_map_table();
|
||||
});
|
||||
onVisible("[id^=tab-tls-policy]", () => draw_tls_policy_table());
|
||||
|
||||
onVisible("[id^=collapse-tab-domains]", () => draw_domain_table());
|
||||
onVisible("[id^=collapse-tab-mailboxes]", () => draw_mailbox_table());
|
||||
onVisible("[id^=collapse-tab-resources]", () => draw_resource_table());
|
||||
onVisible("[id^=collapse-tab-mbox-aliases]", () => draw_alias_table());
|
||||
onVisible("[id^=collapse-tab-domain-aliases]", () => draw_aliasdomain_table());
|
||||
onVisible("[id^=collapse-tab-syncjobs]", () => draw_sync_job_table());
|
||||
onVisible("[id^=collapse-tab-filters]", () => draw_filter_table());
|
||||
onVisible("[id^=collapse-tab-bcc]", () => draw_bcc_table());
|
||||
onVisible("[id^=collapse-tab-bcc-filters]", () => draw_recipient_map_table());
|
||||
onVisible("[id^=collapse-tab-tls-policy]", () => draw_tls_policy_table());
|
||||
});
|
||||
@@ -538,12 +538,12 @@ jQuery(function($){
|
||||
}
|
||||
|
||||
// Load only if the tab is visible
|
||||
onVisible("[id^=SpamAliases]", () => draw_tla_table());
|
||||
onVisible("[id^=Spamfilter]", () => {
|
||||
draw_wl_policy_mailbox_table();
|
||||
onVisible("[id^=collapse-tab-SpamAliases]", () => draw_tla_table());
|
||||
onVisible("[id^=collapse-tab-Spamfilter]", () => {
|
||||
draw_bl_policy_mailbox_table();
|
||||
draw_wl_policy_mailbox_table()
|
||||
});
|
||||
onVisible("[id^=Syncjobs]", () => draw_sync_job_table());
|
||||
onVisible("[id^=AppPasswds]", () => draw_app_passwd_table());
|
||||
onVisible("[id^=collapse-tab-Syncjobs]", () => draw_sync_job_table());
|
||||
onVisible("[id^=collapse-tab-AppPasswds]", () => draw_app_passwd_table());
|
||||
last_logins('get');
|
||||
});
|
||||
Reference in new issue
Block a user