ajaxgetdropmenu.ui.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. window.markRead = function(obj)
  2. {
  3. let $this = $(obj);
  4. if(!$this.hasClass('message-item')) $this = $this.closest('.message-item');
  5. let isUnread = $this.hasClass('unread');
  6. if(!isUnread) return;
  7. let messageID = $this.data("msgid");
  8. let $messageItem = $('#messageTabs .message-item.unread[data-msgid="' + messageID + '"]');
  9. $messageItem.find('.label-dot.danger').removeClass('danger').addClass('gray');
  10. $messageItem.removeClass('unread');
  11. $messageItem.attr('data-target', '#readContextMenu');
  12. $.get($.createLink('message', 'ajaxMarkRead', "id=" + messageID));
  13. /* Rerender unread count. */
  14. $('#messageTabs #unread-messages.tab-pane').find('.message-item[data-msgid="' + messageID + '"]').addClass('hidden');
  15. renderMessage();
  16. };
  17. window.markUnread = function(obj)
  18. {
  19. let $this = $(obj);
  20. if(!$this.hasClass('message-item')) $this = $this.closest('.message-item');
  21. let isUnread = $this.hasClass('unread');
  22. if(isUnread) return;
  23. let messageID = $this.data("msgid");
  24. let $messageItem = $('#messageTabs .message-item[data-msgid="' + messageID + '"]');
  25. $messageItem.find('.label-dot.gray').removeClass('gray').addClass('danger');
  26. $messageItem.addClass('unread');
  27. $.get($.createLink('message', 'ajaxMarkUnread', "id=" + messageID));
  28. /* Rerender unread count. */
  29. fetchMessage(true, $.createLink('message', 'ajaxGetDropmenu', 'active=all'));
  30. renderMessage();
  31. };
  32. window.markAllRead = function()
  33. {
  34. let $messageItem = $('#messageTabs .message-item.unread');
  35. $messageItem.find('.label-dot.danger').removeClass('danger').addClass('gray');
  36. $messageItem.removeClass('unread');
  37. $('#messageTabs #unread-messages.tab-pane .message-item').addClass('hidden');
  38. $.get($.createLink('message', 'ajaxMarkRead', "id=all"));
  39. renderMessage();
  40. };
  41. window.clearRead = function()
  42. {
  43. let $messageItem = $('#messageTabs .message-item:not(.unread)');
  44. $messageItem.addClass('hidden');
  45. $.get($.createLink('message', 'ajaxDelete', "id=allread"));
  46. renderMessage();
  47. };
  48. window.deleteMessage = function(obj)
  49. {
  50. let $this = $(obj);
  51. if(!$this.hasClass('message-item')) $this = $this.closest('.message-item');
  52. let messageID = $this.data("msgid");
  53. let $messageItem = $('#messageTabs .message-item[data-msgid="' + messageID + '"]');
  54. $messageItem.removeClass('unread');
  55. $messageItem.addClass('hidden');
  56. $.get($.createLink('message', 'ajaxDelete', "id=" + messageID));
  57. /* Rerender unread count. */
  58. renderMessage();
  59. };
  60. window.clickMessage = function(obj, event)
  61. {
  62. // Prevent default link behavior to avoid double navigation
  63. if(event)
  64. {
  65. event.preventDefault();
  66. event.stopPropagation();
  67. }
  68. let $obj = $(obj);
  69. let url = $obj.attr('data-url').replace(/\?onlybody=yes/g, '').replace(/\&onlybody=yes/g, '');
  70. markRead(obj);
  71. $('#header #messageBar').trigger('click');
  72. $.apps.openApp(url);
  73. renderMessage();
  74. };
  75. window.renderMessage = function()
  76. {
  77. let $unreadTab = $('#messageTabs #unread-messages.tab-pane');
  78. let unreadCount = $unreadTab.find('.message-item.unread').length;
  79. if(typeof(unreadLangTempate) != 'undefined') $('[href="#unread-messages"] span').html(unreadLangTempate.replace(/%s/, unreadCount));
  80. if(unreadCount == 0)
  81. {
  82. $unreadTab.find('ul').addClass('hidden');
  83. if($unreadTab.find('.nodata').length == 0) $unreadTab.append(noDataHtml);
  84. }
  85. let $allTab = $('#messageTabs #all-messages.tab-pane');
  86. let allCount = $allTab.find('.message-item:not(.hidden)').length;
  87. if(allCount == 0)
  88. {
  89. $allTab.find('ul').addClass('hidden');
  90. if($allTab.find('.nodata').length == 0) $allTab.append(noDataHtml);
  91. }
  92. $('#messageTabs .message-date').each(function()
  93. {
  94. if($(this).find('.message-item:not(.hidden)').length == 0) $(this).addClass('hidden');
  95. });
  96. updateAllDot(showCount);
  97. };
  98. window.hideContextMenu = function()
  99. {
  100. if(thisContextmenu != null) thisContextmenu.hide();
  101. thisContextmenu = null;
  102. contextmenuEle = null;
  103. };
  104. window.clickContextMenu = function(item)
  105. {
  106. let action = item.value;
  107. let $this = contextmenuEle;
  108. if(action == 'delete') deleteMessage($this);
  109. if(action == 'markunread') markUnread($this);
  110. };
  111. let thisContextmenu = null;
  112. let contextmenuEle = null;
  113. $(function()
  114. {
  115. updateAllDot(showCount);
  116. /* Bind contextmenu for message dropdown. */
  117. $(document).on('contextmenu', '*', function(event)
  118. {
  119. hideContextMenu();
  120. let $this = $(this);
  121. if($this.hasClass('message-item') || $this.closest('.message-item').length)
  122. {
  123. event.preventDefault();
  124. event.stopPropagation();
  125. if(!$this.hasClass('message-item')) $this = $this.closest('.message-item');
  126. thisContextmenu = zui.ContextMenu.show(
  127. {
  128. triggerEvent: event,
  129. items: $this.hasClass('unread') ? unreadContextMenu : readContextMenu,
  130. menu: { onClickItem: (info) => { clickContextMenu(info.item); }}
  131. });
  132. contextmenuEle = $this;
  133. return;
  134. }
  135. });
  136. /* Hidden dropdown and contextmenu. */
  137. $('#dropdownMessageMenu').on('click', function(event)
  138. {
  139. hideContextMenu();
  140. if($(event.target).closest('.messageSettingBox').length == 0 && $('#messageSettingDropdown-toggle').hasClass('open')) closeSettingDropdown();
  141. });
  142. $('#dropdownMessageMenu').on('scroll', function(event){hideContextMenu();});
  143. /* Adjust dropdown height when resize. */
  144. $(window).on('resize', function(event)
  145. {
  146. let maxHeight = $(window).height() - $('#header').height() - 5;
  147. $("#dropdownMessageMenu").css('height', maxHeight).css('max-height', maxHeight)
  148. });
  149. });