diff --git a/js/sim.js b/js/sim.js
index 96158bce9..70d6f405e 100644
--- a/js/sim.js
+++ b/js/sim.js
@@ -1099,13 +1099,34 @@ function Lobby(id, elem) {
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 {
- Tools.prefs.set('timestamps', target, true);
+ var targets = target.split(',');
+ if ((['all', 'lobby', 'pms'].indexOf(targets[0]) === -1)
+ || (targets.length < 2)
+ || (['off', 'minutes', 'seconds'].indexOf(
+ targets[1] = targets[1].trim()) === -1)) {
+ rooms.lobby.add("Error: Valid options are /timestamps [all|lobby|pms], [minutes|seconds|off]");
+ return false;
}
+ var timestamps = Tools.prefs.get('timestamps') || {};
+ if (typeof timestamps === 'string') {
+ // The previous has a timestamps preference from the previous
+ // regime. We can't set properties of a string, so set it to
+ // an empty object.
+ timestamps = {};
+ }
+ switch (targets[0]) {
+ case 'all':
+ timestamps.lobby = targets[1];
+ timestamps.pms = targets[1];
+ break;
+ case 'lobby':
+ timestamps.lobby = targets[1];
+ break;
+ case 'pms':
+ timestamps.pms = targets[1];
+ break;
+ }
+ Tools.prefs.set('timestamps', timestamps, true);
return false;
case 'highlight':
@@ -1293,12 +1314,13 @@ function Lobby(id, elem) {
selfR.userActivity.splice(0, 20);
}
};
- this.getTimestamp = function () {
- var pref = Tools.prefs.get('timestamps');
- if ((pref === 'off') || (pref === undefined)) return '';
+ this.getTimestamp = function (section) {
+ var pref = Tools.prefs.get('timestamps') || {};
+ var sectionPref = ((section === 'pms') ? pref.pms : pref.lobby) || 'off';
+ if ((sectionPref === 'off') || (sectionPref === undefined)) return '';
var date = new Date();
var components = [ date.getHours(), date.getMinutes() ];
- if (pref === 'seconds') {
+ if (sectionPref === 'seconds') {
components.push(date.getSeconds());
}
return '[' + components.map(
@@ -1456,11 +1478,12 @@ function Lobby(id, elem) {
}
var highlight = isHighlighted ? ' style="background-color:#FDA;"' : '';
var chatDiv = '
';
+ var timestamp = selfR.getTimestamp(log[i].pm ? 'pms' : 'lobby');
if (log[i].name.substr(0, 1) !== ' ') clickableName = '
' + sanitize(log[i].name.substr(0, 1)) + ''+clickableName;
if (log[i].pm) {
var pmuserid = (userid === me.userid ? toUserid(log[i].pm) : userid);
if (!me.pm[pmuserid]) me.pm[pmuserid] = '';
- var pmcode = '
' + selfR.getTimestamp() + '' + clickableName + ': ' + messageSanitize(message) + '
';
+ var pmcode = '
' + timestamp + '' + clickableName + ': ' + messageSanitize(message) + '
';
for (var j = 0; j < me.popups.length; j++) {
if (pmuserid === me.popups[j]) break;
}
@@ -1478,17 +1501,17 @@ function Lobby(id, elem) {
} else {
selfR.updatePopup();
}
- selfR.chatElem.append('
' + selfR.getTimestamp() + '' + clickableName + ': (Private to ' + sanitize(log[i].pm) + ') ' + messageSanitize(message) + '
');
+ selfR.chatElem.append('
' + timestamp + '' + 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(chatDiv + selfR.getTimestamp() + '
' + clickableName + ': ' + messageSanitize(message.substr(1)) + ' ');
+ selfR.chatElem.append(chatDiv + timestamp + '' + clickableName + ': ' + messageSanitize(message.substr(1)) + '');
} else if (message.substr(0,4).toLowerCase() === '/me ') {
- selfR.chatElem.append(chatDiv + selfR.getTimestamp() + '• ' + clickableName + ' ' + messageSanitize(message.substr(4)) + '');
+ selfR.chatElem.append(chatDiv + timestamp + '• ' + clickableName + ' ' + messageSanitize(message.substr(4)) + '');
} else if (message.substr(0,5).toLowerCase() === '/mee ') {
- selfR.chatElem.append(chatDiv + selfR.getTimestamp() + '• ' + clickableName + '' + messageSanitize(message.substr(5)) + '');
+ selfR.chatElem.append(chatDiv + timestamp + '• ' + clickableName + '' + messageSanitize(message.substr(5)) + '');
} else if (message.substr(0,10).toLowerCase() === '/announce ') {
- selfR.chatElem.append(chatDiv + selfR.getTimestamp() + '' + clickableName + ': ' + messageSanitize(message.substr(10)) + '');
+ selfR.chatElem.append(chatDiv + timestamp + '' + 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 ') {
@@ -1499,7 +1522,7 @@ function Lobby(id, elem) {
selfR.chatElem.append(''+Chart.moveRow(Tools.getMove(message.substr(11)),'',{})+'
');
} else {
// Normal chat message.
- selfR.chatElem.append(chatDiv + selfR.getTimestamp() + '' + clickableName + ': ' + messageSanitize(message) + '');
+ selfR.chatElem.append(chatDiv + timestamp + '' + clickableName + ': ' + messageSanitize(message) + '');
}
} else if (log[i].name && log[i].action === 'battle') {
var id = log[i].room;