diff --git a/web/root/ecWeb/lib/forumLib.ssjs b/web/root/ecWeb/lib/forumLib.ssjs index b53f6ce9bc612fce149f734d84a124e9b5a7013b..cfd47631bddd2b4f6d1447f83ca1a2732e234b9e 100644 --- a/web/root/ecWeb/lib/forumLib.ssjs +++ b/web/root/ecWeb/lib/forumLib.ssjs @@ -44,6 +44,10 @@ function linkify(body) { return(body); } +function clean_subject(subject) { + return html_encode(subject, true, true, false, false); +} + function webify(body) { var ret=''; @@ -151,7 +155,7 @@ function webify(body) { body=linkify(body); body=body.replace(/\r\n$/,''); - body=body.replace(/(\r?\n)/g, "<br />"); + body=body.replace(/(\r?\n)/g, "<br>"); body=body.replace(/'/g,'’'); return body; } @@ -161,10 +165,10 @@ function printBoards() { for(mg in msg_area.grp_list) { print("<div class='standardBorder standardPadding underMargin subBoardHeaderColor'>"); - print("<div class='headingFont'><a class=ulLink href='javascript:toggleVisibility(\"grp" + msg_area.grp_list[mg].number + "\")'>" + msg_area.grp_list[mg].name + "</a></div>"); + print("<div class='headingFont'><a class=ulLink href='javascript:toggleVisibility(\"grp" + msg_area.grp_list[mg].number + "\")'>" + clean_subject(msg_area.grp_list[mg].name) + "</a></div>"); print("<div id=stats" + msg_area.grp_list[mg].number + "></div>"); print("</div>"); - print("<div id=grp" + msg_area.grp_list[mg].number + " style=display:none;>"); + print("<div id=grp" + msg_area.grp_list[mg].number + " style=display:none>"); var a = 0; var b = 0; for(sb in msg_area.grp_list[mg].sub_list) { @@ -173,18 +177,18 @@ function printBoards() { msgBase.open(); b = b + msgBase.total_msgs; print("<div class='standardBorder standardPadding underMargin treeIndent messageBoxColor'>"); - print("<a class=ulLink href=./pages.ssjs?page=" + webIni.forumPage + "&action=viewSubBoard&subBoard=" + msg_area.grp_list[mg].sub_list[sb].code + ">" + msg_area.grp_list[mg].sub_list[sb].name + "</a><br />"); + print('<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + "&action=viewSubBoard&subBoard=" + clean_subject(msg_area.grp_list[mg].sub_list[sb].code) + '">' + clean_subject(msg_area.grp_list[mg].sub_list[sb].name) + "</a><br>"); print(msgBase.total_msgs + " messages"); if(msgBase.last_msg > 0) { var header = msgBase.get_msg_header(msgBase.last_msg); if(!header) continue; - print("<br />Latest: " + header.subject + ", by: " + header.from + " on " + system.timestr(header.when_written_time)); + print("<br>Latest: " + clean_subject(header.subject) + ", by: " + clean_subject(header.from) + " on " + system.timestr(header.when_written_time)); } print("</div>"); msgBase.close(); } print("</div>"); - print("<script language=javascript type=text/javascript>document.getElementById('stats" + msg_area.grp_list[mg].number + "').innerHTML = '" + msg_area.grp_list[mg].description + "<br />" + b + " messages in " + a + " sub-boards';</script>"); + print("<script type='text/javascript'>document.getElementById('stats" + msg_area.grp_list[mg].number + "').innerHTML = '" + clean_subject(msg_area.grp_list[mg].description) + "<br>" + b + " messages in " + a + " sub-boards';</script>"); } } @@ -201,7 +205,7 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) var msgBase = new MsgBase(subBoardCode); if(!msgBase.open() || msgBase.last_msg < 1) { - if(!newOnly) print("<br />There are no messages to show in this sub-board."); + if(!newOnly) print("<br>There are no messages to show in this sub-board."); return; } var msgBase_last_msg=msgBase.last_msg; @@ -212,7 +216,7 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) } if(subBoardCode != 'mail' && !user.compare_ars(msgBase.cfg.ars)) return; // 'mail' does not have a .cfg. var header, body, msg, mm = msgBase.first_msg, reply = '', messageThreads = new Object(), threadedMessages = new Object(); - print('<div id=' + subBoardCode + '-headerBox class="subBoardHeaderColor standardBorder standardMargin standardPadding headingFont">'); + print('<div id=' + clean_subject(subBoardCode) + '-headerBox class="subBoardHeaderColor standardBorder standardMargin standardPadding headingFont">'); if(subBoardCode == 'mail') { print('Private Mail'); @@ -223,38 +227,38 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) print('</div>'); if(newOnly) { - print('<script language=javascript type=text/javascript>'); + print('<script type="text/javascript">'); print('document.getElementById("' + subBoardCode + '-headerBox").onclick = function() { toggleVisibility("subBoardContainer-' + subBoardCode + '"); updatePointer("' + subBoardCode + '", "' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs", "' + mg + '", "' + sb + '"); };'); print('</script>'); - print('<div id=subBoardContainer-' + subBoardCode + ' style=display:none;>'); + print('<div id=subBoardContainer-' + clean_subject(subBoardCode) + ' style=display:none>'); } if(subBoardCode == 'mail' || user.compare_ars(msgBase.cfg.post_ars)) { print('<div class="messageBoxColor standardBorder standardMargin standardPadding treeIndent">'); if(webIni.maxMessages > 0 && !http_request.query.hasOwnProperty('showAll')) { - print('Recent messages (<a class=ulLink href=' + eval(webIni.webUrl) + 'pages.ssjs?page=' + webIni.forumPage +'&action=viewSubBoard&subBoard=' + subBoardCode + '&showAll=true>Show all</a>)'); + print('Recent messages (<a class=ulLink href=' + eval(webIni.webUrl) + 'pages.ssjs?page=' + webIni.forumPage +'&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&showAll=true>Show all</a>)'); } else { print('All messages'); webIni.maxMessages = 0; } - print(' - <a class=ulLink onclick=toggleVisibility(\'newMessage-' + subBoardCode + '\')>Post a new message</a><br />'); - print('<div style=display:none; id=newMessage-' + subBoardCode + '>'); - print('<br /><form id=newMessageForm-' + subBoardCode + ' action=none method=post>'); - print('To:<br /><input type=text name=to size=50 value="All" onkeypress=noReturn(event) /><br /><br />'); - print('From:<br /><select name=from><option value="' + user.alias + '">' + user.alias + '</option><option value="' + user.name + '">' + user.name + '</option></select><br /><br />'); - print('Subject:<br /><input type=text size=50 name=subject onkeypress=noReturn(event) /><br /><br />'); - print('<textarea class="standardBorder" name=body cols=80 rows=20>' + sig + '</textarea><br />'); - print('<input type=button value=Submit onclick=submitForm("newMessageForm-' + subBoardCode + '","' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs","newMessageForm-' + subBoardCode + '") />'); - print('<input type=hidden name=subBoard value=' + subBoardCode + ' />'); - print('<input type=hidden name=irtMessage value=none />'); + print(' - <a class=ulLink onclick=toggleVisibility(\'newMessage-' + clean_subject(subBoardCode) + '\')>Post a new message</a><br>'); + print('<div style=display:none; id=newMessage-' + clean_subject(subBoardCode) + '>'); + print('<br><form id=newMessageForm-' + clean_subject(subBoardCode) + ' action=none method=post>'); + print('To:<br><input type=text name=to size=50 value="All" onkeypress=noReturn(event)><br><br>'); + print('From:<br><select name=from><option value="' + user.alias + '">' + user.alias + '</option><option value="' + user.name + '">' + user.name + '</option></select><br><br>'); + print('Subject:<br><input type=text size=50 name=subject onkeypress=noReturn(event)><br><br>'); + print('<textarea class="standardBorder" name=body cols=80 rows=20>' + sig + '</textarea><br>'); + print('<input type=button value=Submit onclick=submitForm("newMessageForm-' + clean_subject(subBoardCode) + '","' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs","newMessageForm-' + clean_subject(subBoardCode) + '")>'); + print('<input type=hidden name=subBoard value=' + clean_subject(subBoardCode) + '>'); + print('<input type=hidden name=irtMessage value=none>'); print('</form></div></div>'); } if(webIni.maxMessages > 0 && (msgBase_last_msg - webIni.maxMessages) > 0) mm = msgBase_last_msg - webIni.maxMessages; - print('<script language=javascript type=text/javascript>'); + print('<script type="text/javascript">'); print('function toggle_quote(container) {'); print(' for(child in container.childNodes) {'); print(' if(container.childNodes[child].nodeName=="BLOCKQUOTE") {'); @@ -306,29 +310,29 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) /* Set 'msg' to contain a formatted version of the current message 'm' which will later be appended to the appropriate thread (or used to create a new one.) */ - msg = '<a name=' + header.number + '></a>'; - msg += '<div id=' + subBoardCode + header.number + ' class="messageBoxColor standardBorder standardPadding underMargin subTreeIndent messageFont">'; - msg += 'From <b>' + header.from + '</b> to <b>' + header.to + '</b> on <b>' + system.timestr(header.when_written_time) + '</b>'; - msg += '<br /><br />' + webify(body) + '<br />'; + msg = '<a name=' + header.number + '><\\/a>'; + msg += '<div id=' + clean_subject(subBoardCode) + header.number + ' class="messageBoxColor standardBorder standardPadding underMargin subTreeIndent messageFont">'; + msg += 'From <b>' + header.from + '<\\/b> to <b>' + header.to + '<\\/b> on <b>' + system.timestr(header.when_written_time) + '<\\/b>'; + msg += '<br><br>' + webify(body).replace(/<\//g,'<\\\/') + '<br>'; if(subBoardCode == 'mail' || canPost) { - msg += '<a class=ulLink onclick=toggleVisibility("' + subBoardCode + '-reply-' + header.number + '")>Reply</a> - '; + msg += '<a class=ulLink onclick=toggleVisibility("' + clean_subject(subBoardCode) + '-reply-' + header.number + '")>Reply<\\/a> - '; /* Set 'reply' to contain a (non-submittable) reply form, which will be appended to 'msg' (above) further along. The submit button of this form is just a regular button that triggers the submitForm() function from lib/clientLib.js which sends the form data to the server via an XMLHttpRequest(). This way we don't have to migrate away from the page (bad.) */ - reply = '<div style=display:none;margin-top:10px; id=' + subBoardCode + '-reply-' + header.number + '>'; - reply += '<form id=' + subBoardCode + '-replyForm-' + header.number + ' action=none method=post>'; - reply += 'To:<br /><input type=text name=to size=50 value="' + header.from + '" onkeypress=noReturn(event) /><br /><br />'; - reply += 'From:<br /><select name=from><option value="' + user.alias + '">' + user.alias + '</option><option value="' + user.name + '">' + user.name + '</option></select><br /><br />'; - reply += '<textarea class="standardBorder" name=body cols=80 rows=20>' + quote_msg(body, line_length=79, prefix="> ").replace(/\n|\r\n/g, " ").replace(/'/g, '’') + ' ' + sig + '</textarea><br />'; - reply += '<input type=button value=Submit onclick=submitForm("' + subBoardCode + '-replyForm-' + header.number + '","' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs","' + subBoardCode + '-reply-' + header.number + '") />'; - reply += '<input type=hidden name=subject value="' + header.subject + '" />'; - reply += '<input type=hidden name=subBoard value=' + subBoardCode + ' />'; - reply += '<input type=hidden name=irtMessage value=' + header.number + ' />'; - reply += '</form><br /></div>'; + reply = '<div style=display:none;margin-top:10px; id=' + clean_subject(subBoardCode) + '-reply-' + header.number + '>'; + reply += '<form id=' + clean_subject(subBoardCode) + '-replyForm-' + header.number + ' action=none method=post>'; + reply += 'To:<br><input type=text name=to size=50 value="' + header.from + '" onkeypress=noReturn(event)><br><br>'; + reply += 'From:<br><select name=from><option value="' + user.alias + '">' + user.alias + '</option><option value="' + user.name + '">' + user.name + '</option></select><br><br>'; + reply += '<textarea class="standardBorder" name=body cols=80 rows=20>' + quote_msg(body, line_length=79, prefix="> ").replace(/\n|\r\n/g, " ").replace(/'/g, '’') + ' ' + sig + '</textarea><br>'; + reply += '<input type=button value=Submit onclick=submitForm("' + clean_subject(subBoardCode) + '-replyForm-' + header.number + '","' + eval(webIni.webUrl) + 'lib/forumAsync.ssjs","' + clean_subject(subBoardCode) + '-reply-' + header.number + '")>'; + reply += '<input type=hidden name=subject value="' + clean_subject(header.subject) + '">'; + reply += '<input type=hidden name=subBoard value=' + clean_subject(subBoardCode) + '>'; + reply += '<input type=hidden name=irtMessage value=' + header.number + '>'; + reply += '</form><br></div>'; } if(header.thread_back > 0 && threadedMessages.hasOwnProperty(header.thread_back) && messageThreads.hasOwnProperty(threadedMessages[header.thread_back])) { @@ -338,10 +342,10 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) messageThreads[threadedMessages[header.thread_back]]['replies']++; messageThreads[threadedMessages[header.thread_back]]['latestAuthor'] = header.from; messageThreads[threadedMessages[header.thread_back]]['latestNumber'] = header.number; - msg += '<a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[threadedMessages[header.thread_back]]["threadID"] + '>Thread URL</a>'; - msg += ' - <a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[threadedMessages[header.thread_back]]["threadID"] + '#' + header.number + '>Message URL</a>'; - msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[threadedMessages[header.thread_back]]["number"]+ '")>Collapse Thread</a><br />' + reply + '</div>'; - print("<script language=javascript type=text/javascript>"); + msg += '<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&thread=' + messageThreads[threadedMessages[header.thread_back]]["threadID"] + '">Thread URL<\\/a>'; + msg += ' - <a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&thread=' + messageThreads[threadedMessages[header.thread_back]]["threadID"] + '#' + header.number + '">Message URL<\\/a>'; + msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[threadedMessages[header.thread_back]]["number"]+ '")>Collapse Thread<\\/a><br>' + reply + '<\\/div>'; + print("<script type='text/javascript'>"); print("threadContainer" + messageThreads[threadedMessages[header.thread_back]]['number'] + ".innerHTML += '" + msg + "';"); print("</script>"); } else if(header.thread_next > 0 && threadedMessages.hasOwnProperty(header.thread_next) && messageThreads.hasOwnProperty(threadedMessages[header.thread_next])) { @@ -351,10 +355,10 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) messageThreads[threadedMessages[header.thread_next]]['replies']++; messageThreads[threadedMessages[header.thread_next]]['latestAuthor'] = header.from; messageThreads[threadedMessages[header.thread_next]]['latestNumber'] = header.number; - msg += '<a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[threadedMessages[header.thread_next]]["threadID"] + '>Thread URL</a>'; - msg += ' - <a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[threadedMessages[header.thread_next]]["threadID"] + '#' + header.number + '>Message URL</a>'; - msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[threadedMessages[header.thread_next]]["number"]+ '")>Collapse Thread</a>' + reply + '</div>'; - print("<script language=javascript type=text/javascript>"); + msg += '<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&thread=' + messageThreads[threadedMessages[header.thread_next]]["threadID"] + '">Thread URL<\\/a>'; + msg += ' - <a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&thread=' + messageThreads[threadedMessages[header.thread_next]]["threadID"] + '#' + header.number + '">Message URL<\\/a>'; + msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[threadedMessages[header.thread_next]]["number"]+ '")>Collapse Thread<\\/a>' + reply + '<\\/div>'; + print("<script type='text/javascript'>"); print("threadContainer" + messageThreads[threadedMessages[header.thread_next]]['number'] + ".innerHTML += '" + msg + "';"); print("</script>"); } else { @@ -368,10 +372,10 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) messageThreads[t]['replies']++; messageThreads[t]['latestAuthor'] = header.from; messageThreads[t]['latestNumber'] = header.number; - msg += '<a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[t]["threadID"] + '>Thread URL</a>'; - msg += ' - <a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + messageThreads[t]["threadID"] + '#' + header.number + '>Message URL</a>'; - msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[t]["number"]+ '")>Collapse Thread</a>' + reply + '</div>'; - print("<script language=javascript type=text/javascript>"); + msg += '<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&thread=' + messageThreads[t]["threadID"] + '">Thread URL<\\/a>'; + msg += ' - <a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&thread=' + messageThreads[t]["threadID"] + '#' + header.number + '">Message URL<\\/a>'; + msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + messageThreads[t]["number"]+ '")>Collapse Thread<\\/a>' + reply + '<\\/div>'; + print("<script type='text/javascript'>"); print("threadContainer" + messageThreads[t]['number'] + ".innerHTML += '" + msg + "';"); print("</script>"); break; // Need not waste time on any more message threads if a match was found. @@ -385,10 +389,10 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) // This message is not associated with any existing threads based on the above criteria - time to create a new one messageThreads[threadNumber] = { 'number' : threadNumber, 'newest' : header.when_written_time, 'subject' : header.subject, 'replies' : 0, 'latestAuthor' : '', 'latestNumber' : header.number, 'threadID' : header.number }; threadedMessages[header.number] = threadNumber; - print("<script language=javascript type=text/javascript>"); + print("<script type='text/javascript'>"); print("var threadHeader" + threadNumber + " = document.createElement('div');"); print("threadHeader" + threadNumber + ".id = 'threadHeader" + threadNumber + "';"); - print("threadHeader" + threadNumber + ".innerHTML += '<a name=" + header.number + "></a><a class=\"ulLink headingFont\" href=javascript:toggleVisibility(\"threadContainer" + threadNumber + "\")>" + html_encode(header.subject, false, false, false, false).replace(/'/g, "'") + "</a><br />Started by " + header.from + " on " + system.timestr(parseInt(header.when_written_time)) + "';"); + print("threadHeader" + threadNumber + ".innerHTML += '<a name=" + header.number + "><\\/a><a class=\"ulLink headingFont\" href=javascript:toggleVisibility(\"threadContainer" + threadNumber + "\")>" + clean_subject(header.subject, false, false, false, false).replace(/'/g, "'") + "<\\/a><br>Started by " + header.from + " on " + system.timestr(parseInt(header.when_written_time)) + "';"); print("var threadContainer" + threadNumber + " = document.createElement('div');"); print("threadContainer" + threadNumber + ".id = 'threadContainer" + threadNumber + "';"); @@ -398,9 +402,9 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) print("threadContainer" + threadNumber + ".style.display = 'none';"); } - msg += '<a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + header.number + '>Thread URL</a>'; - msg += ' - <a class=ulLink href=./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + subBoardCode + '&thread=' + header.number + '#' + header.number + '>Message URL</a>'; - msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + threadNumber + '")>Collapse Thread</a>' + reply + '</div>'; + msg += '<a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&thread=' + header.number + '">Thread URL<\\/a>'; + msg += ' - <a class=ulLink href="./pages.ssjs?page=' + webIni.forumPage + '&action=viewSubBoard&subBoard=' + clean_subject(subBoardCode) + '&thread=' + header.number + '#' + header.number + '">Message URL<\\/a>'; + msg += ' - <a class=ulLink onclick=toggleVisibility("threadContainer' + threadNumber + '")>Collapse Thread<\\/a>' + reply + '<\\/div>'; print("threadContainer" + threadNumber + ".innerHTML += '" + msg + "';"); print("</script>"); threadNumber++; @@ -408,7 +412,7 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) } - print("<div id=threadBox-" + subBoardCode + "></div>"); + print("<div id=threadBox-" + clean_subject(subBoardCode) + "></div>"); var newestDates = new Array(); for(var t in messageThreads) newestDates.push(messageThreads[t]['newest']); newestDates = newestDates.sort(sortnumber); @@ -418,13 +422,13 @@ function printSubBoard(subBoardCode, threadNumber, newOnly, scanPointer, mg, sb) for(var t in messageThreads) { if(messageThreads[t]['newest'] != newestDates[d]) continue; if(newOnly && messageThreads[t]['latestNumber'] <= scanPointer) continue; - print("<script language=javascript type=text/javascript>"); + print("<script type='text/javascript'>"); print("threadHeader" + t + ".className += 'messageBoxColor standardBorder standardPadding underMargin treeIndent';"); if(messageThreads[t]['replies'] != 1) { - print("threadHeader" + t + ".innerHTML += '<br />" + messageThreads[t]['replies'] + " replies';"); + print("threadHeader" + t + ".innerHTML += '<br>" + messageThreads[t]['replies'] + " replies';"); } else { - print("threadHeader" + t + ".innerHTML += '<br />" + messageThreads[t]['replies'] + " reply';"); + print("threadHeader" + t + ".innerHTML += '<br>" + messageThreads[t]['replies'] + " reply';"); } if(messageThreads[t]['replies'] > 0) print("threadHeader" + t + ".innerHTML += ', latest by " + messageThreads[t]['latestAuthor'] + " on " + system.timestr(messageThreads[t]['newest']) + "';"); @@ -462,5 +466,5 @@ function newMessageScan() { } } } - if(threadNumber < 1) print("<br />No new messages."); + if(threadNumber < 1) print("<br>No new messages."); }