diff --git a/js/battle.js b/js/battle.js index 3728de8a9..2d137115d 100644 --- a/js/battle.js +++ b/js/battle.js @@ -4225,9 +4225,9 @@ function Battle(frame, logFrame, noPreload) { args.shift(); var message = args.join('|'); if (message.substr(0,2) === '//') { - self.log('
' + self.sanitize(name) + ': ' + messageSanitize(message.substr(1)) + '
', preempt); + self.log('
' + getTimestamp() + '' + self.sanitize(name) + ': ' + messageSanitize(message.substr(1)) + '
', preempt); } else if (message.substr(0,4).toLowerCase() === '/me ') { - self.log('
' + self.sanitize(name) + ' ' + messageSanitize(message.substr(4)) + '
', preempt); + self.log('
' + getTimestamp() + ' ' + self.sanitize(name) + ' ' + messageSanitize(message.substr(4)) + '
', preempt); } else if (message.substr(0,14).toLowerCase() === '/data-pokemon ') { self.log('
', preempt); } else if (message.substr(0,11).toLowerCase() === '/data-item ') { @@ -4237,7 +4237,7 @@ function Battle(frame, logFrame, noPreload) { } else if (message.substr(0,11).toLowerCase() === '/data-move ') { self.log('
', preempt); } else { - self.log('
' + self.sanitize(name) + ': ' + messageSanitize(message) + '
', preempt); + self.log('
' + getTimestamp() + '' + self.sanitize(name) + ': ' + messageSanitize(message) + '
', preempt); } break; case 'chatmsg': diff --git a/js/sim.js b/js/sim.js index 18dc07706..9be74e57a 100644 --- a/js/sim.js +++ b/js/sim.js @@ -30,7 +30,7 @@ var me = { curPopup: '', popups: [] }; -var prefs = {}; +var prefs = (window.localStorage && $.parseJSON(localStorage.getItem('showdown_prefs'))) || {}; var rooms = {}; var curRoom = null; var curTitle = 'Showdown!'; @@ -40,6 +40,23 @@ var teams = []; var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1 && navigator.userAgent.toLowerCase().indexOf("firefox") <= -1; +function savePrefs() { + if (!window.localStorage) return; + localStorage.setItem('showdown_prefs', $.toJSON(prefs)); +} + +function getTimestamp() { + if (prefs.timestamps === 'off') return ''; + var date = new Date(); + var components = [ date.getHours(), date.getMinutes() ]; + if (prefs.timestamps === 'seconds') { + components.push(date.getSeconds()); + } + return '[' + components.map( + function(x) { return (x < 10) ? '0' + x : x; } + ).join(':') + '] '; +} + // function selectTab(tab, e) { if (e && e.preventDefault) e.preventDefault(); @@ -261,7 +278,7 @@ function BattleRoom(id, elem) { if (message.pm) { var pmuserid = (toUserid(message.name) === me.userid ? toUserid(message.pm) : toUserid(message.name)) if (me.ignore[toUserid(message.name)] && message.name.substr(0, 1) === ' ') return; - selfR.add('|chatmsg-raw|' + '
' + sanitize(message.name.substr(1)) + ': (Private to ' + sanitize(message.pm) + ') ' + messageSanitize(message.message) + ''); + selfR.add('|chatmsg-raw|' + '
' + 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;