(function ($) { var RoomsRoom = this.RoomsRoom = Room.extend({ minWidth: 320, maxWidth: 1024, type: 'rooms', title: 'Rooms', isSideRoom: true, events: { 'click .ilink': 'clickLink' }, initialize: function () { this.$el.addClass('ps-room-light').addClass('scrollable'); var buf = '

Loading...

'; this.$el.html(buf); app.on('response:rooms', this.update, this); app.send('/cmd rooms'); app.user.on('change:named', this.updateUser, this); this.update(); }, clickLink: function (e) { if (e.cmdKey || e.metaKey || e.ctrlKey) return; e.preventDefault(); e.stopPropagation(); var roomid = $(e.currentTarget).attr('href').substr(app.root.length); app.tryJoinRoom(roomid); }, updateUser: function () { this.update(); }, focus: function () { if (new Date().getTime() - this.lastUpdate > 60 * 1000) { app.send('/cmd rooms'); this.lastUpdate = new Date().getTime(); } var prevPos = this.$el.scrollTop(); this.$('button[name=joinRoomPopup]').focus(); this.$el.scrollTop(prevPos); }, joinRoomPopup: function () { app.addPopupPrompt("Room name:", "Join room", function (room) { room = toRoomid(room); if (!room) return; app.tryJoinRoom(room); }); }, update: function (rooms) { var firstOpen = !app.roomsData; if (rooms) { this.lastUpdate = new Date().getTime(); app.roomsData = rooms; } else { rooms = app.roomsData; } if (!rooms) return; this.updateRoomList(); if (!app.roomsFirstOpen && window.location.host !== 'demo.psim.us') { if (Config.roomsFirstOpenScript) { Config.roomsFirstOpenScript(); } app.roomsFirstOpen = 2; } }, updateRoomList: function () { var rooms = app.roomsData; var buf = ''; if (rooms.userCount) { var userCount = Number(rooms.userCount); var battleCount = Number(rooms.battleCount); buf += '
'; buf += ''; buf += ''; buf += '
'; this.$('.roomlisttop').html(buf); } buf = ''; buf += '

Official chat rooms

'; for (var i = 0; i < rooms.official.length; i++) { var roomData = rooms.official[i]; var id = toId(roomData.title); buf += '
(' + Number(roomData.userCount) + ' users) ' + Tools.escapeHTML(roomData.title) + '
' + Tools.escapeHTML(roomData.desc || '') + '
'; } this.$('.roomlist').first().html(buf); buf = ''; buf += '

Chat rooms

'; rooms.chat.sort(function (a, b) { return b.userCount - a.userCount; }); for (var i = 0; i < rooms.chat.length; i++) { var roomData = rooms.chat[i]; var id = toId(roomData.title); var escapedDesc = Tools.escapeHTML(roomData.desc || ''); buf += '
(' + Number(roomData.userCount) + ' users) ' + Tools.escapeHTML(roomData.title) + '
' + escapedDesc + '
'; } this.$('.roomlist').last().html(buf); }, roomlist: function () { app.addPopup(BattleListPopup); }, finduser: function () { app.addPopupPrompt("Username", "Open", function (target) { if (!target) return; if (toId(target) === 'zarel') { app.addPopup(Popup, {htmlMessage: "Zarel is very busy; please don't contact him this way. If you're looking for help, try joining the Help room?"}); return; } app.addPopup(UserPopup, {name: target}); }); } }); }).call(this, jQuery);