' + getTimestamp() + '
' + sanitize(message.name.substr(1)) + ': (Private to ' + sanitize(message.pm) + ') ' + messageSanitize(message.message) + '');
} else if (message.rawMessage) {
selfR.add('|chatmsg-raw|' + message.rawMessage);
} else if (message.evalRawMessage) {
@@ -1088,19 +1105,34 @@ function Lobby(id, elem) {
case 'showjoins':
rooms.lobby.add('Join/leave messages: ON');
prefs.showjoins = true;
+ savePrefs();
return false;
case 'hidejoins':
rooms.lobby.add('Join/leave messages: HIDDEN');
prefs.showjoins = false;
+ savePrefs();
return false;
case 'showbattles':
rooms.lobby.add('Battle messages: ON');
prefs.showbattles = true;
+ savePrefs();
return false;
case 'hidebattles':
rooms.lobby.add('Battle messages: HIDDEN');
prefs.showbattles = false;
+ savePrefs();
+ return false;
+
+ case 'timestamps':
+ // This interface is arguably inconsistent with showbattles/hidebattles,
+ // but it makes more sense here because there are three possible values.
+ if (['off', 'minutes', 'seconds'].indexOf(target) === -1) {
+ rooms.lobby.add("Error: Valid options are /timestamps off, /timestamps minutes, and /timestamps seconds");
+ } else {
+ prefs.timestamps = target;
+ savePrefs();
+ }
return false;
case 'rank':
@@ -1369,7 +1401,7 @@ function Lobby(id, elem) {
if (log[i].pm) {
var pmuserid = (userid === me.userid ? toUserid(log[i].pm) : userid);
if (!me.pm[pmuserid]) me.pm[pmuserid] = '';
- var pmcode = '
' + clickableName + ': ' + messageSanitize(message) + '
';
+ var pmcode = '
' + getTimestamp() + '' + clickableName + ': ' + messageSanitize(message) + '
';
for (var j = 0; j < me.popups.length; j++) {
if (pmuserid === me.popups[j]) break;
}
@@ -1380,17 +1412,17 @@ function Lobby(id, elem) {
} else {
selfR.updatePopup();
}
- selfR.chatElem.append('
' + clickableName + ': (Private to ' + sanitize(log[i].pm) + ') ' + messageSanitize(message) + '
');
+ selfR.chatElem.append('
' + getTimestamp() + '' + clickableName + ': (Private to ' + sanitize(log[i].pm) + ') ' + messageSanitize(message) + '
');
//} else if (log[i].act) {
// selfR.chatElem.append('
• ' + clickableName + ' ' + message + '
');
} else if (message.substr(0,2) === '//') {
- selfR.chatElem.append('
' + clickableName + ': ' + messageSanitize(message.substr(1)) + '
');
+ selfR.chatElem.append('
' + getTimestamp() + '' + clickableName + ': ' + messageSanitize(message.substr(1)) + '
');
} else if (message.substr(0,4).toLowerCase() === '/me ') {
- selfR.chatElem.append('
• ' + clickableName + ' ' + messageSanitize(message.substr(4)) + '
');
+ selfR.chatElem.append('
' + getTimestamp() + '• ' + clickableName + ' ' + messageSanitize(message.substr(4)) + '
');
} else if (message.substr(0,5).toLowerCase() === '/mee ') {
- selfR.chatElem.append('
• ' + clickableName + '' + messageSanitize(message.substr(5)) + '
');
+ selfR.chatElem.append('
' + getTimestamp() + '• ' + clickableName + '' + messageSanitize(message.substr(5)) + '
');
} else if (message.substr(0,10).toLowerCase() === '/announce ') {
- selfR.chatElem.append('
' + clickableName + ': ' + messageSanitize(message.substr(10)) + '
');
+ selfR.chatElem.append('
' + getTimestamp() + '' + clickableName + ': ' + messageSanitize(message.substr(10)) + '
');
} else if (message.substr(0,14).toLowerCase() === '/data-pokemon ') {
selfR.chatElem.append('
'+Chart.pokemonRow(Tools.getTemplate(message.substr(14)),'',{})+'
');
} else if (message.substr(0,11).toLowerCase() === '/data-item ') {
@@ -1400,7 +1432,8 @@ function Lobby(id, elem) {
} else if (message.substr(0,11).toLowerCase() === '/data-move ') {
selfR.chatElem.append('
'+Chart.moveRow(Tools.getMove(message.substr(11)),'',{})+'
');
} else {
- selfR.chatElem.append('
' + clickableName + ': ' + messageSanitize(message) + '
');
+ // Normal chat message.
+ selfR.chatElem.append('
' + getTimestamp() + '' + clickableName + ': ' + messageSanitize(message) + '
');
}
} else if (log[i].name && log[i].action === 'battle') {
var id = log[i].room;