1(function ($) { 2 "use strict"; 3 4 hypertool.events = {}; 5 6 $(document).on("show.bs.dropdown", ".event-dropdown", function () { 7 updateEventList(); 8 }); 9 10 let updateEventList = function () { 11 let formData = new FormData(); 12 formData.append("data", JSON.stringify({})); 13 14 $.when( 15 hypertool.ajax("events_get_all", formData, function (response) { 16 if (response["status"] == "success") { 17 if (response["data"]["items"].length > 0) { 18 $(".event-dropdown .dropdown-menu").html( 19 response["data"]["items"] 20 ); 21 new SimpleBar( 22 $( 23 ".event-dropdown .dropdown-menu .events-dropdown-list" 24 )[0] 25 ); 26 } 27 } 28 29 if ( 30 response["status"] == "error" && 31 response["data"]["error_code"] === "invalid_auth" 32 ) { 33 $("#request-validation-error").modal("show"); 34 return; 35 } 36 37 if (response["status"] == "error") { 38 } 39 }) 40 ); 41 }; 42 43 $(document).on("visibilitychange", function () { 44 if (document.visibilityState === "visible") { 45 updateUnreadCount(); 46 } 47 }); 48 49 let checkEvents = function () { 50 let data = { 51 current_url: window.location.href, 52 }; 53 let formData = new FormData(); 54 formData.append("data", JSON.stringify(data)); 55 56 $.when( 57 hypertool.ajax("events_check", formData, function (response) { 58 if (response["status"] == "success") { 59 if (response["data"]["new_events_count"] > 0) { 60 let currentCount = parseInt( 61 $(".event-dropdown .event-indicator").text() 62 ); 63 let unreadCount = 64 currentCount + 65 parseInt(response["data"]["new_events_count"]); 66 $(".event-dropdown .event-indicator") 67 .text(unreadCount) 68 .removeClass("d-none"); 69 70 $(".toast").remove(); 71 $("body").append(response["data"]["toasts"]); 72 73 if (response["data"]["redirect_url"] !== null) { 74 window.location.href = 75 response["data"]["redirect_url"]; 76 } 77 78 $(".toast").each(function () { 79 let newToast = new bootstrap.Toast($(this)[0]); 80 newToast.show(); 81 }); 82 } else { 83 } 84 } 85 86 if ( 87 response["status"] == "error" && 88 response["data"]["error_code"] === "invalid_auth" 89 ) { 90 $("#request-validation-error").modal("show"); 91 return; 92 } 93 }) 94 ); 95 }; 96 97 let updateUnreadCount = function () { 98 let formData = new FormData(); 99 formData.append("data", JSON.stringify({})); 100 101 $.when( 102 hypertool.ajax( 103 "events_get_unread_count", 104 formData, 105 function (response) { 106 if (response["status"] == "success") { 107 $(".event-dropdown .event-indicator").text( 108 response["data"]["unread_events_count"] 109 ); 110 } 111 112 if ( 113 response["status"] == "error" && 114 response["data"]["error_code"] === "invalid_auth" 115 ) { 116 $("#request-validation-error").modal("show"); 117 return; 118 } 119 } 120 ) 121 ); 122 }; 123 124 $(document).on("click", ".event-message-indicator", function (e) { 125 e.stopPropagation(); 126 e.preventDefault(); 127 128 let $indicator = $(this); 129 let eventId = $indicator 130 .closest(".event-message") 131 .attr("data-event-id"); 132 133 $indicator.hide(); 134 135 markAsRead(eventId); 136 });
137 138 $(document).on("click", ".event-message a", function (e) { 139 e.preventDefault(); 140 let $anchor = $(this); 141 let $eventMessage = $anchor.closest(".event-message"); 142 let eventId = $eventMessage.attr("data-event-id"); 143 144 if ($eventMessage.hasClass("unread")) { 145 markAsRead(eventId); 146 147 setTimeout(function () { 148 window.location.href = $anchor.attr("href"); 149 }, 200); 150 } else { 151 window.location.href = $anchor.attr("href"); 152 } 153 }); 154 155 let markAsRead = function (eventId) { 156 let data = { 157 event_id: eventId, 158 }; 159 160 let formData = new FormData(); 161 formData.append("data", JSON.stringify(data)); 162 163 $.when( 164 hypertool.ajax("events_mark_read", formData, function (response) { 165 if (response["status"] == "success") { 166 let currentCount = parseInt( 167 $(".event-dropdown .event-indicator").text() 168 ); 169 let unreadCount = currentCount > 0 ? currentCount - 1 : 0; 170 if (unreadCount > 0) { 171 $(".event-dropdown .event-indicator").text(unreadCount); 172 } else { 173 $(".event-dropdown .event-indicator").hide(); 174 } 175 } 176 177 if ( 178 response["status"] == "error" && 179 response["data"]["error_code"] === "invalid_auth" 180 ) { 181 $("#request-validation-error").modal("show"); 182 return; 183 } 184 }) 185 ); 186 }; 187 188 $(document).on("click", ".events-mark-all-indicator", function (e) { 189 e.stopPropagation(); 190 191 let $indicator = $(this); 192 $indicator.hide(); 193 $(".events-mark-all-spinner").show(); 194 195 let data = {}; 196 197 let formData = new FormData(); 198 formData.append("data", JSON.stringify(data)); 199 200 $.when( 201 hypertool.ajax("events_mark_read", formData, function (response) { 202 if (response["status"] == "success") { 203 updateEventList(); 204 $(".event-dropdown .event-indicator").hide(); 205 } 206 207 if ( 208 response["status"] == "error" && 209 response["data"]["error_code"] === "invalid_auth" 210 ) { 211 $("#request-validation-error").modal("show"); 212 return; 213 } 214 }) 215 ); 216 }); 217})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.