diff --git a/gulpfile.js b/gulpfile.js index ae853a534..d728a93d6 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -99,6 +99,7 @@ const refactoredSrc = [ const globalSrc = [ "./src/js/global-dependencies.js", "./src/js/simple-popups.js", + "./src/js/tribe.js", "./src/js/words.js", "./src/js/userconfig.js", "./src/js/commandline.js", diff --git a/package-lock.json b/package-lock.json index daa0599ab..17d62c341 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1201,6 +1201,11 @@ "fastq": "^1.6.0" } }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -1716,6 +1721,11 @@ "now-and-later": "^2.0.0" } }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1777,6 +1787,11 @@ } } }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2418,11 +2433,15 @@ "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "concat-map": { "version": "0.0.1", @@ -3008,6 +3027,41 @@ "once": "^1.4.0" } }, + "engine.io-client": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-4.0.5.tgz", + "integrity": "sha512-1lkn0QdekHQPMTcxUh8LqIuxQHNtKV5GvqkQzmZ1rYKAvB6puMm13U7K1ps3OQZ4joE46asQiAKrcdL9weNEVw==", + "requires": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.1.0", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.2.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4657,6 +4711,11 @@ } } }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -6026,8 +6085,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multimatch": { "version": "4.0.0", @@ -6592,6 +6650,16 @@ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", "dev": true }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -7690,6 +7758,51 @@ } } }, + "socket.io-client": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-3.0.4.tgz", + "integrity": "sha512-qMvBuS+W9JIN2mkfAWDCxuIt+jpIKDf8C0604zEqx1JrPaPSS6cN0F3B2GYWC83TqBeVJXW66GFxWV3KD88n0Q==", + "requires": { + "@types/component-emitter": "^1.2.10", + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "~1.3.0", + "debug": "~4.1.0", + "engine.io-client": "~4.0.0", + "parseuri": "0.0.6", + "socket.io-parser": "~4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "socket.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.2.tgz", + "integrity": "sha512-Bs3IYHDivwf+bAAuW/8xwJgIiBNtlvnjYRc4PbXgniLmcP1BrakBoq/QhO24rgtgW7VZ7uAaswRGxutUnlAK7g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.1.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -8781,6 +8894,16 @@ "mkdirp": "^0.5.1" } }, + "ws": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -8832,6 +8955,11 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" } } } diff --git a/package.json b/package.json index a1882a523..2017b3ded 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@babel/runtime": "^7.12.5", "chart.js": "^2.9.4", "chartjs-plugin-annotation": "^0.5.7", - "chartjs-plugin-trendline": "^0.2.2" + "chartjs-plugin-trendline": "^0.2.2", + "socket.io-client": "^3.0.4" } } diff --git a/src/js/exports.js b/src/js/exports.js index 8f8082626..43a47060f 100644 --- a/src/js/exports.js +++ b/src/js/exports.js @@ -7,3 +7,4 @@ global.sendVerificationEmail = Misc.sendVerificationEmail; //these exports are just for debugging in the browser global.snapshot = db_getSnapshot; global.config = config; +global.MP = MP; diff --git a/src/js/global-dependencies.js b/src/js/global-dependencies.js index 7a23021f9..a06f4d215 100644 --- a/src/js/global-dependencies.js +++ b/src/js/global-dependencies.js @@ -4,6 +4,8 @@ import Chart from "chart.js"; import chartTrendline from "chartjs-plugin-trendline"; import chartAnnotation from "chartjs-plugin-annotation"; +import io from "socket.io-client"; + Chart.plugins.register(chartTrendline); Chart.plugins.register(chartAnnotation); diff --git a/src/js/script.js b/src/js/script.js index a3eae8736..6551daa3b 100644 --- a/src/js/script.js +++ b/src/js/script.js @@ -908,12 +908,6 @@ function addWord() { } function showWords() { - //handle right-to-left languages - if (words[config.language].leftToRight) { - arrangeCharactersLeftToRight(); - } else { - arrangeCharactersRightToLeft(); - } $("#words").empty(); let wordsHTML = ""; @@ -1752,23 +1746,21 @@ function showResult(difficultyFailed = false) { wpmOverTimeChart.options.annotation.annotations = []; - if (MP.state >= 10) { - $('.pageTest #nextTestButton').addClass('hidden'); - $('.pageTest #restartTestButtonWithSameWordset').addClass('hidden'); - $('.pageTest #goBackToLobbyButton').removeClass('hidden'); - $('.pageTest #practiseMissedWordsButton').addClass('hidden'); + $(".pageTest #nextTestButton").addClass("hidden"); + $(".pageTest #restartTestButtonWithSameWordset").addClass("hidden"); + $(".pageTest #goBackToLobbyButton").removeClass("hidden"); + $(".pageTest #practiseMissedWordsButton").addClass("hidden"); if (MP.room.isLeader) { - $('.pageTest #nextTestButton').removeClass('hidden'); + $(".pageTest #nextTestButton").removeClass("hidden"); } } else { - $('.pageTest #nextTestButton').removeClass('hidden'); - $('.pageTest #restartTestButtonWithSameWordset').removeClass('hidden'); - $('.pageTest #goBackToLobbyButton').addClass('hidden'); - $('.pageTest #practiseMissedWordsButton').removeClass('hidden'); + $(".pageTest #nextTestButton").removeClass("hidden"); + $(".pageTest #restartTestButtonWithSameWordset").removeClass("hidden"); + $(".pageTest #goBackToLobbyButton").addClass("hidden"); + $(".pageTest #practiseMissedWordsButton").removeClass("hidden"); } - $("#result #resultWordsHistory").addClass("hidden"); if (config.alwaysShowDecimalPlaces) { @@ -2542,8 +2534,8 @@ function showResult(difficultyFailed = false) { consistency: completedEvent.consistency, duration: completedEvent.testDuration, invalid: testInvalid, - failed: difficultyFailed - }) + failed: difficultyFailed, + }); } if (firebase.auth().currentUser != null) { @@ -2812,7 +2804,6 @@ function startTest() { MP.room.testStats === undefined || Object.keys(MP.room.testStats) === 0 ) { - } else { Object.keys(MP.room.testStats).forEach((socketId) => { $(`.tribePlayers [socketId=${socketId}] .wpm`).text( @@ -2821,13 +2812,15 @@ function startTest() { $(`.tribePlayers [socketId=${socketId}] .acc`).text( MP.room.testStats[socketId].acc ); - $(`.tribePlayers [socketId=${socketId}] .bar`).stop(true,true).animate( - { - width: MP.room.testStats[socketId].progress + "%", - }, - 250, - "linear" - ); + $(`.tribePlayers [socketId=${socketId}] .bar`) + .stop(true, true) + .animate( + { + width: MP.room.testStats[socketId].progress + "%", + }, + 250, + "linear" + ); }); } } @@ -3112,7 +3105,7 @@ function changePage(page) { } } else if (page == "tribe") { if (MP.state === 20 || MP.state === 21) { - changePage('test'); + changePage("test"); } else { pageTransition = true; restartTest(); @@ -4437,14 +4430,12 @@ function initPractiseMissedWords() { modeBeforePractise = mode; } - $(document).on("keypress", "#goBackToLobbyButton", (event) => { - changePage('tribe'); + changePage("tribe"); }); - $(document.body).on("click", "#goBackToLobbyButton", (event) => { - changePage('tribe'); + changePage("tribe"); }); $(document).on("keypress", "#practiseMissedWordsButton", (event) => { diff --git a/static/js/tribe.js b/src/js/tribe.js similarity index 65% rename from static/js/tribe.js rename to src/js/tribe.js index 53af0d66d..571f4b2c7 100644 --- a/static/js/tribe.js +++ b/src/js/tribe.js @@ -1,8 +1,8 @@ let MP = { state: -1, - socket: io('localhost:3000', { autoConnect: false, reconnectionAttempts: 3 }), + socket: io("localhost:3000", { autoConnect: false, reconnectionAttempts: 3 }), reconnectionAttempts: 0, -} +}; //-1 - disconnected //1 - connected @@ -10,19 +10,18 @@ let MP = { //20 - test about to start //21 - test active //28 - leader finished -//29 - everybody finished +//29 - everybody finished function mp_init() { - $(".pageTribe .preloader .text").text('Connecting to Tribe'); + $(".pageTribe .preloader .text").text("Connecting to Tribe"); MP.socket.connect(); } function mp_refreshUserList() { $(".pageTribe .lobby .userlist .list").empty(); - MP.room.users.forEach(user => { - let crown = ''; + MP.room.users.forEach((user) => { + let crown = ""; if (user.isLeader) { - if (user.socketId === MP.socket.id) { MP.room.isLeader = true; } @@ -31,29 +30,29 @@ function mp_refreshUserList() { } $(".pageTribe .lobby .userlist .list").append(`
${user.name} ${crown}
- `) - }) + `); + }); } -function mp_resetLobby(){ +function mp_resetLobby() { $(".pageTribe .lobby .userlist .list").empty(); $(".pageTribe .lobby .chat .messages").empty(); - $(".pageTribe .lobby .inviteLink .code .text").text(''); - $(".pageTribe .lobby .inviteLink .link").text(''); + $(".pageTribe .lobby .inviteLink .code .text").text(""); + $(".pageTribe .lobby .inviteLink .link").text(""); } function mp_applyRoomConfig(cfg) { - changeMode(cfg.mode, true, true); + setMode(cfg.mode, true, true); if (cfg.mode === "time") { - changeTimeConfig(cfg.mode2, true, true); + setTimeConfig(cfg.mode2, true, true); } else if (cfg.mode === "words") { - changeWordCount(cfg.mode2, true, true); + setWordCount(cfg.mode2, true, true); } else if (cfg.mode === "quote") { - changeQuoteLength(cfg.mode2, true, true); + setQuoteLength(cfg.mode2, true, true); } setDifficulty(cfg.difficulty, true, true); setBlindMode(cfg.blindMode, true, true); - changeLanguage(cfg.language, true, true); + setLanguage(cfg.language, true, true); activateFunbox(cfg.funbox, true, true); setStopOnError(cfg.stopOnError, true, true); setConfidenceMode(cfg.confidenceMode, true, true); @@ -62,13 +61,13 @@ function mp_applyRoomConfig(cfg) { function mp_checkIfCanChangeConfig(mp) { if (MP.state >= 10) { if (MP.state >= 20) { - showNotification("You can't change settings during the test", 3000); + Misc.showNotification("You can't change settings during the test", 3000); return false; - }else if (MP.room.isLeader) { + } else if (MP.room.isLeader) { return true; } else { if (mp) return true; - showNotification("Only the leader can change this setting", 3000); + Misc.showNotification("Only the leader can change this setting", 3000); return false; } } else { @@ -94,15 +93,16 @@ function mp_syncConfig() { language: config.language, funbox: activeFunBox, stopOnError: config.stopOnError, - confidenceMode: config.confidenceMode - }}); + confidenceMode: config.confidenceMode, + }, + }); } function mp_joinRoomByCode(code) { code = "room_" + code; MP.socket.emit("mp_room_join", { roomId: code }); - $(".pageTribe .prelobby #joinByCode input").val(''); - + $(".pageTribe .prelobby #joinByCode input").val(""); + $(".pageTribe .prelobby #joinByCode .customInput").html(` -- / @@ -110,31 +110,32 @@ function mp_joinRoomByCode(code) { / -- `); - } function mp_startTest() { - MP.socket.emit('mp_room_test_start'); + MP.socket.emit("mp_room_test_start"); } function mp_sendTestProgress(wpm, acc, progress) { - MP.socket.emit('mp_room_test_progress_update', { - socketId: MP.socket.id, - roomId: MP.room.id, - stats: { - wpm: wpm, - acc: acc, - progress: progress - } - }) + if (MP.state > 20) { + MP.socket.emit("mp_room_test_progress_update", { + socketId: MP.socket.id, + roomId: MP.room.id, + stats: { + wpm: wpm, + acc: acc, + progress: progress, + }, + }); + } } function mp_refreshTestUserList() { $(".tribePlayers").empty(); - MP.room.users.forEach(user => { - let me = ''; + MP.room.users.forEach((user) => { + let me = ""; if (user.socketId === MP.socket.id) { - me = ' me'; + me = " me"; } $(".tribePlayers").append(` @@ -149,9 +150,9 @@ function mp_refreshTestUserList() {
-
- `) - }) - $(".tribePlayers").removeClass('hidden'); + `); + }); + $(".tribePlayers").removeClass("hidden"); } function mp_refreshConfig() { @@ -163,7 +164,7 @@ function mp_refreshConfig() { ${MP.room.config.mode} `); - + if (MP.room.config.mode === "time") { $(".pageTribe .lobby .currentSettings .groups").append(`
@@ -177,13 +178,12 @@ function mp_refreshConfig() {
`); } else if (MP.room.config.mode === "quote") { - let qstring = "all"; let num = MP.room.config.mode2; if (num == 0) { qstring = "short"; } else if (num == 1) { - qstring = "medium"; + qstring = "medium"; } else if (num == 2) { qstring = "long"; } else if (num == 3) { @@ -196,7 +196,7 @@ function mp_refreshConfig() { `); } - + $(".pageTribe .lobby .currentSettings .groups").append(`
${MP.room.config.language} @@ -215,7 +215,7 @@ function mp_refreshConfig() { expert
`); - } else if (MP.room.config.difficulty === "master"){ + } else if (MP.room.config.difficulty === "master") { $(".pageTribe .lobby .currentSettings .groups").append(`
master @@ -255,7 +255,7 @@ function mp_refreshConfig() { confidence
`); - } else if (MP.room.config.confidenceMode === "max"){ + } else if (MP.room.config.confidenceMode === "max") { $(".pageTribe .lobby .currentSettings .groups").append(`
max @@ -276,51 +276,50 @@ function mp_refreshConfig() {
`); } - } function mp_testFinished(result) { - MP.socket.emit('mp_room_test_finished', {result: result}) + MP.socket.emit("mp_room_test_finished", { result: result }); } -MP.socket.on('connect', (f) => { +MP.socket.on("connect", (f) => { MP.state = 1; MP.reconnectionAttempts = 0; - showNotification('Connected to Tribe', 1000); + Misc.showNotification("Connected to Tribe", 1000); let name = "Guest"; if (firebase.auth().currentUser !== null) { - name = firebase.auth().currentUser.displayName + name = firebase.auth().currentUser.displayName; } MP.id = MP.socket.id; MP.name = name; MP.socket.emit("mp_system_name_set", { name: name }); - $(".pageTribe .lobby div").removeClass('hidden'); - $(".pageTribe .prelobby div").removeClass('hidden'); + $(".pageTribe .lobby div").removeClass("hidden"); + $(".pageTribe .prelobby div").removeClass("hidden"); setTimeout(() => { - if (MP.autoJoin) { - MP.socket.emit("mp_room_join", { roomId: MP.autoJoin }); - MP.autoJoin = undefined; - swapElements($(".pageTribe .preloader"), $(".pageTribe .lobby"), 250); - } else { - swapElements($(".pageTribe .preloader"), $(".pageTribe .prelobby"), 250); + if (MP.autoJoin) { + MP.socket.emit("mp_room_join", { roomId: MP.autoJoin }); + MP.autoJoin = undefined; + swapElements($(".pageTribe .preloader"), $(".pageTribe .lobby"), 250); + } else { + swapElements($(".pageTribe .preloader"), $(".pageTribe .prelobby"), 250); } - },250) -}) + }, 250); +}); -MP.socket.on('disconnect', (f) => { +MP.socket.on("disconnect", (f) => { MP.state = -1; MP.room = undefined; - showNotification('Disconnected from Tribe', 1000); + Misc.showNotification("Disconnected from Tribe", 1000); mp_resetLobby(); $(".pageTribe div").addClass("hidden"); - $('.pageTribe .preloader').removeClass('hidden').css('opacity',1); + $(".pageTribe .preloader").removeClass("hidden").css("opacity", 1); $(".pageTribe .preloader").html(`
Disconnected from tribe
`); -}) +}); -MP.socket.on('connect_failed', (f) => { +MP.socket.on("connect_failed", (f) => { MP.state = -1; MP.reconnectionAttempts++; if (MP.reconnectionAttempts === 4) { @@ -329,11 +328,11 @@ MP.socket.on('connect_failed', (f) => {
Connection failed.
`); } else { - $(".pageTribe .preloader .text").text('Connection failed. Retrying'); + $(".pageTribe .preloader .text").text("Connection failed. Retrying"); } -}) +}); -MP.socket.on('connect_error', (f) => { +MP.socket.on("connect_error", (f) => { MP.state = -1; MP.reconnectionAttempts++; console.error(f); @@ -343,59 +342,63 @@ MP.socket.on('connect_error', (f) => {
Connection failed
`); } else { - $(".pageTribe .preloader .text").text('Connection error. Retrying'); - showNotification('Tribe connection error: ' + f.message, 3000); + $(".pageTribe .preloader .text").text("Connection error. Retrying"); + Misc.showNotification("Tribe connection error: " + f.message, 3000); } -}) +}); -MP.socket.on('mp_room_joined', data => { +MP.socket.on("mp_room_joined", (data) => { MP.room = data.room; - if (MP.room.users.filter(user => user.socketId === MP.socket.id)[0].isLeader) { + if ( + MP.room.users.filter((user) => user.socketId === MP.socket.id)[0].isLeader + ) { MP.room.isLeader = true; } mp_refreshUserList(); if (MP.state === 10) { //user is already in the room and somebody joined - } else if(MP.state === 1) { + } else if (MP.state === 1) { //user is in prelobby and joined a room mp_applyRoomConfig(MP.room.config); mp_refreshConfig(); let link = "www.monkeytype.com/tribe" + MP.room.id.substring(4); - $(".pageTribe .lobby .inviteLink .code .text").text(MP.room.id.substring(5)); + $(".pageTribe .lobby .inviteLink .code .text").text( + MP.room.id.substring(5) + ); $(".pageTribe .lobby .inviteLink .link").text(link); swapElements($(".pageTribe .prelobby"), $(".pageTribe .lobby"), 250, () => { MP.state = 10; // $(".pageTribe .prelobby").addClass('hidden'); }); if (MP.room.isLeader) { - $(".pageTribe .lobby .startTestButton").removeClass('hidden'); + $(".pageTribe .lobby .startTestButton").removeClass("hidden"); } else { - $(".pageTribe .lobby .startTestButton").addClass('hidden'); + $(".pageTribe .lobby .startTestButton").addClass("hidden"); } } -}) +}); -MP.socket.on('mp_room_leave', () => { +MP.socket.on("mp_room_leave", () => { MP.state = 1; MP.room = undefined; mp_resetLobby(); - swapElements($('.pageTribe .lobby'), $(".pageTribe .prelobby"), 250); -}) + swapElements($(".pageTribe .lobby"), $(".pageTribe .prelobby"), 250); +}); -MP.socket.on('mp_room_user_left', data => { +MP.socket.on("mp_room_user_left", (data) => { MP.room = data.room; mp_refreshUserList(); -}) +}); -MP.socket.on('mp_room_config_update', data => { +MP.socket.on("mp_room_config_update", (data) => { MP.room.config = data.newConfig; mp_refreshConfig(); - if(!MP.room.isLeader) mp_applyRoomConfig(MP.room.config); -}) + if (!MP.room.isLeader) mp_applyRoomConfig(MP.room.config); +}); -MP.socket.on('mp_chat_message', data => { +MP.socket.on("mp_chat_message", (data) => { let cls = "message"; - let author = ''; + let author = ""; if (data.isSystem) { cls = "systemMessage"; } else { @@ -405,58 +408,71 @@ MP.socket.on('mp_chat_message', data => {
${author}${data.message}
`); let chatEl = $(".pageTribe .lobby .chat .messages"); - chatEl.animate({ scrollTop: $($(".pageTribe .lobby .chat .message")[0]).outerHeight() * 2 * $(".pageTribe .lobby .chat .messages .message").length }, 0); -}) + chatEl.animate( + { + scrollTop: + $($(".pageTribe .lobby .chat .message")[0]).outerHeight() * + 2 * + $(".pageTribe .lobby .chat .messages .message").length, + }, + 0 + ); +}); -MP.socket.on('mp_system_message', data => { - showNotification(`Tribe: ${data.message}`,2000); -}) +MP.socket.on("mp_system_message", (data) => { + Misc.showNotification(`Tribe: ${data.message}`, 2000); +}); -MP.socket.on('mp_room_test_start', data => { +MP.socket.on("mp_room_test_start", (data) => { // changePage(''); // mp_testCountdown(); startTest(); - showNotification('test starting'); -}) + Misc.showNotification("test starting"); +}); -MP.socket.on('mp_room_test_countdown', data => { - showNotification(`countdown ${data.val}`); -}) +MP.socket.on("mp_room_test_countdown", (data) => { + Misc.showNotification(`countdown ${data.val}`); +}); -MP.socket.on('mp_room_test_init', data => { +MP.socket.on("mp_room_test_init", (data) => { MP.room.testStats = {}; Math.seedrandom(data.seed); mp_refreshTestUserList(); - changePage(''); + changePage(""); restartTest(false, true, true); -}) +}); -MP.socket.on('mp_room_state_update', data => { +MP.socket.on("mp_room_state_update", (data) => { MP.state = data.newState; console.log(`state changed to ${data.newState}`); -}) +}); -MP.socket.on('mp_room_test_progress_update', data => { +MP.socket.on("mp_room_test_progress_update", (data) => { if (data.length === 0) return; MP.room.testStats = data.stats; if (data.instant) { - Object.keys(data.stats).forEach(socketId => { - $(`.tribePlayers [socketId=${socketId}] .wpm`).text(data.stats[socketId].wpm); - $(`.tribePlayers [socketId=${socketId}] .acc`).text(data.stats[socketId].acc); - $(`.tribePlayers [socketId=${socketId}] .bar`).animate({ - "width": - data.stats[socketId].progress + "%" - }, 1000, "linear"); - }) + Object.keys(data.stats).forEach((socketId) => { + $(`.tribePlayers [socketId=${socketId}] .wpm`).text( + data.stats[socketId].wpm + ); + $(`.tribePlayers [socketId=${socketId}] .acc`).text( + data.stats[socketId].acc + ); + $(`.tribePlayers [socketId=${socketId}] .bar`).animate( + { + width: data.stats[socketId].progress + "%", + }, + 1000, + "linear" + ); + }); } -}) +}); - - -$(".pageTribe #createPrivateRoom").click(f => { +$(".pageTribe #createPrivateRoom").click((f) => { activateFunbox("none"); - changeLanguage("english"); - changeMode("quote"); + setLanguage("english"); + setMode("quote"); let mode2; if (config.mode === "time") { mode2 = config.time; @@ -474,72 +490,73 @@ $(".pageTribe #createPrivateRoom").click(f => { language: config.language, funbox: activeFunBox, stopOnError: config.stopOnError, - confidenceMode: config.confidenceMode - } + confidenceMode: config.confidenceMode, + }, }); -}) +}); -$(".pageTribe .lobby .chat .input input").keyup(e => { +$(".pageTribe .lobby .chat .input input").keyup((e) => { if (e.keyCode === 13) { let msg = $(".pageTribe .lobby .chat .input input").val(); - MP.socket.emit('mp_chat_message', - { - isSystem: false, - message: msg, - from: { - id: MP.socket.id, - name: MP.name - } - }); - $(".pageTribe .lobby .chat .input input").val(''); + MP.socket.emit("mp_chat_message", { + isSystem: false, + message: msg, + from: { + id: MP.socket.id, + name: MP.name, + }, + }); + $(".pageTribe .lobby .chat .input input").val(""); } -}) +}); -$(".pageTribe .lobby .inviteLink .text").click(async e => { +$(".pageTribe .lobby .inviteLink .text").click(async (e) => { try { await navigator.clipboard.writeText( $(".pageTribe .lobby .inviteLink .text").text() ); - showNotification("Code copied", 1000); + Misc.showNotification("Code copied", 1000); } catch (e) { - showNotification("Could not copy to clipboard: " + e, 5000); + Misc.showNotification("Could not copy to clipboard: " + e, 5000); } -}) +}); -$(".pageTribe .lobby .inviteLink .link").click(async e => { +$(".pageTribe .lobby .inviteLink .link").click(async (e) => { try { await navigator.clipboard.writeText( $(".pageTribe .lobby .inviteLink .link").text() ); - showNotification("Link copied", 1000); + Misc.showNotification("Link copied", 1000); } catch (e) { - showNotification("Could not copy to clipboard: " + e, 5000); + Misc.showNotification("Could not copy to clipboard: " + e, 5000); } -}) +}); -$(".pageTribe .prelobby #joinByCode .customInput").click(e => { +$(".pageTribe .prelobby #joinByCode .customInput").click((e) => { $(".pageTribe .prelobby #joinByCode input").focus(); -}) +}); -$(".pageTribe .prelobby #joinByCode input").focus(e => { - $(".pageTribe .prelobby #joinByCode .customInput .byte").addClass('focused'); -}) +$(".pageTribe .prelobby #joinByCode input").focus((e) => { + $(".pageTribe .prelobby #joinByCode .customInput .byte").addClass("focused"); +}); -$(".pageTribe .prelobby #joinByCode input").focusout(e => { - $(".pageTribe .prelobby #joinByCode .customInput .byte").removeClass('focused'); -}) +$(".pageTribe .prelobby #joinByCode input").focusout((e) => { + $(".pageTribe .prelobby #joinByCode .customInput .byte").removeClass( + "focused" + ); +}); -$(".pageTribe .prelobby #joinByCode .button").click(e => { +$(".pageTribe .prelobby #joinByCode .button").click((e) => { let code = $(".pageTribe .prelobby #joinByCode input").val(); if (code.length !== 6) { - showNotification("Code required", 2000); + Misc.showNotification("Code required", 2000); } else { mp_joinRoomByCode(code); } -}) +}); -$(".pageTribe .prelobby #joinByCode input").keyup(e => { - setTimeout(t => { +$(".pageTribe .prelobby #joinByCode input").keyup((e) => { + setTimeout((t) => { // let t1 = "xx"; // let t2 = "xx"; // let t2 = "xx"; @@ -552,20 +569,26 @@ $(".pageTribe .prelobby #joinByCode input").keyup(e => { // } let code = []; for (let i = 0; i < 6; i++) { - let char = v[i] == undefined ? '-' : v[i]; + let char = v[i] == undefined ? "-" : v[i]; code.push(char); } - let text = code.join(''); - $($(".pageTribe .prelobby #joinByCode .customInput .byte")[0]).text(text.substring(0,2)); - $($(".pageTribe .prelobby #joinByCode .customInput .byte")[1]).text(text.substring(2,4)); - $($(".pageTribe .prelobby #joinByCode .customInput .byte")[2]).text(text.substring(4,6)); - },0) -}) + let text = code.join(""); + $($(".pageTribe .prelobby #joinByCode .customInput .byte")[0]).text( + text.substring(0, 2) + ); + $($(".pageTribe .prelobby #joinByCode .customInput .byte")[1]).text( + text.substring(2, 4) + ); + $($(".pageTribe .prelobby #joinByCode .customInput .byte")[2]).text( + text.substring(4, 6) + ); + }, 0); +}); -$(".pageTribe .lobby .lobbyButtons .leaveRoomButton").click(e => { - MP.socket.emit('mp_room_leave'); -}) +$(".pageTribe .lobby .lobbyButtons .leaveRoomButton").click((e) => { + MP.socket.emit("mp_room_leave"); +}); -$(".pageTribe .lobby .lobbyButtons .startTestButton").click(e => { +$(".pageTribe .lobby .lobbyButtons .startTestButton").click((e) => { mp_startTest(); -}) +});