1/* WNL AJAX SCRIPT */ 2 3 4function getParameterByName(name, url) { 5 if (!url) url = window.location.href; 6 name = name.replace(/[\[\]]/g, '\\$&'); 7 var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), 8 results = regex.exec(url); 9 if (!results) return null; 10 if (!results[2]) return ''; 11 return decodeURIComponent(results[2].replace(/\+/g, ' ')); 12} 13 14 var rssJSON = document.querySelector('#rss-warning-bar').getAttribute('data-feed'); 15 16 17 18const RSS_URL = rssJSON; 19 20var logMessages = []; 21 22var container = document.getElementById('rss-warning-bar'); 23var message = document.getElementById('warningMessage'); 24 25// display warning bar 26function showWarning() { 27 container.style.display="block"; 28} 29 30// hide warning bar 31let warningDismissed = false; 32 33function warningDismiss() { 34 container.style.display="none"; 35 warningDismissed = true; 36 return warningDismissed; 37} 38 39//console.log(warningDismissed + ` warning dismissed`); 40 41//check if AJAX response is a new message or not 42 43const allEqual = arr => arr.every(val => val === arr[0]); 44 45let newMessage = false; 46let response = ""; 47 48function parseResponse (response, logMessages) { 49 var parser = new DOMParser(); 50 var results = parser.parseFromString(response, "text/html"); 51 var messageParsed = document.getElementById('warningMessage').textContent; 52 53 logMessages.push(messageParsed); 54 if ( (allEqual(logMessages)) === true) { 55 //console.log('Message is not new.'); 56 newMessage = false; 57 } else { 58 //console.log('Message is new.'); 59 newMessage = true; 60 } 61 if (logMessages.length > 5) { 62 //console.log(logMessages.length + ' too long'); 63 logMessages.shift(); 64 //console.log(logMessages); 65 } else { 66 //console.log(logMessages.length + ' not too long'); 67 } 68 return newMessage; 69} 70 71//logic to determine whether alert is expired or not 72 73let expiredMessage = false; 74 75function checkfeed() { 76 77 var warningPubDate = document.getElementById('warningPubDate').innerHTML; //get alert's pubdate 78 //console.log(warningPubDate); 79 80 function getDateTime() { 81 var now = new Date(); 82 var year = now.getFullYear(); 83 var month = now.getMonth()+1; 84 var day = now.getDate(); 85 var hour = now.getHours(); 86 var minute = now.getMinutes(); 87 var second = now.getSeconds(); 88 if(month.toString().length == 1) { 89 month = '0'+month; 90 } 91 if(day.toString().length == 1) { 92 day = '0'+day; 93 } 94 if(hour.toString().length == 1) { 95 hour = '0'+hour; 96 } 97 if(minute.toString().length == 1) { 98 minute = '0'+minute; 99 } 100 if(second.toString().length == 1) { 101 second = '0'+second; 102 } 103 var dateTime = year+'/'+month+'/'+day+' '+hour+':'+minute+':'+second; 104 return dateTime; 105 } 106 107 //console.log(getDateTime()); 108 109 var currentDate = getDateTime(); //get the current date 110 111 function dateCompare(d1, d2) { 112 113 const date1 = new Date(d1); //current date 114 const date2 = new Date(d2); //pubdate of alert 115 116 var difference = date1 - date2; 117 //console.log(difference + " difference"); //check the difference between the pubdate and today's date/time; returns milliseconds 118 119 var expiration = 30 * 60 * 1000; //length of time before alert expires; first number represents number of minutes, then converted to milliseconds 120 121 if (difference <= expiration) { 122 //console.log(`Alert is not expired.`); 123 expiredMessage = false; 124 125// if (difference >= expiration && message.textContent.match(/closed/gmi)) { 126// console.log(`Alert is expired.`); 127 // container.style.display="auto"; 128 129 } else if (difference >= expiration) { 130 //console.log(`Alert is expired.`); 131 expiredMessage = true; 132 } 133 return expiredMessage; 134 } 135 136 dateCompare(currentDate, warningPubDate); 137 138} 139 140//keyword filters to check the feed for warnings vs. all-clear messages 141 142let warningExists = false; 143 144function filterfeed() { 145 146var message = document.getElementById('warningMessage'); 147 148//ALERT TRIGGERS 149 if (message.textContent.match(/closing|closed|cancelled|canceled|shooter|explosion|fire|assault|tornado|active shooter|shooter|evacuate|barricade|defend|update|aggravated assault|assault|stay clear|death|civ
149il disturbance|explosion|fire|hazardous|hazardous spill|homicide|hostage|test/gmi)) { 150 //switch if/else to test triggers 151// if (message.textContent.match(/all clear/gmi)) { 152 //console.log("alert found"); 153 warningExists = true; 154 155//ALL-CLEAR TRIGGERS 156 } else if (message.textContent.match(/normal|all clear|resume/gmi)) { 157 //switch if/else to test triggers 158// } else if (message.textContent.match(/closed/gmi)) { 159 //console.log("all clear found"); 160 warningExists = false; 161 } 162 return warningExists; 163} 164 165//determine whether to show warning bar or not 166 167function validateDismiss() { 168 if ((warningExists === false) && (expiredMessage === true)) { 169 //console.log('All clear is expired. Warning bar hidden.'); 170 warningDismiss(); 171 //showWarning(); 172 } else if ((warningExists === false) && (expiredMessage === false) && (warningDismissed === false)) { 173 //console.log('All clear is active. Showing warning bar.'); 174 showWarning(); 175 } else if ((warningExists === false) && (expiredMessage === false) && (warningDismissed === true) && (newMessage === true)) { 176 //console.log('New message. Showing warning bar.'); 177 showWarning(); 178 } else if ((warningExists === false) && (expiredMessage === false) && (warningDismissed === true) && (newMessage === false)) { 179 //console.log('User has dismissed All Clear and there is no new message. Warning bar hidden.'); 180 warningDismiss(); 181 } else if ((warningExists === true) && (expiredMessage === false) && (warningDismissed === false)) { 182 //console.log('Warning found. Showing warning bar.'); 183 showWarning(); 184 } else if ((warningExists === true) && (expiredMessage === false) && (warningDismissed === true) && (newMessage === true)) { 185 //console.log('New message. Showing warning bar.'); 186 showWarning(); 187 } else if ((warningExists === true) && (expiredMessage === false) && (warningDismissed === true) && (newMessage === false)) { 188 //console.log('Warning dismissed and there is no new message. Warning bar hidden.'); 189 warningDismiss(); 190 } else if ((warningExists === true) && (expiredMessage === true)) { 191 // console.log('Warning is expired. Hiding warning bar.'); 192 warningDismiss(); 193 } 194} 195 196function convertGMTtoCentral(gmtString) { 197 const gmtDate = new Date(gmtString); 198 const centralTimeOptions = { 199 timeZone: 'America/Chicago', // Specify Central Time (America/Chicago) 200 weekday: 'short', // Short weekday name (e.g., Fri) 201 month: 'short', // Short month name (e.g., Feb) 202 day: '2-digit', // Two-digit day of the month 203 year: 'numeric', // Four-digit year 204 hour: '2-digit', // Two-digit hour (12-hour or 24-hour, depends on locale) 205 minute: '2-digit',// Two-digit minutes 206 second: '2-digit',// Two-digit seconds 207 hour12: true // Use 12-hour format (true) or 24-hour (false). Important! 208 }; 209 210 const centralTimeString = gmtDate.toLocaleString('en-US', centralTimeOptions); 211 212 return centralTimeString; 213} 214 215 216//AJAX fetch RSS feed contents and insert onto page 217 218function checkWarnings() { 219$.ajax(RSS_URL, { 220 accepts: { 221 xml: "application/rss+xml" 222 }, 223 224 dataType: "xml", 225 226 success: function(data) { 227 $(data) 228 .find("item") 229 .each(function() { 230 const el = $(this); 231 232 const template = ` 233 234 <div class="warningBarContent"> 235 <span class="warningIndicator"></span><span class="warningMessage" id="warningMessage">${el.find("description").text()}</span> 236 <span class="warningDate" id="warningPubDate">${el.find("pubDate").text()}</span></div> 237 <button class="warningBarButton" aria-label="Dismiss alert" type="button" onclick="warningDismiss()" > 238 <span aria-hidden="true" class="warningBarDismiss">×</span></button> 239 240 241 `; 242 243 $("#rsstester").html(template); 244 245 }) 246 247 response = data; 248 parseResponse(response, logMessages); //check if response is new 249 //console.log(newMessage + ` newMessage result`); 250 251 252 filterfeed(); //applies filter to turn warning bar on/off 253 //console.log(warningExists + ` warningExists result`); 254 checkfeed(); //checks timestamp and turns on/off 255 //console.log(expiredMessage + ` expired result`); 256 validateDismiss(); 257 258 const pubDateElement = $("#rsstester").find("#warningPubDate")[0]; 259 if (pubDateElement) { 260 const gmtTimeString = pubDateElement.textContent; 261 if (gmtTimeString) { 262 const centralTime = convertGMTtoCentral(gmtTimeString); 263 pubDateElement.textContent = centralTime; 264 //console.log(centralTime); 265 } 266 } 267 } 268})} 269 270checkWarnings(); 271 setInterval(checkWarnings,60000); 272 273 274 275 276 277
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.