diff --git a/js/battle.js b/js/battle.js
index bbccd44bc..85c6a220c 100644
--- a/js/battle.js
+++ b/js/battle.js
@@ -4652,9 +4652,9 @@ function Battle(frame, logFrame, noPreload) {
args.shift();
var message = args.join('|');
if (message.substr(0,2) === '//') {
- self.log('
' + Tools.escapeHTML(name) + ': ' + Tools.parseMessage(message.substr(1)) + '
', preempt);
+ self.log('' + Tools.escapeHTML(name) + ': ' + Tools.parseMessage(message.substr(1), name) + '
', preempt);
} else if (message.substr(0,4).toLowerCase() === '/me ') {
- self.log('• ' + Tools.escapeHTML(name) + ' ' + Tools.parseMessage(message.substr(4)) + '
', preempt);
+ self.log('• ' + Tools.escapeHTML(name) + ' ' + Tools.parseMessage(message.substr(4), name) + '
', preempt);
} else if (message.substr(0,14).toLowerCase() === '/data-pokemon ') {
self.log(''+Chart.pokemonRow(Tools.getTemplate(message.substr(14)),'',{})+' ', preempt);
} else if (message.substr(0,11).toLowerCase() === '/data-item ') {
@@ -4664,7 +4664,7 @@ function Battle(frame, logFrame, noPreload) {
} else if (message.substr(0,11).toLowerCase() === '/data-move ') {
self.log(''+Chart.moveRow(Tools.getMove(message.substr(11)),'',{})+' ', preempt);
} else {
- self.log('' + Tools.escapeHTML(name) + ': ' + Tools.parseMessage(message) + '
', preempt);
+ self.log('' + Tools.escapeHTML(name) + ': ' + Tools.parseMessage(message, name) + '
', preempt);
}
break;
case 'chatmsg':
@@ -4680,7 +4680,7 @@ function Battle(frame, logFrame, noPreload) {
self.log('' + Tools.sanitizeHTML(list) + '
', preempt);
break;
case 'pm':
- self.log('' + Tools.escapeHTML(args[1]) + ': (Private to ' + Tools.escapeHTML(args[3]) + ') ' + Tools.parseMessage(args[4]) + '');
+ self.log('
' + Tools.escapeHTML(args[1]) + ': (Private to ' + Tools.escapeHTML(args[3]) + ') ' + Tools.parseMessage(args[4], args[1]) + '');
break;
case 'askreg':
self.log('
Register an account to protect your ladder rating! Register
');
diff --git a/js/battledata.js b/js/battledata.js
index 897a1be5f..7e11101e8 100644
--- a/js/battledata.js
+++ b/js/battledata.js
@@ -297,7 +297,7 @@ var Tools = {
return Tools.escapeHTML(formatid);
},
- parseMessage: function(str) {
+ parseMessage: function(str, linkclass) {
str = Tools.escapeHTML(str);
// Don't format console commands (>>).
if (str.substr(0, 8) === '>>') return str;
@@ -337,8 +337,12 @@ var Tools = {
onclick = 'if (window._gaq) _gaq.push([\'_trackEvent\', \'' +
event + '\', \'' + Tools.escapeQuotes(fulluri) + '\']);';
}
+ if (linkclass) {
+ classbit = ' class="message-link-' + toId(linkclass) + '"';
+ }
return '
' + uri + ' ';
+ '" target="_blank" onclick="' + onclick + '"' + classbit +
+ '>' + uri + '';
});
// google [blah]
// google[blah]
diff --git a/js/client-chat.js b/js/client-chat.js
index e53327903..32a0135e6 100644
--- a/js/client-chat.js
+++ b/js/client-chat.js
@@ -769,6 +769,14 @@
this.$chat.append('
' + Tools.sanitizeHTML(row.slice(1).join('|')) + '
');
break;
+ case 'unlink':
+ // note: this message has global effects, but it's handled here
+ // so that it can be included in the scrollback buffer.
+ $('.message-link-' + toId(row[1])).each(function() {
+ $(this).replaceWith($(this).html());
+ });
+ break;
+
case '':
this.$chat.append('
' + Tools.escapeHTML(row.slice(1).join('|')) + '
');
break;
@@ -916,30 +924,30 @@
if (name.charAt(0) !== ' ') clickableName = '
' + Tools.escapeHTML(name.charAt(0)) + ' '+clickableName;
var self = this;
var outputChat = function() {
- self.$chat.append(chatDiv + timestamp + '
' + clickableName + ': ' + Tools.parseMessage(message) + ' ');
+ self.$chat.append(chatDiv + timestamp + '
' + clickableName + ': ' + Tools.parseMessage(message, name) + ' ');
};
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) + '
');
+ this.$chat.append('' + timestamp + '' + clickableName + ': (Private to ' + Tools.escapeHTML(pm) + ') ' + Tools.parseMessage(message, name) + '
');
} else if (message.substr(0,4) === '/me ') {
message = message.substr(4);
if (showme) {
- this.$chat.append(chatDiv + timestamp + '• ' + clickableName + ' ' + Tools.parseMessage(message) + ' ');
+ this.$chat.append(chatDiv + timestamp + '• ' + clickableName + ' ' + Tools.parseMessage(message, name) + ' ');
} else {
outputChat();
}
} else if (message.substr(0,5) === '/mee ') {
message = message.substr(5);
if (showme) {
- this.$chat.append(chatDiv + timestamp + '• ' + clickableName + '' + Tools.parseMessage(message) + ' ');
+ this.$chat.append(chatDiv + timestamp + '• ' + clickableName + '' + Tools.parseMessage(message, name) + ' ');
} else {
outputChat();
}
} else if (message.substr(0,10) === '/announce ') {
- this.$chat.append(chatDiv + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(10)) + ' ');
+ this.$chat.append(chatDiv + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(10), name) + ' ');
} else if (message.substr(0,6) === '/warn ') {
app.addPopup(RulesPopup, {warning: message.substr(6)});
} else if (message.substr(0,14) === '/data-pokemon ') {
diff --git a/js/client-mainmenu.js b/js/client-mainmenu.js
index 80c51edab..f430003b0 100644
--- a/js/client-mainmenu.js
+++ b/js/client-mainmenu.js
@@ -93,15 +93,15 @@
if (name.substr(0, 1) !== ' ') clickableName = '' + Tools.escapeHTML(name.substr(0, 1)) + ' '+clickableName;
if (message.substr(0,4) === '/me ') {
- $chat.append('' + timestamp + '• ' + clickableName + ' ' + Tools.parseMessage(message.substr(4)) + '
');
+ $chat.append('' + timestamp + '• ' + clickableName + ' ' + Tools.parseMessage(message.substr(4), name) + '
');
} else if (message.substr(0,5) === '/mee ') {
- $chat.append('' + timestamp + '• ' + clickableName + '' + Tools.parseMessage(message.substr(5)) + '
');
+ $chat.append('' + timestamp + '• ' + clickableName + '' + Tools.parseMessage(message.substr(5), name) + '
');
} 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('Join '+roomid+'
');
} else if (message.substr(0,10) === '/announce ') {
- $chat.append('' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(10)) + '
');
+ $chat.append('' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message.substr(10), name) + '
');
} else if (message.substr(0,14) === '/data-pokemon ') {
$chat.append(''+Chart.pokemonRow(Tools.getTemplate(message.substr(14)),'',{})+' ');
} else if (message.substr(0,11) === '/data-item ') {
@@ -113,7 +113,7 @@
} else {
// Normal chat message.
if (message.substr(0,2) === '//') message = message.substr(1);
- $chat.append('' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message) + '
');
+ $chat.append('' + timestamp + '' + clickableName + ': ' + Tools.parseMessage(message, name) + '
');
}
if (autoscroll) {