From 23d5ea7c97b50aa7b1f35878a229ebca1389ad8b Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Tue, 31 Aug 2021 21:47:49 +0200 Subject: [PATCH] ui: Randomize themes list --- frontend/ui/package-lock.json | 5 ++++ frontend/ui/package.json | 3 ++- frontend/ui/src/components/NavThemes.svelte | 6 ++--- frontend/ui/src/routes/index.svelte | 5 ++-- frontend/ui/src/stores/mythemes.js | 27 +++++++++++++++++++++ 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/frontend/ui/package-lock.json b/frontend/ui/package-lock.json index 0c2f1ed7..21f3ade8 100644 --- a/frontend/ui/package-lock.json +++ b/frontend/ui/package-lock.json @@ -998,6 +998,11 @@ "mri": "^1.1.0" } }, + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", diff --git a/frontend/ui/package.json b/frontend/ui/package.json index e3c221a9..371fa71a 100644 --- a/frontend/ui/package.json +++ b/frontend/ui/package.json @@ -23,6 +23,7 @@ "@popperjs/core": "^2.9.3", "@sveltejs/adapter-static": "^1.0.0-next.17", "bootstrap": "^5.1.0", - "bootstrap-icons": "^1.5.0" + "bootstrap-icons": "^1.5.0", + "seedrandom": "^3.0.5" } } diff --git a/frontend/ui/src/components/NavThemes.svelte b/frontend/ui/src/components/NavThemes.svelte index 3e5b0094..a225cda7 100644 --- a/frontend/ui/src/components/NavThemes.svelte +++ b/frontend/ui/src/components/NavThemes.svelte @@ -9,8 +9,8 @@ } from 'sveltestrap'; import { my } from '../stores/my.js'; - import { max_solved, themes } from '../stores/themes.js'; - import { myThemes } from '../stores/mythemes.js'; + import { max_solved } from '../stores/themes.js'; + import { myThemes, themes } from '../stores/mythemes.js'; @@ -33,7 +33,7 @@ {/if} - {#if $my && $my.team_id}{$myThemes[th].exercice_solved}/{/if}{$themes[th].exercice_count} + {#if $my && $my.team_id}{$myThemes[$themes[th].id].exercice_solved}/{/if}{$themes[th].exercice_count} {/each} diff --git a/frontend/ui/src/routes/index.svelte b/frontend/ui/src/routes/index.svelte index 5827bbd1..1373e0ac 100644 --- a/frontend/ui/src/routes/index.svelte +++ b/frontend/ui/src/routes/index.svelte @@ -16,8 +16,7 @@ import { my } from '../stores/my.js'; import { teams } from '../stores/teams.js'; - import { themes } from '../stores/themes.js'; - import { myThemes } from '../stores/mythemes.js'; + import { myThemes, themes } from '../stores/mythemes.js'; import { settings } from '../stores/settings.js'; @@ -52,7 +51,7 @@ {#each Object.keys($themes) as th, index} diff --git a/frontend/ui/src/stores/mythemes.js b/frontend/ui/src/stores/mythemes.js index 279d9bc7..ef23b6a4 100644 --- a/frontend/ui/src/stores/mythemes.js +++ b/frontend/ui/src/stores/mythemes.js @@ -1,5 +1,7 @@ import { derived } from 'svelte/store'; +import seedrandom from 'seedrandom'; + import { my } from './my.js'; import { themesStore } from './themes.js'; @@ -21,6 +23,31 @@ export const myThemes = derived([my, themesStore], ([$my, $themesStore]) => { return themes; }); +export const themes = derived( + [my, themesStore], + ([$my, $themesStore]) => { + const arr = []; + for (let th in $themesStore.themes) { + $themesStore.themes[th].id = th + arr.push($themesStore.themes[th]); + } + const size = arr.length; + const rng = new seedrandom($my && $my.team_id ? $my.team_id : 0); + const resp = []; + const keys = []; + + for(let i=0;i { const tags = {};