queue.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. pageLength: pagination_size,
  36. dom: "<'row'<'col-sm-12 col-md-6'f><'col-sm-12 col-md-6'l>>" +
  37. "tr" +
  38. "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
  39. language: lang_datatables,
  40. ajax: {
  41. type: "GET",
  42. url: "/api/v1/get/mailq/all",
  43. dataSrc: function(data){
  44. $.each(data, function (i, item) {
  45. item.chkbox = '<input type="checkbox" data-id="mailqitems" name="multi_select" value="' + item.queue_id + '" />';
  46. rcpts = $.map(item.recipients, function(i) {
  47. return escapeHtml(i);
  48. });
  49. item.recipients = rcpts.join('<hr style="margin:1px!important">');
  50. item.action = '<div class="btn-group">' +
  51. '<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>' +
  52. '</div>';
  53. });
  54. return data;
  55. }
  56. },
  57. columns: [
  58. {
  59. // placeholder, so checkbox will not block child row toggle
  60. title: '',
  61. data: null,
  62. searchable: false,
  63. orderable: false,
  64. defaultContent: ''
  65. },
  66. {
  67. title: '',
  68. data: 'chkbox',
  69. searchable: false,
  70. orderable: false,
  71. defaultContent: ''
  72. },
  73. {
  74. title: 'QID',
  75. data: 'queue_id',
  76. defaultContent: ''
  77. },
  78. {
  79. title: 'Queue',
  80. data: 'queue_name',
  81. defaultContent: ''
  82. },
  83. {
  84. title: lang_admin.arrival_time,
  85. data: 'arrival_time',
  86. defaultContent: '',
  87. render: function (data, type){
  88. var date = new Date(data ? data * 1000 : 0);
  89. return date.toLocaleDateString(undefined, {year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit"});
  90. }
  91. },
  92. {
  93. title: lang_admin.message_size,
  94. data: 'message_size',
  95. defaultContent: '',
  96. render: function (data, type){
  97. return humanFileSize(data);
  98. }
  99. },
  100. {
  101. title: lang_admin.sender,
  102. data: 'sender',
  103. defaultContent: ''
  104. },
  105. {
  106. title: lang_admin.recipients,
  107. data: 'recipients',
  108. defaultContent: ''
  109. },
  110. {
  111. title: lang_admin.action,
  112. data: 'action',
  113. className: 'dt-sm-head-hidden dt-text-right',
  114. defaultContent: ''
  115. },
  116. ]
  117. });
  118. }
  119. draw_queue();
  120. })