Ticket #3244: t3244_keep_player_and_gamelist_selection_v5_16839.patch

File t3244_keep_player_and_gamelist_selection_v5_16839.patch, 12.3 KB (added by elexis, 9 years ago)

Removes trailing whitespace. Changes some let to var.

  • binaries/data/mods/public/gui/lobby/lobby.js

     
    11var g_ChatMessages = [];
    22var g_Name = "unknown";
    33var g_GameList = {}
     4var g_filteredGameListIPs = [];
     5var g_selectedGameIP = "";
     6var g_selectedNick = "";
    47var g_GameListSortBy = "name";
    58var g_PlayerListSortBy = "name";
    69var g_GameListOrder = 1; // 1 for ascending sort, and -1 for descending
    710var g_PlayerListOrder = 1;
    8 var g_specialKey = Math.random();
     11const g_specialKey = Math.random();
    912// This object looks like {"name":[numMessagesSinceReset, lastReset, timeBlocked]} when in use.
    1013var g_spamMonitor = {};
    11 var g_timestamp = Engine.ConfigDB_GetValue("user", "lobby.chattimestamp") == "true";
     14const g_timestamp = Engine.ConfigDB_GetValue("user", "lobby.chattimestamp") == "true";
    1215var g_mapSizes = {};
    1316const g_mapTypesText = [translateWithContext("map", "Skirmish"), translateWithContext("map", "Random"), translate("Scenario")];
    1417const g_mapTypes = ["skirmish", "random", "scenario"];
    1518var g_userRating = ""; // Rating of user, defaults to Unrated
    16 var g_modPrefix = "@";
     19const g_modPrefix = "@";
    1720var g_joined = false;
    1821// Block spammers for 30 seconds.
    19 var SPAM_BLOCK_LENGTH = 30;
     22const SPAM_BLOCK_LENGTH = 30;
    2023
    2124////////////////////////////////////////////////////////////////////////////////////////////////
    2225
    2326function init(attribs)
    2427{
     
    169172 *
    170173 * @return Array containing the player, presence, nickname, and rating listings.
    171174 */
    172175function updatePlayerList()
    173176{
    174     var playersBox = Engine.GetGUIObjectByName("playersBox");
    175     var playerList = [];
    176     var presenceList = [];
    177     var nickList = [];
    178     var ratingList = [];
    179     var cleanPlayerList = Engine.GetPlayerList();
     177    let playersBox = Engine.GetGUIObjectByName("playersBox");
     178
     179    // Save previously selected player
     180    if (playersBox.selected > -1)
     181        g_selectedNick = playersBox.list[playersBox.selected];
     182
     183    let playerList = [];
     184    let presenceList = [];
     185    let nickList = [];
     186    let ratingList = [];
     187    let cleanPlayerList = Engine.GetPlayerList();
    180188    // Sort the player list, ignoring case.
    181189    cleanPlayerList.sort(function(a,b)
    182190    {
    183191        switch (g_PlayerListSortBy)
    184192        {
     
    197205            else if (presenceA > presenceB)
    198206                return g_PlayerListOrder;
    199207            return 0;
    200208        case 'name':
    201209        default:
    202             var aName = a.name.toLowerCase();
    203             var bName = b.name.toLowerCase();
     210            let aName = a.name.toLowerCase();
     211            let bName = b.name.toLowerCase();
    204212            if (aName < bName)
    205213                return -g_PlayerListOrder;
    206214            else if (aName > bName)
    207215                return g_PlayerListOrder;
    208216            return 0;
    209217        }
    210218    });
    211     for (var i = 0; i < cleanPlayerList.length; i++)
     219    for (let i = 0; i < cleanPlayerList.length; i++)
    212220    {
    213221        // Identify current user's rating.
    214222        if (cleanPlayerList[i].name == g_Name && cleanPlayerList[i].rating)
    215223            g_userRating = cleanPlayerList[i].rating;
    216224        // Add a "-" for unrated players.
    217225        if (!cleanPlayerList[i].rating)
    218226            cleanPlayerList[i].rating = "-";
    219227        // Colorize.
    220         var [name, status, rating] = formatPlayerListEntry(cleanPlayerList[i].name, cleanPlayerList[i].presence, cleanPlayerList[i].rating, cleanPlayerList[i].role);
     228        let [name, status, rating] = formatPlayerListEntry(cleanPlayerList[i].name, cleanPlayerList[i].presence, cleanPlayerList[i].rating, cleanPlayerList[i].role);
    221229        // Push to lists.
    222230        playerList.push(name);
    223231        presenceList.push(status);
    224232        nickList.push(cleanPlayerList[i].name);
    225         var ratingSpaces = "  ";
    226         for (var index = 0; index < 4 - Math.ceil(Math.log(cleanPlayerList[i].rating) / Math.LN10); index++)
     233        let ratingSpaces = "  ";
     234        for (let index = 0; index < 4 - Math.ceil(Math.log(cleanPlayerList[i].rating) / Math.LN10); index++)
    227235            ratingSpaces += "  ";
    228236        ratingList.push(String(ratingSpaces + rating));
    229237    }
    230238    playersBox.list_name = playerList;
    231239    playersBox.list_status = presenceList;
    232240    playersBox.list_rating = ratingList;
    233241    playersBox.list = nickList;
    234     if (playersBox.selected >= playersBox.list.length)
    235         playersBox.selected = -1;
     242
     243    // Select the previously selected player
     244    playersBox.selected = playersBox.list.indexOf(g_selectedNick);
     245
    236246    return [playerList, presenceList, nickList, ratingList];
    237247}
    238248
    239249/**
    240250 * Display the profile of the selected player.
     
    263273        Engine.GetGUIObjectByName("profileArea").hidden = true;
    264274        return;
    265275    }
    266276    Engine.GetGUIObjectByName("profileArea").hidden = false;
    267277
    268     Engine.SendGetProfile(playerList.list[playerList.selected]);   
     278    Engine.SendGetProfile(playerList.list[playerList.selected]);
    269279
    270280    var user = playerList.list_name[playerList.selected];
    271281    var role = Engine.LobbyGetPlayerRole(playerList.list[playerList.selected]);
    272282    var userList = Engine.GetGUIObjectByName("playersBox");
    273283    if (role && caller == "lobbylist")
     
    308318            Engine.GetGUIObjectByName("profileErrorText").hidden = false;
    309319            return;
    310320        }
    311321        Engine.GetGUIObjectByName("profileWindowArea").hidden = false;
    312322        Engine.GetGUIObjectByName("profileErrorText").hidden = true;
    313        
     323
    314324        if (attributes[0].rating != "")
    315325            user = sprintf(translate("%(nick)s (%(rating)s)"), { nick: user, rating: attributes[0].rating });
    316326
    317327        Engine.GetGUIObjectByName("profileUsernameText").caption = user;
    318328        Engine.GetGUIObjectByName("profileRankText").caption = attributes[0].rank;
     
    330340    }
    331341    else if (!Engine.GetGUIObjectByName("leaderboard").hidden)
    332342        playerList = Engine.GetGUIObjectByName("leaderboardBox");
    333343    else
    334344        playerList = Engine.GetGUIObjectByName("playersBox");
    335    
     345
    336346    if (attributes[0].rating == "-2")
    337347        return;
    338348    // Make sure the stats we have received coincide with the selected player.
    339349    if (attributes[0].player != playerList.list[playerList.selected])
    340350        return;
     
    394404/**
    395405 * Update the game listing from data cached in C++.
    396406 */
    397407function updateGameList()
    398408{
    399     var gamesBox = Engine.GetGUIObjectByName("gamesBox");
    400     var gameList = Engine.GetGameList();
     409    let gamesBox = Engine.GetGUIObjectByName("gamesBox");
     410
     411    // Save previously selected game by ip
     412    if (gamesBox.selected > -1)
     413        g_selectedGameIP = g_filteredGameListIPs[gamesBox.selected];
     414
    401415    // Store the game whole game list data so that we can access it later
    402416    // to update the game info panel.
    403     g_GameList = gameList;
     417    g_GameList = Engine.GetGameList();
    404418
    405419    // Sort the list of games to that games 'waiting' are displayed at the top, followed by 'init', followed by 'running'.
    406     var gameStatuses = ['waiting', 'init', 'running'];
     420    let gameStatuses = ['waiting', 'init', 'running'];
    407421    g_GameList.sort(function (a,b) {
    408422        switch (g_GameListSortBy)
    409423        {
    410424        case 'name':
    411425        case 'mapSize':
     
    443457                return 1;
    444458            return 0;
    445459        }
    446460    });
    447461
    448     var list_name = [];
    449     var list_ip = [];
    450     var list_mapName = [];
    451     var list_mapSize = [];
    452     var list_mapType = [];
    453     var list_nPlayers = [];
    454     var list = [];
    455     var list_data = [];
    456 
    457     var c = 0;
    458     for (var g of gameList)
     462    let list_name = [];
     463    let list_ip = [];
     464    let list_mapName = [];
     465    let list_mapSize = [];
     466    let list_mapType = [];
     467    let list_nPlayers = [];
     468    let list = [];
     469    let list_data = [];
     470    let c = 0;
     471    let selectedIndex = -1;
     472    g_filteredGameListIPs = [];
     473    for (let g of g_GameList)
    459474    {
    460475        if (!filterGame(g))
    461476        {
    462477            // 'waiting' games are highlighted in orange, 'running' in red, and 'init' in green.
    463478            let name = escapeText(g.name);
     
    467482                name = '[color="255 127 0"]' + name + '[/color]';
    468483            else
    469484                name = '[color="255 0 0"]' + name + '[/color]';
    470485            list_name.push(name);
    471486            list_ip.push(g.ip);
     487            if (g.ip == g_selectedGameIP)
     488                selectedIndex = list_ip.length - 1;
    472489            list_mapName.push(translate(g.niceMapName));
    473490            list_mapSize.push(translatedMapSize(g.mapSize));
    474491            let idx = g_mapTypes.indexOf(g.mapType);
    475492            list_mapType.push(idx != -1 ? g_mapTypesText[idx] : "");
    476493            list_nPlayers.push(g.nbp + "/" +g.tnbp);
    477494            list.push(name);
    478495            list_data.push(c);
     496            g_filteredGameListIPs.push(g.ip);
    479497        }
    480498        c++;
    481499    }
    482500
    483501    gamesBox.list_name = list_name;
     
    486504    gamesBox.list_mapType = list_mapType;
    487505    gamesBox.list_nPlayers = list_nPlayers;
    488506    gamesBox.list = list;
    489507    gamesBox.list_data = list_data;
    490508
    491     if (gamesBox.selected >= gamesBox.list_name.length)
    492         gamesBox.selected = -1;
     509    // Select previously selected game
     510    gamesBox.selected = selectedIndex;
    493511
    494512    // Update info box about the game currently selected
    495513    updateGameSelection();
    496514}
    497515
     
    670688    checkSpamMonitor();
    671689
    672690    // Receive messages
    673691    while (true)
    674692    {
    675         var message = Engine.LobbyGuiPollMessage();
     693        let message = Engine.LobbyGuiPollMessage();
    676694        // Clean Message
    677695        if (!message)
    678696            break;
    679         var text = escapeText(message.text);
     697        let text = escapeText(message.text);
     698        let from;
    680699        switch (message.type)
    681700        {
    682701        case "mucmessage": // For room messages
    683             var from = escapeText(message.from);
     702            from = escapeText(message.from);
    684703            addChatMessage({ "from": from, "text": text, "datetime": message.datetime});
    685704            break;
    686705        case "message": // For private messages
    687             var from = escapeText(message.from);
     706            from = escapeText(message.from);
    688707            addChatMessage({ "from": from, "text": text, "datetime": message.datetime});
    689708            break;
    690709        case "muc":
    691             var nick = message.text;
    692             var presence = Engine.LobbyGetPlayerPresence(nick);
    693             var playersBox = Engine.GetGUIObjectByName("playersBox");
    694             var playerList = playersBox.list_name;
    695             var presenceList = playersBox.list_status;
    696             var nickList = playersBox.list;
    697             var ratingList = playersBox.list_rating;
    698             var nickIndex = nickList.indexOf(nick);
     710            let nick = message.text;
     711            let presence = Engine.LobbyGetPlayerPresence(nick);
     712            let playersBox = Engine.GetGUIObjectByName("playersBox");
     713            let playerList = playersBox.list_name;
     714            let presenceList = playersBox.list_status;
     715            let nickList = playersBox.list;
     716            let ratingList = playersBox.list_rating;
     717            let nickIndex = nickList.indexOf(nick);
     718            let name, status, rating;
     719
     720            // Save the previously selected nickname
     721            if (playersBox.selected > -1)
     722                g_selectedNick = playersBox.list[playersBox.selected];
     723
    699724            switch(message.level)
    700725            {
    701726            case "join":
    702727                if (nick == g_Name)
    703728                {
     
    708733                    g_joined = true;
    709734                    break;
    710735                }
    711736                else if (g_joined)
    712737                {
    713                     var [name, status, rating] = formatPlayerListEntry(nick, presence, "-");
     738                    [name, status, rating] = formatPlayerListEntry(nick, presence, "-");
    714739                    playerList.push(name);
    715740                    presenceList.push(status);
    716741                    nickList.push(nick);
    717742                    ratingList.push(String(rating));
    718743                    Engine.SendGetRatingList();
     
    734759                if (!isValidNick(message.data))
    735760                {
    736761                    addChatMessage({ "from": "system", "text": sprintf(translate("Invalid nickname: %(nick)s"), { nick: message.data })});
    737762                    break;
    738763                }
    739                 var [name, status, rating] = formatPlayerListEntry(message.data, presence, stripColorCodes(ratingList[nickIndex])); // TODO: actually we don't want to change the presence here, so use what was used before
     764                [name, status, rating] = formatPlayerListEntry(message.data, presence, stripColorCodes(ratingList[nickIndex])); // TODO: actually we don't want to change the presence here, so use what was used before
    740765                playerList[nickIndex] = name;
    741766                // presence stays the same
    742767                nickList[nickIndex] = message.data;
    743768                addChatMessage({ "text": "/special " + sprintf(translate("%(oldnick)s is now known as %(newnick)s."), { oldnick: nick, newnick: message.data }), "key": g_specialKey });
    744769                Engine.SendGetRatingList();
    745770                break;
    746771            case "presence":
    747772                if (nickIndex == -1) // This shouldn't ever happen
    748773                    break;
    749                 var [name, status, rating] = formatPlayerListEntry(nick, presence, stripColorCodes(ratingList[nickIndex]));
     774                [name, status, rating] = formatPlayerListEntry(nick, presence, stripColorCodes(ratingList[nickIndex]));
    750775                presenceList[nickIndex] = status;
    751776                playerList[nickIndex] = name;
    752777                ratingList[nickIndex] = rating;
    753778                break;
    754779            case "subject":
     
    760785            }
    761786            // Push new data to GUI
    762787            playersBox.list_name = playerList;
    763788            playersBox.list_status = presenceList;
    764789            playersBox.list_rating = ratingList;
    765             playersBox.list = nickList;     
    766             if (playersBox.selected >= playersBox.list.length)
    767                 playersBox.selected = -1;
     790            playersBox.list = nickList;
     791            // Select the previously selected player
     792            playersBox.selected = nickList.indexOf(g_selectedNick);
    768793            break;
    769794        case "system":
    770795            switch (message.level)
    771796            {
    772797            case "standard":