PageSourceSearch

https://www.tntech.edu/_resources/2023-theme/js/rss-template-warning-bar.js

js tntech.edu collected 2026-10-01 11:37:12 UTC 8,924 bytes, 277 lines download raw bytes

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">&times;</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.