queue.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. jQuery(function($){
  2. $(".refresh_table").on('click', function(e) {
  3. e.preventDefault();
  4. var table_name = $(this).data('table');
  5. $('#' + table_name).DataTable().ajax.reload();
  6. });
  7. function humanFileSize(i){if(Math.abs(i)<1024)return i+" B";var B=["KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],e=-1;do{i/=1024,++e}while(Math.abs(i)>=1024&&e<B.length-1);return i.toFixed(1)+" "+B[e]}
  8. // Queue item
  9. $('#showQueuedMsg').on('show.bs.modal', function (e) {
  10. $('#queue_msg_content').text(lang.loading);
  11. button = $(e.relatedTarget)
  12. if (button != null) {
  13. $('#queue_id').text(button.data('queue-id'));
  14. }
  15. $.ajax({
  16. type: 'GET',
  17. url: '/api/v1/get/postcat/' + button.data('queue-id'),
  18. dataType: 'text',
  19. complete: function (data) {
  20. $('#queue_msg_content').text(data.responseText);
  21. }
  22. });
  23. })
  24. function draw_queue() {
  25. // just recalc width if instance already exists
  26. if ($.fn.DataTable.isDataTable('#queuetable') ) {
  27. $('#queuetable').DataTable().columns.adjust().responsive.recalc();
  28. return;
  29. }
  30. $('#queuetable').DataTable({
  31. responsive: true,
  32. processing: true,
  33. serverSide: false,
  34. stateSave: true,
  35. dom: "<'row'<'col-sm-12 col-md-6'f><'col-sm-12 col-md-6'l>>" +
  36. "tr" +
  37. "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
  38. language: lang_datatables,
  39. ajax: {
  40. type: "GET",
  41. url: "/api/v1/get/mailq/all",
  42. dataSrc: function(data){
  43. $.each(data, function (i, item) {
  44. item.chkbox = '<input type="checkbox" data-id="mailqitems" name="multi_select" value="' + item.queue_id + '" />';
  45. rcpts = $.map(item.recipients, function(i) {
  46. return escapeHtml(i);
  47. });
  48. item.recipients = rcpts.join('<hr style="margin:1px!important">');
  49. item.action = '<div class="btn-group">' +
  50. '<a href="#" data-bs-toggle="modal" data-bs-target="#showQueuedMsg" data-queue-id="' + encodeURI(item.queue_id) + '" class="btn btn-xs btn-secondary">' + lang.show_message + '</a>' +
  51. '</div>';
  52. });
  53. return data;
  54. }
  55. },
  56. columns: [
  57. {
  58. // placeholder, so checkbox will not block child row toggle
  59. title: '',
  60. data: null,
  61. searchable: false,
  62. orderable: false,
  63. defaultContent: ''
  64. },
  65. {
  66. title: '',
  67. data: 'chkbox',
  68. searchable: false,
  69. orderable: false,
  70. defaultContent: ''
  71. },
  72. {
  73. title: 'QID',
  74. data: 'queue_id',
  75. defaultContent: ''
  76. },
  77. {
  78. title: 'Queue',
  79. data: 'queue_name',
  80. defaultContent: ''
  81. },
  82. {
  83. title: lang_admin.arrival_time,
  84. data: 'arrival_time',
  85. defaultContent: '',
  86. render: function (data, type){
  87. var date = new Date(data ? data * 1000 : 0);
  88. return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});
  89. }
  90. },
  91. {
  92. title: lang_admin.message_size,
  93. data: 'message_size',
  94. defaultContent: '',
  95. render: function (data, type){
  96. return humanFileSize(data);
  97. }
  98. },
  99. {
  100. title: lang_admin.sender,
  101. data: 'sender',
  102. defaultContent: ''
  103. },
  104. {
  105. title: lang_admin.recipients,
  106. data: 'recipients',
  107. defaultContent: ''
  108. },
  109. {
  110. title: lang_admin.action,
  111. data: 'action',
  112. className: 'text-md-end dt-sm-head-hidden dt-body-right',
  113. defaultContent: ''
  114. },
  115. ]
  116. });
  117. }
  118. draw_queue();
  119. })