From d58717fab2e6e9af954d370e54b1e6c9fc38fe10 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Jakse?= Date: Sun, 5 Apr 2020 15:49:48 +0200 Subject: [PATCH] Linting: let it be --- .eslintrc.json | 11 ++- trivabble-server.js | 127 +++++++++++++------------ trivabble.js | 221 +++++++++++++++++++++++--------------------- 3 files changed, 189 insertions(+), 170 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index ebc72cf..988e72a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -115,7 +115,7 @@ "max-nested-callbacks": "error", "max-params": "error", "max-statements": "off", - "max-statements-per-line": "off", + "max-statements-per-line": "error", "multiline-comment-style": "off", "new-cap": "error", "new-parens": "error", @@ -221,7 +221,7 @@ "no-useless-constructor": "error", "no-useless-rename": "error", "no-useless-return": "error", - "no-var": "off", + "no-var": "error", "no-void": "error", "no-warning-comments": "off", "no-whitespace-before-property": "error", @@ -232,8 +232,11 @@ "never" ], "object-shorthand": "off", - "one-var": "off", - "one-var-declaration-per-line": "off", + "one-var": [ + "error", + "never" + ], + "one-var-declaration-per-line": "error", "operator-assignment": [ "error", "always" diff --git a/trivabble-server.js b/trivabble-server.js index b3c88f1..25bfb3d 100644 --- a/trivabble-server.js +++ b/trivabble-server.js @@ -42,12 +42,12 @@ if (DEV_ENABLE_SERVING_FILES) { console.log("DEV_ENABLE_SERVING_FILES: Serving files in the current directory. Please never do this on a production server, this is for development purposes only."); } -var debuglog = DEBUG_LOG ? console.log.bind(console) : () => null; +const debuglog = DEBUG_LOG ? console.log.bind(console) : () => null; -var http = require("http"); -var fs = require("fs"); +const http = require("http"); +const fs = require("fs"); -var frBag = [ +const frBag = [ " ", " ", // Jokers "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "E", "A", "A", "A", "A", "A", "A", "A", "A", "A", @@ -77,7 +77,7 @@ var frBag = [ "Z" ]; -var frValues = { +const frValues = { " ": 0, "E": 1, "A": 1, @@ -108,11 +108,11 @@ var frValues = { }; -var games = {}; -var dateNow = 0; +const games = {}; +let dateNow = 0; -var saveTimeout = null; -var running = true; +let saveTimeout = null; +let running = true; function saveGames(exit) { fs.writeFile("games.backup.json", JSON.stringify(games), function (err) { @@ -189,9 +189,9 @@ function keepAlive(responseAndIsES) { } function newBoard() { - var res = new Array(15 * 15); + const res = new Array(15 * 15); - for (var i = 0; i < 15 * 15; i++) { + for (let i = 0; i < 15 * 15; i++) { res[i] = ""; } @@ -219,7 +219,7 @@ Game.prototype.toJSON = function () { }; Game.fromJSON = function (obj) { - var game = new Game(); + const game = new Game(); game.board = obj.board || newBoard(); game.bag = obj.bag || frBag.slice(); game.remainingLetters = obj.remainingLetters || game.bag.length; @@ -230,17 +230,17 @@ Game.fromJSON = function (obj) { }; Game.prototype.getPlayerRack = function (player) { - var playerID = "#" + player; + const playerID = "#" + player; return (this.racks[playerID] || (this.racks[playerID] = [])); }; Game.prototype.getPlayerScore = function (player) { - var playerID = "#" + player; + const playerID = "#" + player; return (this.scores[playerID] || (this.scores[playerID] = 0)); }; Game.prototype.setPlayerScore = function (player, score) { - var playerID = "#" + player; + const playerID = "#" + player; if (!Object.prototype.hasOwnProperty.call(this.racks, playerID) || typeof score !== "number") { return; @@ -264,9 +264,9 @@ Game.prototype.playerJoined = function (playerName) { this.getPlayerRack(playerName); // Create the player's rack } - var players = []; + const players = []; - for (var player in this.racks) { + for (let player in this.racks) { if (Object.prototype.hasOwnProperty.call(this.racks, player)) { player = player.slice(1); // '#' players.push({ @@ -284,12 +284,12 @@ Game.prototype.playerJoined = function (playerName) { }; Game.prototype.addListeningPlayer = function (playerName, responseAndIsES) { - var that = this; + const that = this; that.listeningPlayers.push(responseAndIsES); keepAlive(responseAndIsES); - var closed = false; + let closed = false; function close () { if (closed) { @@ -299,7 +299,7 @@ Game.prototype.addListeningPlayer = function (playerName, responseAndIsES) { closed = true; stopKeepAlive(responseAndIsES); - var index = that.listeningPlayers.indexOf(responseAndIsES); + const index = that.listeningPlayers.indexOf(responseAndIsES); if (index !== -1) { that.listeningPlayers[index] = that.listeningPlayers[that.listeningPlayers.length - 1]; that.listeningPlayers.pop(); @@ -315,11 +315,11 @@ Game.prototype.addListeningPlayer = function (playerName, responseAndIsES) { }; Game.prototype.commit = function () { - var pendingEvents = this.pendingEvents; + const pendingEvents = this.pendingEvents; this.pendingEvents = []; - var msg = JSON.stringify(pendingEvents); + const msg = JSON.stringify(pendingEvents); - for (var i = 0; i < this.listeningPlayers.length; i++) { + for (let i = 0; i < this.listeningPlayers.length; i++) { while (i < this.listeningPlayers.length && !this.listeningPlayers[i]) { this.listeningPlayers[i] = this.listeningPlayers[this.listeningPlayers.length - 1]; this.listeningPlayers.pop(); @@ -337,8 +337,8 @@ Game.prototype.commit = function () { Game.prototype.bagPopLetter = function (player) { if (this.remainingLetters) { - var letter = ""; - var index; + let letter = ""; + let index; while (letter === "") { index = Math.floor(Math.random() * this.bag.length); @@ -379,7 +379,7 @@ Game.prototype.setCell = function (index, letter, player) { Game.prototype.bagPushLetter = function (letter, player) { if (letter) { - var index = 0; + let index = 0; while (this.bag[index] !== "") { index++; @@ -415,10 +415,10 @@ Game.prototype.reset = function (player) { }; function newGameId() { - var number; + let number; - var k = 10000; - var retries = 0; + let k = 10000; + let retries = 0; do { number = Math.floor(Math.random() * k).toString(); @@ -435,9 +435,9 @@ function newGameId() { } function countTiles(rack) { - var count = 0; + let count = 0; - for (var i = 0; i < rack.length; i++) { + for (let i = 0; i < rack.length; i++) { if (rack[i]) { count++; } @@ -459,15 +459,15 @@ function joinGame(gameNumber, playerName) { } function handleCommand(cmd, gameNumber, playerName, response) { - var game; + let game; ({gameNumber, game} = joinGame(gameNumber, playerName)); game.lastUpdated = new Date(); - var rack = null; + let rack = null; switch (cmd.cmd) { - case "joinGame": + case "joinGame": { response.write( JSON.stringify({ "error": 0, @@ -482,12 +482,14 @@ function handleCommand(cmd, gameNumber, playerName, response) { }) ); break; + } - case "hello": + case "hello": { game.playerJoined(playerName); break; + } - case "sync": + case "sync": { response.write( JSON.stringify({ "error":0, @@ -502,14 +504,16 @@ function handleCommand(cmd, gameNumber, playerName, response) { }) ); break; + } - case "score": + case "score": { game.setPlayerScore(cmd.player, cmd.score); response.write("{\"error\":0}"); break; + } - case "moveLetter": - var letter = ""; + case "moveLetter": { + let letter = ""; switch (cmd.from) { case "rack": @@ -602,14 +606,15 @@ function handleCommand(cmd, gameNumber, playerName, response) { }); } break; + } - case "setRack": + case "setRack": { cmd.rack.length = 8; rack = game.getPlayerRack(playerName); - var initialRackCount = countTiles(rack); - var rackCount = countTiles(cmd.rack); + const initialRackCount = countTiles(rack); + const rackCount = countTiles(cmd.rack); debuglog(rack, cmd.rack); @@ -625,13 +630,12 @@ function handleCommand(cmd, gameNumber, playerName, response) { break; } - var oldRack = rack.slice(); - + const oldRack = rack.slice(); for (let i = 0; i < 8; i++) { cmd.rack[i] = (cmd.rack[i] || "")[0] || ""; if (cmd.rack[i]) { - var indexLetter = oldRack.indexOf(cmd.rack[i]); + const indexLetter = oldRack.indexOf(cmd.rack[i]); if (indexLetter === -1) { response.write( @@ -661,12 +665,15 @@ function handleCommand(cmd, gameNumber, playerName, response) { ); break; - case "resetGame": + } + + case "resetGame": { game.reset(); response.write("{\"error\":0}"); break; + } - case "msg": + case "msg": { game.pendingEvents.push({ msg: { sender: playerName, @@ -676,16 +683,18 @@ function handleCommand(cmd, gameNumber, playerName, response) { }); response.write("{\"error\":0}"); break; + } - default: + default: { response.write("{\"error\":1,\"reason\":\"Unknown command\"}"); break; + } } } function handleCommands(cmds, responseAndIsES) { if (!cmds.cmds || !cmds.cmds.length) { - var {gameNumber, game} = joinGame(cmds.gameNumber, cmds.playerName); + const {gameNumber, game} = joinGame(cmds.gameNumber, cmds.playerName); writeResponse(responseAndIsES, JSON.stringify({ @@ -703,11 +712,11 @@ function handleCommands(cmds, responseAndIsES) { return; } - var response = responseAndIsES[0]; + const response = responseAndIsES[0]; response.write("["); - for (var i = 0; i < cmds.cmds.length; i++) { + for (let i = 0; i < cmds.cmds.length; i++) { if (i) { response.write(","); } @@ -723,8 +732,8 @@ function handleCommands(cmds, responseAndIsES) { } function handleRequest(request, response) { - var post = ""; - var responseAndIsES = [response, false]; + let post = ""; + const responseAndIsES = [response, false]; response.on("error", function connectionError(e) { console.error("An error occurred while trying to write on a socket", e); @@ -765,8 +774,8 @@ function handleRequest(request, response) { response.end(err); } - var mime = "application/xhtml+xml; charset=utf-8"; - var mimes = { + let mime = "application/xhtml+xml; charset=utf-8"; + const mimes = { ".mp3": "audio/mpeg", ".ogg": "audio/ogg", ".js": "application/javascript; charset=utf-8", @@ -774,7 +783,7 @@ function handleRequest(request, response) { ".svg": "image/svg+xml" }; - for (var i in mimes) { + for (const i in mimes) { if (request.url.endsWith(i)) { mime = mimes[i]; break; @@ -793,7 +802,7 @@ function handleRequest(request, response) { return; } - var eventSourceMatch = request.url.match(/\/:[^/]+\/sse\/(?[\s\S]+)$/u); + const eventSourceMatch = request.url.match(/\/:[^/]+\/sse\/(?[\s\S]+)$/u); if (eventSourceMatch) { response.setHeader("Content-Type", "text/event-stream"); @@ -815,9 +824,9 @@ fs.readFile("games.backup.json", function (err, data) { if (err) { console.error("WARNING: Could not restore previous backup of the games"); } else { - var backup = JSON.parse(data); + const backup = JSON.parse(data); - for (var gameNumber in backup) { + for (const gameNumber in backup) { if (Object.prototype.hasOwnProperty.call(backup, gameNumber)) { games[gameNumber] = Game.fromJSON(backup[gameNumber]); } diff --git a/trivabble.js b/trivabble.js index 1cfd57c..7f14c86 100644 --- a/trivabble.js +++ b/trivabble.js @@ -27,61 +27,70 @@ (function () { "use strict"; - var VERSION = 202004041733; - var POLLING_DELAY = 2000; + const VERSION = 202004041733; + const POLLING_DELAY = 2000; - var _ = (window.libD && libD.l10n) ? libD.l10n() : function (s) {return s;}; + const _ = (window.libD && libD.l10n) ? libD.l10n() : function (s) {return s;}; - var trivabble = window.trivabble = {l10n: _}; + const trivabble = window.trivabble = {l10n: _}; function format(s, v) { return s.replace("{0}", v); } - var board, rack, boardCells = [], scoreOf, bag; + let board; + let rack; + const boardCells = []; + let scoreOf; + let bag; - var playerLetters = []; + const playerLetters = []; - var audioNotification, audioChat; - var chatMessages, helpBag, helpClear; + let audioNotification; + let audioChat; + let chatMessages; + let helpBag; + let helpClear; - var tablePlayers = {}; - var participantPlaceholder, participants, name; + let tablePlayers = {}; + let participantPlaceholder; + let participants; + let name; - var lastDate = 0; + let lastDate = 0; - var blockMove = 0; - var needsRestart = false; - var gameInProgress = false; + let blockMove = 0; + let needsRestart = false; + const gameInProgress = false; - var eventSource = null; - var blockEventSourceAutoRetry = false; - var connectionLostMessage = null; - var boundEventShowConnectionLost = false; + let eventSource = null; + let blockEventSourceAutoRetry = false; + let connectionLostMessage = null; + let boundEventShowConnectionLost = false; function mouseDown(ele, fun, stop) { - var meth = stop ? "removeEventListener" : "addEventListener"; + const meth = stop ? "removeEventListener" : "addEventListener"; ele[meth]("mousedown", fun, false); } function mouseUp(ele, fun, stop) { - var meth = stop ? "removeEventListener" : "addEventListener"; + const meth = stop ? "removeEventListener" : "addEventListener"; ele[meth]("mouseup", fun, false); } function mouseMove(ele, fun, stop) { - var meth = stop ? "removeEventListener" : "addEventListener"; + const meth = stop ? "removeEventListener" : "addEventListener"; ele[meth]("mousemove", fun, false); } function setRack(rack) { - for (var i = 0; i < 7; i++) { + for (let i = 0; i < 7; i++) { setTileParent(playerLetters[i], rack[i] || ""); } } function getFreeRackSpaceIndex() { - for (var i = 0; i < 7; i++) { + for (let i = 0; i < 7; i++) { if (!playerLetters[i].getElementsByClassName("tile")[0]) { return i; } @@ -94,7 +103,7 @@ unbindEventsShowConnectionLost(); if (!connectionLostMessage) { - connectionLostMessage = chatMessage("", _("Whoops, there is a problem. We are trying to fix it as soon as possible. Please wait a few seconds. If it persists, please contact the person who is able to fix the problem.")) + connectionLostMessage = chatMessage("", _("Whoops, there is a problem. We are trying to fix it as soon as possible. Please wait a few seconds. If it persists, please contact the person who is able to fix the problem.")); connectionLostMessage.classList.add("error"); } } @@ -128,18 +137,18 @@ } } - var tileInitCoords = null; - var tileInitMouseCoords = null; - var tileDest = null; - var tileInitDest = null; - var movingTile = null; - var rackBCR = null; - var boardBCR = null; - var bagBCR = null; - var moveCMD = null; + let tileInitCoords = null; + let tileInitMouseCoords = null; + let tileDest = null; + let tileInitDest = null; + let movingTile = null; + let rackBCR = null; + let boardBCR = null; + let bagBCR = null; + let moveCMD = null; function getLetter(l) { - var tile = l.getElementsByClassName("tile")[0]; + const tile = l.getElementsByClassName("tile")[0]; if (!tile) { return ""; } @@ -175,15 +184,12 @@ tileDest.appendChild(movingTile); if (isParentOf(board, tileDest)) { - var tiles = [].slice.call(board.getElementsByClassName("tile-highlight")); - var len = tiles.length; - - for (var i = 0; i < len; i++) { - tiles[i].classList.remove("tile-highlight"); + for (const tile of board.getElementsByClassName("tile-highlight")) { + tile.classList.remove("tile-highlight"); } } } else if (tileInitDest.getElementsByClassName("tile")[0]) { - for (var i = 0; i < 7; i++) { + for (let i = 0; i < 7; i++) { if (!playerLetters[i].getElementsByClassName("tile")[0]) { playerLetters[i].appendChild(movingTile); break; @@ -196,7 +202,7 @@ if (tileDest) { tileDest.classList.remove("tile-target"); - var moveRack = { + const moveRack = { cmd: "setRack", rack: [ getLetter(playerLetters[0]), @@ -228,13 +234,13 @@ } function dragTileMove(e) { - var newLeft = (tileInitCoords.left + (e.clientX - tileInitMouseCoords.clientX)); - var newTop = (tileInitCoords.top + (e.clientY - tileInitMouseCoords.clientY)); + let newLeft = (tileInitCoords.left + (e.clientX - tileInitMouseCoords.clientX)); + let newTop = (tileInitCoords.top + (e.clientY - tileInitMouseCoords.clientY)); movingTile.style.left = (newLeft + window.scrollX) + "px"; movingTile.style.top = (newTop + window.scrollY) + "px"; - var newDest = null; + let newDest = null; newTop += tileInitCoords.height / 2; newLeft += tileInitCoords.width / 2; @@ -243,16 +249,16 @@ (newTop > boardBCR.top && newTop < (boardBCR.top + boardBCR.height)) && (newLeft > boardBCR.left && newLeft < (boardBCR.left + boardBCR.width)) ) { - var rowIndex = Math.floor( + const rowIndex = Math.floor( ( (newTop - boardBCR.top) / boardBCR.height ) * board.rows.length ); if (rowIndex > 0 && rowIndex < board.rows.length - 1) { - var row = board.rows[rowIndex]; + const row = board.rows[rowIndex]; - var colIndex = Math.floor( + const colIndex = Math.floor( ( (newLeft - boardBCR.left) / boardBCR.width ) * row.cells.length @@ -275,7 +281,7 @@ (newTop > rackBCR.top && newTop < (rackBCR.top + rackBCR.height)) && (newLeft > rackBCR.left && newLeft < (rackBCR.left + rackBCR.width)) ) { - var index = Math.floor( + const index = Math.floor( ( (newLeft - rackBCR.left) / rackBCR.width ) * playerLetters.length @@ -284,12 +290,13 @@ newDest = playerLetters[index]; if (newDest && newDest.getElementsByClassName("tile")[0]) { - var i = index + 1, tile; + let i = index + 1; +let tile; while (playerLetters[i]) { tile = playerLetters[i].getElementsByClassName("tile")[0]; if (!tile) { - var j = i; + let j = i; while (j > index) { playerLetters[j].appendChild( playerLetters[j - 1].getElementsByClassName("tile")[0] @@ -307,7 +314,7 @@ while (playerLetters[i]) { tile = playerLetters[i].getElementsByClassName("tile")[0]; if (!tile) { - var j = i; + let j = i; while (j < index) { playerLetters[j].appendChild( playerLetters[j + 1].getElementsByClassName("tile")[0] @@ -369,11 +376,12 @@ rackBCR = rack.getBoundingClientRect(); bagBCR = bag.getBoundingClientRect(); - var from, index; + let from; + let index; - var p = movingTile.parentNode; - var oldP = movingTile; - var oldOldP = null; + let p = movingTile.parentNode; + let oldP = movingTile; + let oldOldP = null; while (p) { if (p === board) { @@ -431,7 +439,7 @@ } function makeLetter(letter, highlight) { - var tile = document.createElement("span"); + const tile = document.createElement("span"); tile.className = "tile"; tile.appendChild(document.createElement("span")); tile.lastChild.className = "tile-letter"; @@ -447,7 +455,7 @@ } function setTileParent(p, letter, highlight) { - var tile = p.getElementsByClassName("tile")[0]; + let tile = p.getElementsByClassName("tile")[0]; if (tile) { if (letter) { setLetter(tile, letter, highlight); @@ -465,7 +473,7 @@ } function setBoard(board) { - for (var i = 0; i < 15 * 15; i++) { + for (let i = 0; i < 15 * 15; i++) { setCell(i, board[i]); } } @@ -500,9 +508,9 @@ ); } - var pollingServer = false; - var pollingReady = false; - var retriedImmediately = false; + let pollingServer = false; + let pollingReady = false; + let retriedImmediately = false; function forceReload(msg) { needsRestart = true; @@ -518,7 +526,6 @@ document.getElementById("panel").lastChild.textContent = _("To continue playing, click here"); } ); - throw e; } function fatalError(e) { @@ -551,7 +558,7 @@ } function chatMessage(sender, content) { - var msgDom = document.createElement("div"); + const msgDom = document.createElement("div"); msgDom.className = "msg"; @@ -582,9 +589,7 @@ function handleReceivedData(data) { if (data instanceof Array) { - for (var i = 0; i < data.length; i++) { - handleReceivedData(data[i]); - } + data.forEach(handleReceivedData); return; } @@ -616,21 +621,21 @@ participantPlaceholder = null; } - for (var i = 0; i < data.players.length; i++) { - var player = data.players[i]; - var playerName = data.players[i].player; + for (let i = 0; i < data.players.length; i++) { + const player = data.players[i]; + const playerName = data.players[i].player; if (!tablePlayers[playerName]) { - var before = null; + let before = null; - for (var j = 1; j < participants.rows.length; j++) { + for (let j = 1; j < participants.rows.length; j++) { if (playerName < participants.rows[j].cells[0].textContent) { before = participants.rows[j]; break; } } - var row = document.createElement("tr"); + const row = document.createElement("tr"); participants.insertBefore(row, before); row.appendChild(document.createElement("td")); row.lastChild.textContent = playerName; @@ -670,13 +675,13 @@ } if (Object.prototype.hasOwnProperty.call(player, "score")) { - var scoreCell = tablePlayers[playerName].childNodes[2]; + const scoreCell = tablePlayers[playerName].childNodes[2]; scoreCell.textContent = player.score; blink(scoreCell); } if (Object.prototype.hasOwnProperty.call(player, "rackCount")) { - var countCell = tablePlayers[playerName].childNodes[1]; + const countCell = tablePlayers[playerName].childNodes[1]; countCell.textContent = player.rackCount; blink(countCell); } @@ -808,9 +813,9 @@ return; } - var thisRequestIsPolling = false; - var currentIndex = 0; - var expectedLength = 0; + let thisRequestIsPolling = false; + let currentIndex = 0; + let expectedLength = 0; if (!data.cmds || !data.cmds.length) { if (pollingServer) { @@ -821,7 +826,7 @@ data.version = VERSION; if (window.EventSource) { - eventSource = new EventSource('/:trivabble/sse/' + JSON.stringify(data)); + eventSource = new EventSource("/:trivabble/sse/" + JSON.stringify(data)); eventSource.onopen = connectionReady; @@ -847,7 +852,7 @@ blockMove++; } - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open("POST", "/:trivabble", true); xhr.setRequestHeader("Content-Type", "text/plain"); @@ -860,7 +865,7 @@ connectionReady(); while (true) { if (!expectedLength) { - var i = currentIndex; + let i = currentIndex; while (i < xhr.responseText.length) { if ("0123456789".indexOf(xhr.responseText.charAt(i)) === -1) { expectedLength = parseInt(xhr.responseText.substring(currentIndex, i)); @@ -872,9 +877,11 @@ } if (expectedLength && (xhr.responseText.length >= currentIndex + expectedLength)) { - var end = currentIndex + expectedLength; + const end = currentIndex + expectedLength; + let msgs; + try { - var msgs = JSON.parse( + msgs = JSON.parse( xhr.responseText.substring( currentIndex, end @@ -944,7 +951,7 @@ ); } - var specialTypesText = { + const specialTypesText = { "doubleLetter" : _("Double\nLetter"), "doubleWord" : _("Double\nWord"), "tripleLetter" : _("Triple\nLetter"), @@ -979,7 +986,10 @@ sendCmds(); } - var audioTileLoaded = false, audioMsgLoaded = false, tilesSound, msgSound; + let audioTileLoaded = false; + let audioMsgLoaded = false; + let tilesSound; + let msgSound; function loadAudio() { if (!audioTileLoaded && tilesSound.checked) { @@ -1005,7 +1015,7 @@ return; } - var index = getFreeRackSpaceIndex(); + const index = getFreeRackSpaceIndex(); if (index === -1) { myAlert(_("You cannot take another tile: your rack is full.")); } else { @@ -1048,8 +1058,8 @@ function initChat() { chatMessages.style.width = chatMessages.offsetWidth + "px"; - var btn = document.getElementById("chat-btn"); - var ta = document.getElementById("chat-ta"); + const btn = document.getElementById("chat-btn"); + const ta = document.getElementById("chat-ta"); ta.onmouseup = function () { chatMessages.style.width = ta.offsetWidth + "px"; @@ -1081,10 +1091,10 @@ audioNotification.preload = "auto"; audioNotification.volume = 1; - var audioSourceOGG = document.createElement("source"); + let audioSourceOGG = document.createElement("source"); audioSourceOGG.src = "notification.ogg"; - var audioSourceMP3 = document.createElement("source"); + let audioSourceMP3 = document.createElement("source"); audioSourceMP3.src = "notification.mp3"; audioNotification.appendChild(audioSourceOGG); audioNotification.appendChild(audioSourceMP3); @@ -1144,13 +1154,11 @@ } trivabble.applyL10n = function () { - var n = document.querySelectorAll("[data-l10n]"); - - for (var i = 0, len = n.length; i < len; i++) { - if (n[i].dataset.l10n === "text-content") { - n[i].textContent = _(n[i].textContent.trim()); + for (const node of document.querySelectorAll("[data-l10n]")) { + if (node.dataset.l10n === "text-content") { + node.textContent = _(node.textContent.trim()); } else { - n[i].setAttribute(n[i].dataset.l10n, _(n[i].getAttribute(n[i].dataset.l10n))); + node.setAttribute(node.dataset.l10n, _(node.getAttribute(node.dataset.l10n))); } } @@ -1201,9 +1209,9 @@ name.textContent = localStorage.trivabblePlayerName; - var letters = "ABCDEFGHIJKLMNO"; + const letters = "ABCDEFGHIJKLMNO"; - var doubleLetter = { + const doubleLetter = { "0,3" : true, "0,11": true, "2,6" : true, @@ -1217,23 +1225,23 @@ "6,12": true }; - var cell; + let cell; - for (var i = 0; i < 7; i++) { - var span = document.createElement("span"); + for (let i = 0; i < 7; i++) { + const span = document.createElement("span"); span.className = "tile-placeholder"; rack.appendChild(span); playerLetters.push(span); } - for (var i = 0; i < 15; i++) { + for (let i = 0; i < 15; i++) { board.rows[0].appendChild(document.createElement("th")); board.rows[0].lastChild.textContent = i + 1; board.appendChild(document.createElement("tr")); board.lastChild.appendChild(document.createElement("th")); board.lastChild.lastChild.textContent = letters[i]; - for (var j = 0; j < 15; j++) { + for (let j = 0; j < 15; j++) { cell = document.createElement("td"); boardCells.push(cell); board.lastChild.appendChild(cell); @@ -1265,7 +1273,7 @@ board.appendChild(document.createElement("tr")); board.lastChild.appendChild(board.rows[0].cells[0].cloneNode(false)); - for (var i = 0; i < 15; i++) { + for (let i = 0; i < 15; i++) { board.lastChild.appendChild(document.createElement("th")); board.lastChild.lastChild.textContent = i + 1; } @@ -1280,14 +1288,13 @@ } function initLang() { - var lang = localStorage.trivabbleLang || libD.lang; - libD.lang = lang; + const lang = libD.lang = localStorage.trivabbleLang || libD.lang; - var langSel = document.getElementById("select-lang"); + const langSel = document.getElementById("select-lang"); langSel.value = lang; langSel.onchange = langSelectionChange; - var script = document.createElement("script"); + const script = document.createElement("script"); script.src = "l10n/js/" + lang + ".js"; script.onerror = trivabble.l10nError; document.getElementsByTagName("head")[0].appendChild(script); -- 2.30.2