From fe7da515b74c6f719b1eba8638a807d32c4292a1 Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Wed, 6 May 2020 23:28:09 +0200 Subject: [PATCH] remove static langName --- public/index.html | 3 --- public/trivabble.js | 26 ++++++++++++++++++++------ server/lang/de.js | 3 +++ server/lang/en.js | 4 ++++ server/lang/es.js | 4 ++++ server/lang/fr.js | 24 ++++++++++++++---------- server/trivabble-server.js | 19 +++++++++++++------ 7 files changed, 58 insertions(+), 25 deletions(-) diff --git a/public/index.html b/public/index.html index 445e45f..7071251 100644 --- a/public/index.html +++ b/public/index.html @@ -42,10 +42,7 @@ diff --git a/public/trivabble.js b/public/trivabble.js index f1da962..de853a9 100644 --- a/public/trivabble.js +++ b/public/trivabble.js @@ -29,8 +29,6 @@ const VERSION = 202005011900; - const langName = {"de": "German", "en": "English", "es": "Spanish", "fr": "French"}; - const Conf = window.TrivabbleConf || {}; function setConf(parameterName, defaultValue) { @@ -58,6 +56,7 @@ let board; let rack; const boardCells = []; + let langName; let scoreOf; let bag; @@ -871,6 +870,11 @@ set("boardLang", data.boardLang); } + if (data.langName) { + langName = data.langName; + createLangBoardSelect(langName); + } + if (data.letterValues) { scoreOf = data.letterValues; } @@ -1518,19 +1522,29 @@ } } + trivabble.run(); + }; + + function createLangBoardSelect(langName) { + var newLangName = []; for (const key in langName) { newLangName.push({"key": key, "value": _(langName[key])}); } newLangName = newLangName.sort((a, b) => (a.value > b.value) ? 1 : ((b.value > a.value) ? -1 : 0)); + const select = document.getElementById("board-lang"); + + for (var i = select.options.length - 1; i >=0; i--) { + select.remove(i); + } + for (var i = 0; i < newLangName.length; i++) { - select.options[i] = new Option(newLangName[i].value, newLangName[i].key); + select.add(new Option(newLangName[i].value, newLangName[i].key)); } - select.value = localStorage.trivabbleBoardLang; - trivabble.run(); - }; + select.value = localStorage.trivabbleBoardLang; + } function langSelectionChange(e) { localStorage.trivabbleLang = e.target.value; diff --git a/server/lang/de.js b/server/lang/de.js index 9e9e4b9..e41f892 100644 --- a/server/lang/de.js +++ b/server/lang/de.js @@ -24,6 +24,9 @@ module.exports = { + code: "de", + name: "German", + /* 102 jetons: - 0 point: Joker *2 diff --git a/server/lang/en.js b/server/lang/en.js index d118e9d..a8f34f1 100644 --- a/server/lang/en.js +++ b/server/lang/en.js @@ -23,6 +23,10 @@ */ module.exports = { + + code: "en", + name: "English", + /* 100 jetons: - 0 point: Blank *2 diff --git a/server/lang/es.js b/server/lang/es.js index 6a94781..cb8aa51 100644 --- a/server/lang/es.js +++ b/server/lang/es.js @@ -23,6 +23,10 @@ */ module.exports = { + + code: "es", + name: "Spanish", + /* 100 jetons: - 0 point: Comodin *2 diff --git a/server/lang/fr.js b/server/lang/fr.js index 06ae809..f94c0c0 100644 --- a/server/lang/fr.js +++ b/server/lang/fr.js @@ -23,16 +23,20 @@ */ module.exports = { -/* - 102 jetons - - 0 point : Joker *2 - - 1 point : E *15, A *9, I *8, N *6, O *6, R *6, S *6, T *6, U *6, L *5 - - 2 points : D *3, M *3, G *2 - - 3 points : B *2, C *2, P *2 - - 4 points : F *2, H *2, V *2 - - 8 points : J *1, Q *1 - - 10 points : K *1, W *1, X *1, Y *1, Z *1 - */ + + code: "fr", + name: "French", + + /* + 102 jetons + - 0 point : Joker *2 + - 1 point : E *15, A *9, I *8, N *6, O *6, R *6, S *6, T *6, U *6, L *5 + - 2 points : D *3, M *3, G *2 + - 3 points : B *2, C *2, P *2 + - 4 points : F *2, H *2, V *2 + - 8 points : J *1, Q *1 + - 10 points : K *1, W *1, X *1, Y *1, Z *1 + */ bag: [ " ", " ", // Jokers diff --git a/server/trivabble-server.js b/server/trivabble-server.js index 5710505..cc4144f 100644 --- a/server/trivabble-server.js +++ b/server/trivabble-server.js @@ -58,12 +58,14 @@ const REQUEST_TYPE_WEBSOCKET = 3; /* eslint-disable quote-props */ /* Manage multi language board */ -const boardPieces = { - "de": require ("./lang/de.js"), - "en": require ("./lang/en.js"), - "es": require ("./lang/es.js"), - "fr": require ("./lang/fr.js") -}; +var boardPieces = {}; +var langName = {}; +var langFiles = fs.readdirSync("./lang"); + for (var i in langFiles) { + const data = require("./lang/" + langFiles[i]); + boardPieces[data.code] = data; + langName[data.code] = data.name; +} const defaultLang = "fr"; /* eslint-enable quote-props */ @@ -213,6 +215,7 @@ function newBoard() { Game.prototype.init = function (lang) { this.board = newBoard(); this.lang = lang || defaultLang; + this.langName = langName; this.bag = boardPieces[this.lang].bag.slice(); this.letterValues = boardPieces[this.lang].letterValues; this.racks = {}; @@ -227,6 +230,7 @@ Game.prototype.toJSON = function () { return { board: this.board, lang: this.lang, + langName: this.langName, bag: this.bag, racks: this.racks, scores: this.scores, @@ -239,6 +243,7 @@ Game.fromJSON = function (obj) { const game = new Game(); game.board = obj.board || newBoard(); game.lang = obj.lang || defaultLang; + game.langName = obj.langName; game.bag = boardPieces[game.lang].bag.slice(); game.letterValues = boardPieces[game.lang].letterValues; game.racks = obj.racks || {}; @@ -475,6 +480,7 @@ function handleCommand(cmdNumber, message, response) { gameNumber: gameNumber, playerName: playerName, boardLang: game.lang, + langName: langName, currentPlayer: game.currentPlayer, rack: game.getPlayerRack(playerName), board: game.board, @@ -704,6 +710,7 @@ function handleCommands(message, responseAndType) { currentPlayer: game.currentPlayer, gameNumber: gameNumber, boardLang: game.lang, + langName: langName, letterValues: game.letterValues, rack: game.getPlayerRack(message.playerName), board: game.board, -- 2.30.2