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('' + Chart.pokemonRow(Tools.getTemplate(message.substr(14)), '', {}, false, true) + '
', preempt);
- } else if (message.substr(0, 11).toLowerCase() === '/data-item ') {
- if (window.Chart) this.log('' + Chart.itemRow(Tools.getItem(message.substr(11)), '', {}, false, true) + '
', preempt);
- } else if (message.substr(0, 14).toLowerCase() === '/data-ability ') {
- if (window.Chart) this.log('' + Chart.abilityRow(Tools.getAbility(message.substr(14)), '', {}, false, true) + '
', preempt);
- } else if (message.substr(0, 11).toLowerCase() === '/data-move ') {
- if (window.Chart) this.log('' + Chart.moveRow(Tools.getMove(message.substr(11)), '', {}, false, true) + '
', 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 '' + Chart.pokemonRow(Tools.getTemplate(message.substr(14)), '', {}, false, true) + '
';
+ } else if (message.substr(0, 11) === '/data-item ') {
+ if (!window.Chart) return '';
+ return '' + Chart.itemRow(Tools.getItem(message.substr(11)), '', {}, false, true) + '
';
+ } else if (message.substr(0, 14) === '/data-ability ') {
+ if (!window.Chart) return '';
+ return '' + Chart.abilityRow(Tools.getAbility(message.substr(14)), '', {}, false, true) + '
';
+ } else if (message.substr(0, 11) === '/data-move ') {
+ if (!window.Chart) return '';
+ return '' + Chart.moveRow(Tools.getMove(message.substr(11)), '', {}, false, true) + '
';
+ } 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('' + Chart.pokemonRow(Tools.getTemplate(message.substr(14)), '', {}, false, true) + '
');
- } else if (message.substr(0, 11) === '/data-item ') {
- this.$chat.append('' + Chart.itemRow(Tools.getItem(message.substr(11)), '', {}, false, true) + '
');
- } else if (message.substr(0, 14) === '/data-ability ') {
- this.$chat.append('' + Chart.abilityRow(Tools.getAbility(message.substr(14)), '', {}, false, true) + '
');
- } else if (message.substr(0, 11) === '/data-move ') {
- this.$chat.append('' + Chart.moveRow(Tools.getMove(message.substr(11)), '', {}, false, true) + '
');
- } 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('' + Chart.pokemonRow(Tools.getTemplate(message.substr(14)), '', {}, false, true) + '
');
- } else if (message.substr(0, 11) === '/data-item ') {
- $chat.append('' + Chart.itemRow(Tools.getItem(message.substr(11)), '', {}, false, true) + '
');
- } else if (message.substr(0, 14) === '/data-ability ') {
- $chat.append('' + Chart.abilityRow(Tools.getAbility(message.substr(14)), '', {}, false, true) + '
');
- } else if (message.substr(0, 11) === '/data-move ') {
- $chat.append('' + Chart.moveRow(Tools.getMove(message.substr(11)), '', {}, false, true) + '
');
- } 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());