From a0ade9ea317333d7d2b9f99f5bc598d50ce6489c Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 11 Jan 2022 01:56:14 -0500 Subject: [PATCH] [WebHost] weighted-settings: Added basic validation before export --- WebHostLib/static/assets/weighted-settings.js | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/WebHostLib/static/assets/weighted-settings.js b/WebHostLib/static/assets/weighted-settings.js index 893af20a..9a298ce3 100644 --- a/WebHostLib/static/assets/weighted-settings.js +++ b/WebHostLib/static/assets/weighted-settings.js @@ -837,11 +837,17 @@ const updateGameSetting = (event) => { const exportSettings = () => { const settings = JSON.parse(localStorage.getItem('weighted-settings')); + const userMessage = document.getElementById('user-message'); + let errorMessage = null; + + // User must choose a name for their file if (!settings.name || settings.name.trim().length === 0 || settings.name.toLowerCase().trim() === 'player') { - const userMessage = document.getElementById('user-message'); userMessage.innerText = 'You forgot to set your player name at the top of the page!'; userMessage.classList.add('visible'); - window.scrollTo(0, 0); + userMessage.scrollIntoView({ + behavior: 'smooth', + block: 'start', + }); return; } @@ -854,6 +860,10 @@ const exportSettings = () => { return; } + if (Object.keys(settings.game).length === 0) { + errorMessage = 'You have not chosen a game to play!'; + } + // Remove any disabled options Object.keys(settings[game]).forEach((setting) => { Object.keys(settings[game][setting]).forEach((option) => { @@ -861,9 +871,27 @@ const exportSettings = () => { delete settings[game][setting][option]; } }); + + if (Object.keys(settings[game][setting]).length === 0 && !Array.isArray(settings[game][setting])) { + errorMessage = `${game} // ${setting} has no values above zero!`; + } }); }); + // If an error occurred, alert the user and do not export the file + if (errorMessage) { + userMessage.innerText = errorMessage; + userMessage.classList.add('visible'); + userMessage.scrollIntoView({ + behavior: 'smooth', + block: 'start', + }); + return; + } + + // If no error occurred, hide the user message if it is visible + userMessage.classList.remove('visible'); + const yamlText = jsyaml.safeDump(settings, { noCompatMode: true }).replaceAll(/'(\d+)':/g, (x, y) => `${y}:`); download(`${document.getElementById('player-name').value}.yaml`, yamlText); }; @@ -894,7 +922,10 @@ const generateGame = (raceMode = false) => { userMessage.innerText += ' ' + error.response.data.text; } userMessage.classList.add('visible'); - window.scrollTo(0, 0); + userMessage.scrollIntoView({ + behavior: 'smooth', + block: 'start', + }); console.error(error); }); };