diff --git a/js/battle.js b/js/battle.js index b9c138752..e6dd57db9 100644 --- a/js/battle.js +++ b/js/battle.js @@ -5451,34 +5451,18 @@ var Battle = (function () { break; case 'chat': case 'c': - name = args[1]; + var name = args[1]; if (this.ignoreSpects && (name.charAt(0) === ' ' || name.charAt(0) === '+')) break; if (this.ignoreOpponent && name.charAt(0) === '\u2605' && toUserid(name) !== app.user.get('userid')) break; if (window.app && app.ignore && app.ignore[toUserid(name)]) break; args.shift(); args.shift(); - var clickableName; - if (!/[A-Za-z0-9 ]/.test(name.charAt(0))) { - clickableName = '' + Tools.escapeHTML(name.charAt(0)) + '' + Tools.escapeHTML(name.substr(1)); - } else { - clickableName = Tools.escapeHTML(name); - } var message = args.join('|'); - var mine = (toUserid(name) === (app && app.user && app.user.get('userid')) ? ' mine' : ''); - if (message.substr(0, 2) === '//') { - this.log('
' + clickableName + ': ' + Tools.parseMessage(message.substr(1)) + '
', preempt); - } else if (message.substr(0, 4).toLowerCase() === '/me ') { - this.log('
• ' + clickableName + ' ' + Tools.parseMessage(message.substr(4)) + '
', preempt); - } else if (message.substr(0, 14).toLowerCase() === '/data-pokemon ') { - if (window.Chart) this.log('
', preempt); - } else if (message.substr(0, 11).toLowerCase() === '/data-item ') { - if (window.Chart) this.log('
', preempt); - } else if (message.substr(0, 14).toLowerCase() === '/data-ability ') { - if (window.Chart) this.log('
', preempt); - } else if (message.substr(0, 11).toLowerCase() === '/data-move ') { - if (window.Chart) this.log('
', preempt); - } else { - this.log('
' + clickableName + ': ' + Tools.parseMessage(message) + '
', preempt); + var parsedMessage = Tools.parseChatMessage(message, name, '', false); + if (!$.isArray(parsedMessage)) parsedMessage = [parsedMessage]; + for (var i = 0; i < parsedMessage.length; i++) { + if (!parsedMessage[i]) continue; + this.log(parsedMessage[i], preempt); } break; case 'chatmsg': diff --git a/js/battledata.js b/js/battledata.js index d37798524..07cad9fef 100644 --- a/js/battledata.js +++ b/js/battledata.js @@ -355,6 +355,53 @@ var Tools = { } return Tools.escapeHTML(formatid); }, + parseChatMessage: function (message, name, timestamp, isHighlighted) { + var showMe = !((Tools.prefs('chatformatting') || {}).hideme); + + var hlClass = isHighlighted ? ' highlighted' : ''; + var mineClass = (name.substr(1) === app.user.get('name') ? ' mine' : ''); + var color = hashColor(toId(name)); + var clickableName = '' + Tools.escapeHTML(name.substr(1)) + ''; + if (!/[A-Za-z0-9 ]/.test(name.charAt(0))) clickableName = '' + Tools.escapeHTML(name.substr(0, 1)) + '' + clickableName; + + if (message.substr(0, 4) === '/me ') { + if (!showMe) return '
' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(4)) + '
'; + return '
' + timestamp + '• ' + clickableName + ' ' + Tools.parseMessage(message.substr(4)) + '
'; + } else if (message.substr(0, 5) === '/mee ') { + if (!showMe) return '
' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(5)) + '
'; + return '
' + timestamp + '• ' + clickableName + '' + Tools.parseMessage(message.substr(5)) + '
'; + } else if (message.substr(0, 8) === '/invite ') { + var roomid = toRoomid(message.substr(8)); + return [ + '
' + timestamp + '' + clickableName + ' invited you to join the room "' + roomid + '"
', + '
' + ]; + } else if (message.substr(0, 10) === '/announce ') { + return '
' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(10)) + '
'; + } else if (message.substr(0, 14) === '/data-pokemon ') { + if (!window.Chart) return ''; + return '
'; + } else if (message.substr(0, 11) === '/data-item ') { + if (!window.Chart) return ''; + return '
'; + } else if (message.substr(0, 14) === '/data-ability ') { + if (!window.Chart) return ''; + return '
'; + } else if (message.substr(0, 11) === '/data-move ') { + if (!window.Chart) return ''; + return '
'; + } else if (message.substr(0, 6) === '/text ') { + return '
' + Tools.escapeHTML(message.substr(6)) + '
'; + } else if (message.substr(0, 7) === '/error ') { + return '
' + Tools.escapeHTML(message.substr(7)) + '
'; + } else if (message.substr(0, 6) === '/html ') { + return '
' + Tools.sanitizeHTML(message.substr(6)) + '
'; + } else { + // Normal chat message. + if (message.substr(0, 2) === '//') message = message.substr(1); + return '
' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message) + '
'; + } + }, parseMessage: function (str) { str = Tools.escapeHTML(str); diff --git a/js/client-chat.js b/js/client-chat.js index faef1dee4..630b8a299 100644 --- a/js/client-chat.js +++ b/js/client-chat.js @@ -1340,7 +1340,6 @@ }, addChat: function (name, message, pm, deltatime) { var userid = toUserid(name); - var color = hashColor(userid); if (app.ignore[userid] && (name.charAt(0) === ' ' || name.charAt(0) === '+')) return; @@ -1352,7 +1351,7 @@ 'join': [], 'leave': [] }; - var clickableName = '' + Tools.escapeHTML(name.substr(1)) + ''; + var isHighlighted = false; if (!pm && userid !== app.user.get('userid')) { // PMs already notify in the main menu; no need to make them notify again @@ -1364,52 +1363,30 @@ this.subtleNotifyOnce(); } } - var highlight = isHighlighted ? ' highlighted' : ''; - var chatDiv = '
'; - var timestamp = ChatRoom.getTimestamp('lobby', deltatime); - if (name.charAt(0) !== ' ') clickableName = '' + Tools.escapeHTML(name.charAt(0)) + '' + clickableName; - var self = this; - var outputChat = function () { - var coloredName = (name.substr(1) ? '' + clickableName + ':' : ''); - self.$chat.append(chatDiv + timestamp + coloredName + ' ' + Tools.parseMessage(message) + '
'); - }; - var showme = !((Tools.prefs('chatformatting') || {}).hideme); + if (pm) { var pmuserid = toUserid(pm); - var oName = pm; - if (pmuserid === app.user.get('userid')) oName = name; - this.$chat.append('
' + timestamp + '' + clickableName + ': (Private to ' + Tools.escapeHTML(pm) + ') ' + Tools.parseMessage(message) + '
'); - } else if (message.substr(0, 4) === '/me ') { - message = message.substr(4); - if (showme) { - this.$chat.append(chatDiv + timestamp + '• ' + clickableName + ' ' + Tools.parseMessage(message) + ''); - } else { - outputChat(); - } - Storage.logChat(this.id, '* ' + name + ' ' + message); - } else if (message.substr(0, 5) === '/mee ') { - message = message.substr(5); - if (showme) { - this.$chat.append(chatDiv + timestamp + '• ' + clickableName + '' + Tools.parseMessage(message) + ''); - } else { - outputChat(); - } - Storage.logChat(this.id, '* ' + name + message); - } else if (message.substr(0, 10) === '/announce ') { - this.$chat.append(chatDiv + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(10)) + ''); - Storage.logChat(this.id, '' + name + ': /announce ' + message); - } else if (message.substr(0, 14) === '/data-pokemon ') { - this.$chat.append('
'); - } else if (message.substr(0, 11) === '/data-item ') { - this.$chat.append('
'); - } else if (message.substr(0, 14) === '/data-ability ') { - this.$chat.append('
'); - } else if (message.substr(0, 11) === '/data-move ') { - this.$chat.append('
'); - } else { - // Normal chat message. - if (message.substr(0, 2) === '//') message = message.substr(1); - outputChat(); + var oName = pmuserid === app.user.get('userid') ? name : pm; + var clickableName = '' + Tools.escapeHTML(name.substr(1)) + ''; + this.$chat.append( + '
' + ChatRoom.getTimestamp('lobby', deltatime) + + '' + clickableName + ':' + + '(Private to ' + Tools.escapeHTML(pm) + ') ' + Tools.parseMessage(message) + '' + + '
' + ); + return; + } + + var parsedMessage = Tools.parseChatMessage(message, name, ChatRoom.getTimestamp('lobby', deltatime), isHighlighted); + if (!$.isArray(parsedMessage)) parsedMessage = [parsedMessage]; + for (var i = 0; i < parsedMessage.length; i++) { + if (!parsedMessage[i]) continue; + this.$chat.append(parsedMessage[i]); + } + + if (message.substr(0, 4) === '/me ' || message.substr(0, 5) === '/mee') { + Storage.logChat(this.id, '* ' + name + (message.substr(0, 4) === '/me ' ? ' ' : '') + message); + } else if (message.substr(0, 10) === '/announce ' || message.substr(0, 1) !== '/') { Storage.logChat(this.id, '' + name + ': ' + message); } } diff --git a/js/client-mainmenu.js b/js/client-mainmenu.js index a6bef8d92..731347860 100644 --- a/js/client-mainmenu.js +++ b/js/client-mainmenu.js @@ -119,58 +119,23 @@ app.curSideRoom.addPM(name, message, target); } - var oName = name; - if (toId(name) === app.user.get('userid')) { - oName = target; - } else { - this.notifyOnce("PM from " + oName, "\"" + message + "\"", 'pm'); - } - + var isSelf = (toId(name) === app.user.get('userid')); + var oName = isSelf ? target : name; Storage.logChat('pm-' + toId(oName), '' + name + ': ' + message); var $pmWindow = this.openPM(oName, true); - var $chatFrame = $pmWindow.find('.pm-log'); var $chat = $pmWindow.find('.inner'); - var autoscroll = false; - if ($chatFrame.scrollTop() + 60 >= $chat.height() - $chatFrame.height()) { - autoscroll = true; - } - var timestamp = ChatRoom.getTimestamp('pms'); - var color = hashColor(toId(name)); - var clickableName = '' + Tools.escapeHTML(name.substr(1)) + ''; - if (name.substr(0, 1) !== ' ') clickableName = '' + Tools.escapeHTML(name.substr(0, 1)) + '' + clickableName; + var autoscroll = ($chatFrame.scrollTop() + 60 >= $chat.height() - $chatFrame.height()); - if (message.substr(0, 4) === '/me ') { - $chat.append('
' + timestamp + '• ' + clickableName + ' ' + Tools.parseMessage(message.substr(4)) + '
'); - } else if (message.substr(0, 5) === '/mee ') { - $chat.append('
' + timestamp + '• ' + clickableName + '' + Tools.parseMessage(message.substr(5)) + '
'); - } else if (message.substr(0, 8) === '/invite ') { - var roomid = toRoomid(message.substr(8)); - $chat.append('
' + timestamp + '' + clickableName + ' invited you to join the room "' + roomid + '"
'); - $chat.append('
'); - } else if (message.substr(0, 10) === '/announce ') { - $chat.append('
' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(10)) + '
'); - } else if (message.substr(0, 14) === '/data-pokemon ') { - $chat.append('
'); - } else if (message.substr(0, 11) === '/data-item ') { - $chat.append('
'); - } else if (message.substr(0, 14) === '/data-ability ') { - $chat.append('
'); - } else if (message.substr(0, 11) === '/data-move ') { - $chat.append('
'); - } else if (message.substr(0, 6) === '/text ') { - $chat.append('
' + Tools.escapeHTML(message.substr(6)) + '
'); - } else if (message.substr(0, 7) === '/error ') { - $chat.append('
' + Tools.escapeHTML(message.substr(7)) + '
'); - } else if (message.substr(0, 6) === '/html ') { - $chat.append('
' + Tools.sanitizeHTML(message.substr(6)) + '
'); - } else { - // Normal chat message. - if (message.substr(0, 2) === '//') message = message.substr(1); - $chat.append('
' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message) + '
'); + var parsedMessage = Tools.parseChatMessage(message, name, ChatRoom.getTimestamp('pms')); + if (!$.isArray(parsedMessage)) parsedMessage = [parsedMessage]; + for (var i = 0; i < parsedMessage.length; i++) { + if (!parsedMessage[i]) continue; + $chat.append(parsedMessage[i]); } + if (!isSelf) this.notifyOnce("PM from " + name, "\"" + message + "\"", 'pm'); if (autoscroll) { $chatFrame.scrollTop($chat.height());