From ba1fc7748d444bfab9edac1ea723cbd3f302e90c Mon Sep 17 00:00:00 2001 From: Jack Date: Thu, 13 Aug 2020 23:11:53 +0100 Subject: [PATCH] added play sound on error --- functions/index.js | 5 ++++- public/index.html | 15 +++++++++++++++ public/js/script.js | 10 ++++++++++ public/js/settings.js | 4 ++++ public/js/userconfig.js | 11 +++++++++++ public/sound/error.wav | Bin 0 -> 12042 bytes 6 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 public/sound/error.wav diff --git a/functions/index.js b/functions/index.js index 057468cf7..9bede8782 100644 --- a/functions/index.js +++ b/functions/index.js @@ -898,7 +898,10 @@ exports.saveConfig = functions.https.onCall((request, response) => { { merge: true } ) .then((e) => { - return 1; + return { + returnCode: 1, + message: "Saved", + }; }) .catch((e) => { console.error( diff --git a/public/index.html b/public/index.html index 191edcf5a..ce9149193 100644 --- a/public/index.html +++ b/public/index.html @@ -1509,6 +1509,21 @@ +
+

play sound on error

+
+ Plays a short sound if you press an incorrect key or press space + too early. +
+
+
+ off +
+
+ on +
+
+

tags

diff --git a/public/js/script.js b/public/js/script.js index 5dc3b5253..ac584a8a2 100644 --- a/public/js/script.js +++ b/public/js/script.js @@ -59,6 +59,8 @@ let keypressStats = { }, }; +let errorSound = new Audio("../sound/error.wav"); + let customText = "The quick brown fox jumps over the lazy dog".split(" "); let customTextIsRandom = false; let customTextWordCount = 1; @@ -3055,6 +3057,12 @@ function hideCustomMode2Popup() { } } +function playErrorSound() { + if (!config.playSoundOnError) return; + errorSound.currentTime = 0; + errorSound.play(); +} + $("#customMode2PopupWrapper").click((e) => { if ($(e.target).attr("id") === "customMode2PopupWrapper") { hideCustomMode2Popup(); @@ -3331,6 +3339,7 @@ $(document).keypress(function (event) { accuracyStats.incorrect++; currentErrorCount++; thisCharCorrect = false; + playErrorSound(); } else { accuracyStats.correct++; thisCharCorrect = true; @@ -3632,6 +3641,7 @@ $(document).keydown((event) => { updateCaretPosition(); currentKeypressCount++; } else { + playErrorSound(); accuracyStats.incorrect++; if (config.stopOnError) { if (config.difficulty == "expert" || config.difficulty == "master") { diff --git a/public/js/settings.js b/public/js/settings.js index f93095d5d..c90892b09 100644 --- a/public/js/settings.js +++ b/public/js/settings.js @@ -151,6 +151,10 @@ settingsGroups.colorfulMode = new SettingsGroup( ); settingsGroups.randomTheme = new SettingsGroup("randomTheme", setRandomTheme); settingsGroups.stopOnError = new SettingsGroup("stopOnError", setStopOnError); +settingsGroups.stopOnError = new SettingsGroup( + "playSoundOnError", + setPlaySoundOnError +); settingsGroups.showAllLines = new SettingsGroup( "showAllLines", setShowAllLines diff --git a/public/js/userconfig.js b/public/js/userconfig.js index 8b8affff8..636b93a4d 100644 --- a/public/js/userconfig.js +++ b/public/js/userconfig.js @@ -46,6 +46,7 @@ let defaultConfig = { smoothLineScroll: false, alwaysShowDecimalPlaces: false, alwaysShowWordsHistory: false, + playSoundOnError: false, }; let cookieConfig = null; @@ -82,6 +83,7 @@ async function saveConfigToDB() { accountIconLoading(true); saveConfig({ uid: firebase.auth().currentUser.uid, obj: config }).then( (d) => { + console.log(d.data); accountIconLoading(false); if (d.data.returnCode === 1) { // showNotification('config saved to db',1000); @@ -159,6 +161,7 @@ function applyConfig(configObj) { setShowTimerProgress(configObj.showTimerProgress, true); setAlwaysShowDecimalPlaces(config.alwaysShowDecimalPlaces, true); setAlwaysShowWordsHistory(config.alwaysShowWordsHistory, true); + setPlaySoundOnError(config.playSoundOnError, true); // if ( // configObj.resultFilters !== null && // configObj.resultFilters !== undefined @@ -193,6 +196,14 @@ function hideTestConfig() { $("#top .config").css("opacity", 0).addClass("hidden"); } +function setPlaySoundOnError(val, nosave) { + if (val == undefined) { + val = false; + } + config.playSoundOnError = val; + if (!nosave) saveConfigToCookie(); +} + //difficulty function setDifficulty(diff, nosave) { if ( diff --git a/public/sound/error.wav b/public/sound/error.wav new file mode 100644 index 0000000000000000000000000000000000000000..00556e8290939a49272c51bfa83e8b9f56504bb4 GIT binary patch literal 12042 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