Lobby cleanup.

Designate constants as such.
Comply with naming convention for globals.
Quote object keys.
Add few JSDoc comments.

Refs #3383.

This was SVN commit r17316.
This commit is contained in:
elexis 2015-11-29 01:29:38 +00:00
parent d39810df7d
commit d8ecc2f87f

View file

@ -1,21 +1,36 @@
const g_MapTypes = prepareForDropdown(g_Settings ? g_Settings.MapTypes : undefined);
const g_SpecialKey = Math.random();
/**
* Whether or not to display timestamps in the chat window.
*/
const g_ShowTimestamp = Engine.ConfigDB_GetValue("user", "lobby.chattimestamp") == "true";
/**
* Mute spammers for this time.
*/
const g_SpamBlockDuration = 30;
/**
* A symbol which is prepended to the username of moderators.
*/
const g_ModeratorPrefix = "@";
/**
* Current username.
*/
const g_Name = Engine.LobbyGetNick();
var g_ChatMessages = [];
var g_Name = "unknown";
var g_GameList = {};
var g_GameListSortBy = "name";
var g_PlayerListSortBy = "name";
var g_GameListOrder = 1; // 1 for ascending sort, and -1 for descending
var g_PlayerListOrder = 1;
var g_specialKey = Math.random();
// This object looks like {"name":[numMessagesSinceReset, lastReset, timeBlocked]} when in use.
var g_spamMonitor = {};
var g_timestamp = Engine.ConfigDB_GetValue("user", "lobby.chattimestamp") == "true";
var g_mapSizes = {};
var g_userRating = ""; // Rating of user, defaults to Unrated
var g_modPrefix = "@";
// Block spammers for 30 seconds.
var SPAM_BLOCK_LENGTH = 30;
////////////////////////////////////////////////////////////////////////////////////////////////
@ -31,8 +46,6 @@ function init(attribs)
initMusic();
global.music.setState(global.music.states.MENU);
g_Name = Engine.LobbyGetNick();
g_mapSizes = initMapSizes();
g_mapSizes.shortNames.splice(0, 0, translateWithContext("map size", "Any"));
g_mapSizes.tiles.splice(0, 0, "");
@ -543,7 +556,7 @@ function formatPlayerListEntry(nickname, presence, rating)
status = translate("Offline");
break;
default:
warn(sprintf("Unknown presence '%(presence)s'", { presence: presence }));
warn(sprintf("Unknown presence '%(presence)s'", { "presence": presence }));
color = "178 178 178";
status = translateWithContext("lobby presence", "Unknown");
break;
@ -555,7 +568,7 @@ function formatPlayerListEntry(nickname, presence, rating)
var formattedRating = '[color="' + color + '"]' + rating + "[/color]";
var role = Engine.LobbyGetPlayerRole(nickname);
if (role == "moderator")
nickname = g_modPrefix + nickname;
nickname = g_ModeratorPrefix + nickname;
var formattedName = colorPlayerName(nickname);
// Push this player's name and status onto the list
@ -621,12 +634,12 @@ function joinSelectedGame()
// Check if it looks like an ip address
if (sip.split('.').length != 4)
{
addChatMessage({ "from": "system", "text": sprintf(translate("This game's address '%(ip)s' does not appear to be valid."), { ip: sip }) });
addChatMessage({ "from": "system", "text": sprintf(translate("This game's address '%(ip)s' does not appear to be valid."), { "ip": sip }) });
return;
}
// Open Multiplayer connection window with join option.
Engine.PushGuiPage("page_gamesetup_mp.xml", { multiplayerGameType: "join", name: sname, ip: sip, rating: g_userRating });
Engine.PushGuiPage("page_gamesetup_mp.xml", { "multiplayerGameType": "join", "name": sname, "ip": sip, "rating": g_userRating });
}
}
@ -636,7 +649,7 @@ function joinSelectedGame()
function hostGame()
{
// Open Multiplayer connection window with host option.
Engine.PushGuiPage("page_gamesetup_mp.xml", { multiplayerGameType: "host", name: g_Name, rating: g_userRating });
Engine.PushGuiPage("page_gamesetup_mp.xml", { "multiplayerGameType": "host", "name": g_Name, "rating": g_userRating });
}
////////////////////////////////////////////////////////////////////////////////////////////////
@ -680,14 +693,14 @@ function onTick()
switch(message.level)
{
case "join":
addChatMessage({ "text": "/special " + sprintf(translate("%(nick)s has joined."), { nick: nick }), "key": g_specialKey });
addChatMessage({ "text": "/special " + sprintf(translate("%(nick)s has joined."), { "nick": nick }), "key": g_SpecialKey });
Engine.SendGetRatingList();
break;
case "leave":
addChatMessage({ "text": "/special " + sprintf(translate("%(nick)s has left."), { nick: nick }), "key": g_specialKey });
addChatMessage({ "text": "/special " + sprintf(translate("%(nick)s has left."), { "nick": nick }), "key": g_SpecialKey });
break;
case "nick":
addChatMessage({ "text": "/special " + sprintf(translate("%(oldnick)s is now known as %(newnick)s."), { oldnick: nick, newnick: message.data }), "key": g_specialKey });
addChatMessage({ "text": "/special " + sprintf(translate("%(oldnick)s is now known as %(newnick)s."), { "oldnick": nick, "newnick": message.data }), "key": g_SpecialKey });
break;
case "presence":
break;
@ -695,7 +708,7 @@ function onTick()
updateSubject(message.text);
break;
default:
warn(sprintf("Unknown message.level '%(msglvl)s'", { msglvl: message.level }));
warn(sprintf("Unknown message.level '%(msglvl)s'", { "msglvl": message.level }));
break;
}
// We might receive many join/leaves when returning to the lobby from a long game.
@ -745,7 +758,7 @@ function onTick()
}
break;
default:
error(sprintf("Unrecognised message type %(msgtype)s", { msgtype: message.type }));
error(sprintf("Unrecognised message type %(msgtype)s", { "msgtype": message.type }));
}
}
}
@ -804,7 +817,10 @@ function handleSpecialCommand(text)
case "me":
return false;
default:
addChatMessage({ "from":"system", "text": sprintf(translate("We're sorry, the '%(cmd)s' command is not supported."), { cmd: cmd})});
addChatMessage({
"from": "system",
"text": sprintf(translate("We're sorry, the '%(cmd)s' command is not supported."), { "cmd": cmd })
});
}
return true;
}
@ -822,7 +838,7 @@ function addChatMessage(msg)
// Display the moderator symbol in the chatbox.
var playerRole = Engine.LobbyGetPlayerRole(msg.from);
if (playerRole == "moderator")
msg.from = g_modPrefix + msg.from;
msg.from = g_ModeratorPrefix + msg.from;
}
else
msg.from = null;
@ -888,26 +904,26 @@ function ircFormat(text, from, color, key, datetime)
{
case "me":
// Translation: IRC message prefix when the sender uses the /me command.
var senderString = '[font="sans-bold-13"]' + sprintf(translate("* %(sender)s"), { sender: coloredFrom }) + '[/font]';
var senderString = '[font="sans-bold-13"]' + sprintf(translate("* %(sender)s"), { "sender": coloredFrom }) + '[/font]';
// Translation: IRC message issued using the /me command.
var formattedMessage = sprintf(translate("%(sender)s %(action)s"), { sender: senderString, action: message });
var formattedMessage = sprintf(translate("%(sender)s %(action)s"), { "sender": senderString, "action": message });
break;
case "say":
// Translation: IRC message prefix.
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { sender: coloredFrom }) + '[/font]';
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { "sender": coloredFrom }) + '[/font]';
// Translation: IRC message.
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { sender: senderString, message: message });
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { "sender": senderString, "message": message });
break;
case "special":
if (key === g_specialKey)
if (key === g_SpecialKey)
// Translation: IRC system message.
var formattedMessage = '[font="sans-bold-13"]' + sprintf(translate("== %(message)s"), { message: message }) + '[/font]';
var formattedMessage = '[font="sans-bold-13"]' + sprintf(translate("== %(message)s"), { "message": message }) + '[/font]';
else
{
// Translation: IRC message prefix.
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { sender: coloredFrom }) + '[/font]';
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { "sender": coloredFrom }) + '[/font]';
// Translation: IRC message.
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { sender: senderString, message: message });
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { "sender": senderString, "message": message });
}
break;
default:
@ -918,13 +934,13 @@ function ircFormat(text, from, color, key, datetime)
else
{
// Translation: IRC message prefix.
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { sender: coloredFrom }) + '[/font]';
var senderString = '[font="sans-bold-13"]' + sprintf(translate("<%(sender)s>"), { "sender": coloredFrom }) + '[/font]';
// Translation: IRC message.
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { sender: senderString, message: text });
var formattedMessage = sprintf(translate("%(sender)s %(message)s"), { "sender": senderString, "message": text });
}
// Build time header if enabled
if (g_timestamp)
if (g_ShowTimestamp)
{
var time;
@ -945,10 +961,10 @@ function ircFormat(text, from, color, key, datetime)
var timeString = Engine.FormatMillisecondsIntoDateString(time.getTime(), translate("HH:mm"));
// Translation: Time prefix as shown in the multiplayer lobby (when you enable it in the options page).
var timePrefixString = '[font="sans-bold-13"]' + sprintf(translate("\\[%(time)s]"), { time: timeString }) + '[/font]';
var timePrefixString = '[font="sans-bold-13"]' + sprintf(translate("\\[%(time)s]"), { "time": timeString }) + '[/font]';
// Translation: IRC message format when there is a time prefix.
return sprintf(translate("%(time)s %(message)s"), { time: timePrefixString, message: formattedMessage });
return sprintf(translate("%(time)s %(message)s"), { "time": timePrefixString, "message": formattedMessage });
}
else
return formattedMessage;
@ -991,7 +1007,7 @@ function isSpam(text, from)
if (text == " ")
return true;
// Block users who are still within their spam block period.
else if (g_spamMonitor[from][2] + SPAM_BLOCK_LENGTH >= time)
else if (g_spamMonitor[from][2] + g_SpamBlockDuration >= time)
return true;
// Block users who exceed the rate of 1 message per second for five seconds and are not already blocked. TODO: Make this smarter and block profanity.
else if (g_spamMonitor[from][0] == 6)
@ -1060,7 +1076,7 @@ function colorPlayerName(playername)
return ('[color="' + playername.split("").map(function (c, i) color.slice(i * 3, i * 3 + 3).join(" ") + '"]' + c + '[/color][color="')
.join("") + '"]').slice(0, -10);
}
return '[color="' + getPlayerColor(playername.replace(g_modPrefix, "")) + '"]' + playername + '[/color]';
return '[color="' + getPlayerColor(playername.replace(g_ModeratorPrefix, "")) + '"]' + playername + '[/color]';
}
// Ensure `value` is between 0 and 1.