remove static langName
authorLaurent Mazet <mazet@softndesign.org>
Wed, 6 May 2020 21:28:09 +0000 (23:28 +0200)
committerLaurent Mazet <mazet@softndesign.org>
Wed, 6 May 2020 21:28:09 +0000 (23:28 +0200)
public/index.html
public/trivabble.js
server/lang/de.js
server/lang/en.js
server/lang/es.js
server/lang/fr.js
server/trivabble-server.js

index 445e45f648cfd7c65dd148bb30ef500145e75698..7071251981bca50514dfc210690e60a78fc2b651 100644 (file)
                 <label>
                     <span data-l10n="text-content">Board language: </span>
                     <select id="board-lang">
-                        <option value="en">English</option>
                         <option value="fr">French</option>
-                        <option value="de">German</option>
-                        <option value="es">Spanish</option>
                     </select>
                 </label>
             </div>
index f1da962eedd67d4b1de396bac55f78aee26ca6da..de853a9d546e0936d76a49f44489f06daf7addc7 100644 (file)
@@ -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;
 
             set("boardLang", data.boardLang);
         }
 
+        if (data.langName) {
+            langName = data.langName;
+            createLangBoardSelect(langName);
+        }
+
         if (data.letterValues) {
             scoreOf = data.letterValues;
         }
             }
         }
 
+        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;
index 9e9e4b9fa7a9e4dc7d22a812f48a8489a1a5a58c..e41f89257746d12e4ffefeb056a259a270c72868 100644 (file)
@@ -24,6 +24,9 @@
 
 module.exports = {
 
+  code: "de",
+  name: "German",
+
   /*
      102 jetons:
      - 0 point: Joker *2
index d118e9d4304d66c9191ae4faf74769d748b7903e..a8f34f12e805369750f375126bcfc71b90656818 100644 (file)
  */
 
 module.exports = {
+
+  code: "en",
+  name: "English",
+
   /*
      100 jetons:
      - 0 point: Blank *2
index 6a94781495462494b0458c17e54c56967a683adf..cb8aa51b9ed72dbb67a4a8088a909aae76e4748c 100644 (file)
  */
 
 module.exports = {
+
+  code: "es",
+  name: "Spanish",
+
   /*
      100 jetons:
      - 0 point: Comodin *2
index 06ae80945134b16809880ba1544da43e08edd9f8..f94c0c05fc348a499b2b524722aba165dc421324 100644 (file)
  */
 
 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
index 571050579de8a4bb41d0041a8db732a24ecbe075..cc4144f0ccb1f9c63c628236c1f8cf19e68450dd 100644 (file)
@@ -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,