diff --git a/js/battle.js b/js/battle.js index 2d137115d..1686973b0 100644 --- a/js/battle.js +++ b/js/battle.js @@ -156,7 +156,7 @@ function Pokemon(species) { opacity: .6 }, BattleEffects.energyball)); elem = elem.add(curelem); -  + selfP.side.battle.spriteElemsFront[selfP.side.n].append(''); curelem = selfP.side.battle.spriteElemsFront[selfP.side.n].children().last(); curelem.css(self.pos({ @@ -4225,9 +4225,9 @@ function Battle(frame, logFrame, noPreload) { args.shift(); var message = args.join('|'); if (message.substr(0,2) === '//') { - self.log('
' + getTimestamp() + '' + self.sanitize(name) + ': ' + messageSanitize(message.substr(1)) + '
', preempt); + self.log('
' + self.sanitize(name) + ': ' + messageSanitize(message.substr(1)) + '
', preempt); } else if (message.substr(0,4).toLowerCase() === '/me ') { - self.log('
' + getTimestamp() + ' ' + self.sanitize(name) + ' ' + messageSanitize(message.substr(4)) + '
', preempt); + self.log('
' + 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('
' + getTimestamp() + '' + self.sanitize(name) + ': ' + messageSanitize(message) + '
', preempt); + self.log('
' + self.sanitize(name) + ': ' + messageSanitize(message) + '
', preempt); } break; case 'chatmsg': diff --git a/js/battledata.js b/js/battledata.js index f6b58a183..3ad8600f7 100644 --- a/js/battledata.js +++ b/js/battledata.js @@ -298,6 +298,29 @@ var basespecieschart = { var Tools = { + prefs: (function() { + var localStorageEntry = 'showdown_prefs'; + var data = (window.localStorage && + $.parseJSON(localStorage.getItem(localStorageEntry))) || {}; + return { + get: function(prop) { + return data[prop]; + }, + /** + * Set a preference value. + * If save is true-ish, then also save to localStorage immediately. + */ + set: function(prop, value, save) { + data[prop] = value; + if (save) this.save(); + }, + save: function() { + if (!window.localStorage) return; + localStorage.setItem(localStorageEntry, $.toJSON(data)); + } + }; + })(), + getEffect: function(effect) { if (!effect || typeof effect === 'string') { var name = $.trim(effect||''); @@ -611,19 +634,3 @@ var Tools = { } }; -var prefs = (window.localStorage && $.parseJSON(localStorage.getItem('showdown_prefs'))) || {}; -function savePrefs() { - if (!window.localStorage) return; - localStorage.setItem('showdown_prefs', $.toJSON(prefs)); -} -function getTimestamp() { - if (prefs.timestamps === 'off' || prefs.timestamps === undefined) 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(':') + '] '; -} diff --git a/js/sim.js b/js/sim.js index 99a60a9e2..150fc23de 100644 --- a/js/sim.js +++ b/js/sim.js @@ -30,7 +30,6 @@ var me = { curPopup: '', popups: [] }; -var prefs = (window.localStorage && $.parseJSON(localStorage.getItem('showdown_prefs'))) || {}; var rooms = {}; var curRoom = null; var curTitle = 'Showdown!'; @@ -40,23 +39,6 @@ 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') || (prefs.timestamps === undefined)) 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,14 +243,9 @@ function BattleRoom(id, elem) { } selfR.battle.play(); if (data.battlelog) { - // Disable timestamps for the past log because the server does - // not tell us what time the messages were sent at. - var timestamps = prefs.timestamps; - prefs.timestamps = 'off'; for (var i = 0; i < data.battlelog.length; i++) { selfR.battle.add(data.battlelog[i]); } - prefs.timestamps = timestamps; selfR.battle.fastForwardTo(-1); } selfR.updateMe(); @@ -283,7 +260,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|' + '
' + getTimestamp() + '' + sanitize(message.name.substr(1)) + ': (Private to ' + sanitize(message.pm) + ') ' + messageSanitize(message.message) + ''); + selfR.add('|chatmsg-raw|' + '
' + 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) { @@ -1109,24 +1086,20 @@ function Lobby(id, elem) { case 'showjoins': rooms.lobby.add('Join/leave messages: ON'); - prefs.showjoins = true; - savePrefs(); + Tools.prefs.set('showjoins', true, true); return false; case 'hidejoins': rooms.lobby.add('Join/leave messages: HIDDEN'); - prefs.showjoins = false; - savePrefs(); + Tools.prefs.set('showjoins', false, true); return false; case 'showbattles': rooms.lobby.add('Battle messages: ON'); - prefs.showbattles = true; - savePrefs(); + Tools.prefs.set('showbattles', true, true); return false; case 'hidebattles': rooms.lobby.add('Battle messages: HIDDEN'); - prefs.showbattles = false; - savePrefs(); + Tools.prefs.set('showbattles', false, true); return false; case 'timestamps': @@ -1135,8 +1108,7 @@ function Lobby(id, elem) { 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(); + Tools.prefs.set('timestamps', target, true); } return false; @@ -1275,6 +1247,18 @@ function Lobby(id, elem) { selfR.userActivity.splice(0, 20); } }; + this.getTimestamp = function () { + var pref = Tools.prefs.get('timestamps'); + if ((pref === 'off') || (pref === undefined)) return ''; + var date = new Date(); + var components = [ date.getHours(), date.getMinutes() ]; + if (pref === 'seconds') { + components.push(date.getSeconds()); + } + return '[' + components.map( + function(x) { return (x < 10) ? '0' + x : x; } + ).join(':') + '] '; + }; this.add = function (log) { if (typeof log === 'string') log = log.split('\n'); var autoscroll = false; @@ -1406,7 +1390,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 = '
' + getTimestamp() + '' + clickableName + ': ' + messageSanitize(message) + '
'; + var pmcode = '
' + selfR.getTimestamp() + '' + clickableName + ': ' + messageSanitize(message) + '
'; for (var j = 0; j < me.popups.length; j++) { if (pmuserid === me.popups[j]) break; } @@ -1417,17 +1401,17 @@ function Lobby(id, elem) { } else { selfR.updatePopup(); } - selfR.chatElem.append('
' + getTimestamp() + '' + clickableName + ': (Private to ' + sanitize(log[i].pm) + ') ' + messageSanitize(message) + '
'); + selfR.chatElem.append('
' + selfR.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('
' + getTimestamp() + '' + clickableName + ': ' + messageSanitize(message.substr(1)) + '
'); + selfR.chatElem.append('
' + selfR.getTimestamp() + '' + clickableName + ': ' + messageSanitize(message.substr(1)) + '
'); } else if (message.substr(0,4).toLowerCase() === '/me ') { - selfR.chatElem.append('
' + getTimestamp() + ' ' + clickableName + ' ' + messageSanitize(message.substr(4)) + '
'); + selfR.chatElem.append('
' + selfR.getTimestamp() + ' ' + clickableName + ' ' + messageSanitize(message.substr(4)) + '
'); } else if (message.substr(0,5).toLowerCase() === '/mee ') { - selfR.chatElem.append('
' + getTimestamp() + ' ' + clickableName + '' + messageSanitize(message.substr(5)) + '
'); + selfR.chatElem.append('
' + selfR.getTimestamp() + ' ' + clickableName + '' + messageSanitize(message.substr(5)) + '
'); } else if (message.substr(0,10).toLowerCase() === '/announce ') { - selfR.chatElem.append('
' + getTimestamp() + '' + clickableName + ': ' + messageSanitize(message.substr(10)) + '
'); + selfR.chatElem.append('
' + selfR.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 ') { @@ -1438,7 +1422,7 @@ function Lobby(id, elem) { selfR.chatElem.append('
    '+Chart.moveRow(Tools.getMove(message.substr(11)),'',{})+'
'); } else { // Normal chat message. - selfR.chatElem.append('
' + getTimestamp() + '' + clickableName + ': ' + messageSanitize(message) + '
'); + selfR.chatElem.append('
' + selfR.getTimestamp() + '' + clickableName + ': ' + messageSanitize(message) + '
'); } } else if (log[i].name && log[i].action === 'battle') { var id = log[i].room; @@ -1452,7 +1436,7 @@ function Lobby(id, elem) { }); if (selfR.rooms.length > 8) selfR.rooms.shift(); - if (log[i].silent && !prefs.showbattles) continue; + if (log[i].silent && !Tools.prefs.get('showbattles')) continue; selfR.joinLeaveElem = null; selfR.joinLeave = { @@ -1486,7 +1470,7 @@ function Lobby(id, elem) { me.users[toUserid(log[i].name)] = log[i].name; continue; } - if (log[i].silent && !prefs.showjoins) continue; + if (log[i].silent && !Tools.prefs.get('showjoins')) continue; if (!selfR.joinLeaveElem) { selfR.chatElem.append('
Loading...
'); selfR.joinLeaveElem = selfR.chatElem.children().last(); @@ -1569,10 +1553,10 @@ function Lobby(id, elem) { } // Disable timestamps for the past log because the server doesn't // tell us what time the messages were sent at. - var timestamps = prefs.timestamps; - prefs.timestamps = 'off'; + var timestamps = Tools.prefs.get('timestamps'); + Tools.prefs.set('timestamps', 'off'); selfR.add(data.log); // Add past log. - prefs.timestamps = timestamps; + Tools.prefs.set('timestamps', timestamps); } selfR.update(data); selfR.chatFrameElem.scrollTop(selfR.chatElem.height());