diff --git a/binaries/data/mods/public/gui/common/functions_utility.js b/binaries/data/mods/public/gui/common/functions_utility.js index 58ef09e397..8a2a75e010 100644 --- a/binaries/data/mods/public/gui/common/functions_utility.js +++ b/binaries/data/mods/public/gui/common/functions_utility.js @@ -240,3 +240,49 @@ function sanitizePlayerName(name, stripUnicode, stripSpaces) // Limit the length to 20 characters return sanitizedName.substr(0,20); } + +function tryAutoComplete(text, autoCompleteList) +{ + if (!text.length) + return text; + + var wordSplit = text.split(/\s/g); + if (!wordSplit.length) + return text; + + var lastWord = wordSplit.pop(); + if (!lastWord.length) + return text; + + for (var word of autoCompleteList) + { + if (word.toLowerCase().indexOf(lastWord.toLowerCase()) != 0) + continue; + + text = wordSplit.join(" ") + if (text.length > 0) + text += " "; + + text += word; + break; + } + return text; +} + +function autoCompleteNick(guiName, playerList) +{ + var input = Engine.GetGUIObjectByName(guiName); + var text = input.caption; + if (!text.length) + return; + + var autoCompleteList = []; + for (var player of playerList) + autoCompleteList.push(player.name); + + var bufferPosition = input.buffer_position; + var textTillBufferPosition = text.substring(0, bufferPosition); + var newText = tryAutoComplete(textTillBufferPosition, autoCompleteList); + input.caption = newText + text.substring(bufferPosition); + input.buffer_position = bufferPosition + (newText.length - textTillBufferPosition.length); +} diff --git a/binaries/data/mods/public/gui/lobby/lobby.js b/binaries/data/mods/public/gui/lobby/lobby.js index 7c83b15e0d..7be33d353e 100644 --- a/binaries/data/mods/public/gui/lobby/lobby.js +++ b/binaries/data/mods/public/gui/lobby/lobby.js @@ -752,35 +752,6 @@ function submitChatInput() } } -function completeNick() -{ - var input = Engine.GetGUIObjectByName("chatInput"); - var text = escapeText(input.caption); - if (text.length) - { - var matched = false; - for each (var playerObj in Engine.GetPlayerList()) - { - var player = playerObj.name; - var breaks = text.match(/(\s+)/g) || []; - text.split(/\s+/g).reduceRight(function (wordsSoFar, word, index) - { - if (matched) - return null; - var matchCandidate = word + (breaks[index - 1] || "") + wordsSoFar; - if (player.toUpperCase().indexOf(matchCandidate.toUpperCase().trim()) == 0) - { - input.caption = text.replace(matchCandidate.trim(), player); - matched = true; - } - return matchCandidate; - }, ""); - if (matched) - break; - } - } -} - function isValidNick(nick) { var prohibitedNicks = ["system"]; diff --git a/binaries/data/mods/public/gui/lobby/lobby.xml b/binaries/data/mods/public/gui/lobby/lobby.xml index e56f513681..fae12bc100 100644 --- a/binaries/data/mods/public/gui/lobby/lobby.xml +++ b/binaries/data/mods/public/gui/lobby/lobby.xml @@ -231,7 +231,7 @@ submitChatInput(); - completeNick(); + autoCompleteNick("chatInput", Engine.GetPlayerList()); diff --git a/binaries/data/mods/public/gui/session/session.xml b/binaries/data/mods/public/gui/session/session.xml index 069515db6a..0506016b13 100644 --- a/binaries/data/mods/public/gui/session/session.xml +++ b/binaries/data/mods/public/gui/session/session.xml @@ -197,6 +197,7 @@