11871187 }
11881188 }
11891189
1190- function sanitize ( string ) {
1191- var temp = document . createElement ( 'div' ) ;
1192- temp . textContent = string ;
1193- return temp . innerHTML ;
1194- }
1190+ function sanitize ( string ) {
1191+ var temp = document . createElement ( 'div' ) ;
1192+ temp . textContent = string ;
1193+ return temp . innerHTML ;
1194+ }
1195+
1196+ function decodeHTML ( value ) {
1197+ if ( value === null || value === undefined ) {
1198+ return "" ;
1199+ }
1200+ var temp = document . createElement ( "textarea" ) ;
1201+ temp . innerHTML = value ;
1202+ return temp . value ;
1203+ }
1204+
1205+ function replaceURLs ( message ) {
1206+ if ( message === undefined || message === null ) {
1207+ return "" ;
1208+ }
1209+ var original = decodeHTML ( String ( message ) ) ;
1210+ var urlRegex = / ( ( ( h t t p s ? : \/ \/ ) | ( w w w \. ) ) [ ^ \s ] + ) / g;
1211+ var result = "" ;
1212+ var lastIndex = 0 ;
1213+ var match ;
1214+ while ( ( match = urlRegex . exec ( original ) ) !== null ) {
1215+ result += sanitize ( original . slice ( lastIndex , match . index ) ) ;
1216+ var url = match [ 0 ] ;
1217+ var trailing = "" ;
1218+ while ( / [ . , ; ! : \* \? ) ] $ / . test ( url ) ) {
1219+ trailing = url . slice ( - 1 ) + trailing ;
1220+ url = url . slice ( 0 , - 1 ) ;
1221+ }
1222+ if ( url ) {
1223+ var hyperlink = url ;
1224+ if ( ! / ^ h t t p s ? : \/ \/ / i. test ( hyperlink ) ) {
1225+ hyperlink = "http://" + hyperlink ;
1226+ }
1227+ var display = url . length > 35 ? url . substring ( 0 , 35 ) + "..." : url ;
1228+ result += '<a href="' + sanitize ( hyperlink ) + '" title="Click to open the link in a new tab" target="_blank" rel="noopener noreferrer">' + sanitize ( display ) + "</a>" ;
1229+ } else {
1230+ result += sanitize ( match [ 0 ] ) ;
1231+ }
1232+ if ( trailing ) {
1233+ result += sanitize ( trailing ) ;
1234+ }
1235+ lastIndex = match . index + match [ 0 ] . length ;
1236+ }
1237+ if ( lastIndex < original . length ) {
1238+ result += sanitize ( original . slice ( lastIndex ) ) ;
1239+ }
1240+ return result ;
1241+ }
11951242
11961243 function EnterButtonChat ( event ) {
11971244 // Number 13 is the "Enter" key on the keyboard
12471294 return "Seconds ago" ;
12481295 }
12491296
1250- function updateMessages ( message = false ) {
1251- if ( message ) {
1252- var time = timeSince ( message . time ) ;
1253- var msg = document . createElement ( "div" ) ;
1254- ////// KEEP THIS IN /////////
1255- console . log ( message . msg ) ; // Display Recieved messages for View-Only clients.
1256- /////////////////////////////
1257- var label = "" ;
1258- if ( message . label ) {
1259- label = message . label ;
1260- }
1261-
1262- if ( message . type == "sent" ) {
1263- msg . innerHTML = "<span class='chat_message chat_sent'>" + message . msg + " </span><i><small> <small>- " + time + "</small></small></i><span style='display:none'>" + label + "</span>" ;
1264- msg . classList . add ( "outMessage" ) ;
1265- } else if ( message . type == "recv" ) {
1266- msg . innerHTML = label + "<span class='chat_message chat_recv'>" + message . msg + " </span><i><small> <small>- " + time + "</small></small></i>" ;
1267- msg . classList . add ( "inMessage" ) ;
1268- } else if ( message . type == "action" ) {
1269- msg . innerHTML = label + "<span class='chat_message chat_action'>" + message . msg + " </span><i><small> <small>- " + time + "</small></small></i>" ;
1270- msg . classList . add ( "actionMessage" ) ;
1271- } else if ( message . type == "alert" ) {
1272- msg . innerHTML = "<span class='chat_message chat_alert'>" + message . msg + " </span><i><small> <small>- " + time + "</small></small></i>" ;
1273- msg . classList . add ( "inMessage" ) ;
1274- } else {
1275- msg . innerHTML = "<span class='chat_message chat_other'>" + message . msg + " </span><i><small> <small>- " + time + "</small></small></i>" ;
1276- msg . classList . add ( "inMessage" ) ;
1277- }
1278- document . getElementById ( "chatBody" ) . appendChild ( msg ) ;
1279- } else {
1280- document . getElementById ( "chatBody" ) . innerHTML = "" ;
1297+ function updateMessages ( message = false ) {
1298+ if ( message ) {
1299+ var time = timeSince ( message . time ) ;
1300+ var msg = document . createElement ( "div" ) ;
1301+ ////// KEEP THIS IN /////////
1302+ console . log ( message . msg ) ; // Display Recieved messages for View-Only clients.
1303+ /////////////////////////////
1304+ var label = "" ;
1305+ if ( message . label ) {
1306+ label = sanitize ( decodeHTML ( message . label ) ) ;
1307+ }
1308+ var labelPrefix = label ? label + " " : "" ;
1309+ var safeMessage = replaceURLs ( message . msg ) ;
1310+ var safeTime = sanitize ( time ) ;
1311+
1312+ if ( message . type == "sent" ) {
1313+ msg . innerHTML = "<span class='chat_message chat_sent'>" + safeMessage + " </span><i><small> <small>- " + safeTime + "</small></small></i><span style='display:none'>" + label + "</span>" ;
1314+ msg . classList . add ( "outMessage" ) ;
1315+ } else if ( message . type == "recv" ) {
1316+ msg . innerHTML = labelPrefix + "<span class='chat_message chat_recv'>" + safeMessage + " </span><i><small> <small>- " + safeTime + "</small></small></i>" ;
1317+ msg . classList . add ( "inMessage" ) ;
1318+ } else if ( message . type == "action" ) {
1319+ msg . innerHTML = labelPrefix + "<span class='chat_message chat_action'>" + safeMessage + " </span><i><small> <small>- " + safeTime + "</small></small></i>" ;
1320+ msg . classList . add ( "actionMessage" ) ;
1321+ } else if ( message . type == "alert" ) {
1322+ msg . innerHTML = "<span class='chat_message chat_alert'>" + safeMessage + " </span><i><small> <small>- " + safeTime + "</small></small></i>" ;
1323+ msg . classList . add ( "inMessage" ) ;
1324+ } else {
1325+ msg . innerHTML = "<span class='chat_message chat_other'>" + safeMessage + " </span><i><small> <small>- " + safeTime + "</small></small></i>" ;
1326+ msg . classList . add ( "inMessage" ) ;
1327+ }
1328+ document . getElementById ( "chatBody" ) . appendChild ( msg ) ;
1329+ } else {
1330+ document . getElementById ( "chatBody" ) . innerHTML = "" ;
12811331 for ( i in messageList ) {
12821332 var time = timeSince ( messageList [ i ] . time ) ;
12831333 var msg = document . createElement ( "div" ) ;
12841334 ////// KEEP THIS IN /////////
1285- console . log ( messageList [ i ] . msg ) ; // Display Recieved messages for View-Only clients.
1286- /////////////////////////////
1287- var label = "" ;
1288- if ( messageList [ i ] . label ) {
1289- label = messageList [ i ] . label ;
1290- }
1291-
1292- if ( messageList [ i ] . type == "sent" ) {
1293- msg . innerHTML = "<span class='chat_message chat_sent'>" + messageList [ i ] . msg + " </span><i><small> <small>- " + time + "</small></small></i><span style='display:none'>" + label + "</span>" ;
1294- msg . classList . add ( "outMessage" ) ;
1295- } else if ( messageList [ i ] . type == "recv" ) {
1296- msg . innerHTML = label + "<span class='chat_message chat_recv'>" + messageList [ i ] . msg + " </span><i><small> <small>- " + time + "</small></small></i>" ;
1297- msg . classList . add ( "inMessage" ) ;
1298- } else if ( messageList [ i ] . type == "action" ) {
1299- msg . innerHTML = label + "<span class='chat_message chat_action'>" + messageList [ i ] . msg + " </span><i><small> <small>- " + time + "</small></small></i>" ;
1300- msg . classList . add ( "actionMessage" ) ;
1301- } else if ( messageList [ i ] . type == "alert" ) {
1302- msg . innerHTML = "<span class='chat_message chat_alert'>" + messageList [ i ] . msg + " </span><i><small> <small>- " + time + "</small></small></i>" ;
1303- msg . classList . add ( "inMessage" ) ;
1304- } else {
1305- msg . innerHTML = "<span class='chat_message chat_other'>" + messageList [ i ] . msg + " </span><i><small> <small>- " + time + "</small></small></i>" ;
1306- msg . classList . add ( "inMessage" ) ;
1307- }
1308-
1309- document . getElementById ( "chatBody" ) . appendChild ( msg ) ;
1310- }
1335+ console . log ( messageList [ i ] . msg ) ; // Display Recieved messages for View-Only clients.
1336+ /////////////////////////////
1337+ var label = "" ;
1338+ if ( messageList [ i ] . label ) {
1339+ label = sanitize ( decodeHTML ( messageList [ i ] . label ) ) ;
1340+ }
1341+
1342+ var messageContent = replaceURLs ( messageList [ i ] . msg ) ;
1343+ var labelPrefix = label ? label + " " : "" ;
1344+ var safeTime = sanitize ( time ) ;
1345+
1346+ if ( messageList [ i ] . type == "sent" ) {
1347+ msg . innerHTML = "<span class='chat_message chat_sent'>" + messageContent + " </span><i><small> <small>- " + safeTime + "</small></small></i><span style='display:none'>" + label + "</span>" ;
1348+ msg . classList . add ( "outMessage" ) ;
1349+ } else if ( messageList [ i ] . type == "recv" ) {
1350+ msg . innerHTML = labelPrefix + "<span class='chat_message chat_recv'>" + messageContent + " </span><i><small> <small>- " + safeTime + "</small></small></i>" ;
1351+ msg . classList . add ( "inMessage" ) ;
1352+ } else if ( messageList [ i ] . type == "action" ) {
1353+ msg . innerHTML = labelPrefix + "<span class='chat_message chat_action'>" + messageContent + " </span><i><small> <small>- " + safeTime + "</small></small></i>" ;
1354+ msg . classList . add ( "actionMessage" ) ;
1355+ } else if ( messageList [ i ] . type == "alert" ) {
1356+ msg . innerHTML = "<span class='chat_message chat_alert'>" + messageContent + " </span><i><small> <small>- " + safeTime + "</small></small></i>" ;
1357+ msg . classList . add ( "inMessage" ) ;
1358+ } else {
1359+ msg . innerHTML = "<span class='chat_message chat_other'>" + messageContent + " </span><i><small> <small>- " + safeTime + "</small></small></i>" ;
1360+ msg . classList . add ( "inMessage" ) ;
1361+ }
1362+
1363+ document . getElementById ( "chatBody" ) . appendChild ( msg ) ;
1364+ }
13111365 }
13121366 //if (chatUpdateTimeout){
13131367 // clearInterval(chatUpdateTimeout);
23602414 }
23612415</ script >
23622416</ body >
2363- </ html >
2417+ </ html >
0 commit comments