aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/components/language_selector.svelte31
-rw-r--r--src/lib/components/loader.svelte3
-rw-r--r--src/lib/components/new_prompt.svelte21
-rw-r--r--src/lib/components/prompt.svelte16
-rw-r--r--src/lib/stores/prompt.js45
5 files changed, 116 insertions, 0 deletions
diff --git a/src/lib/components/language_selector.svelte b/src/lib/components/language_selector.svelte
new file mode 100644
index 0000000..e8d0c44
--- /dev/null
+++ b/src/lib/components/language_selector.svelte
@@ -0,0 +1,31 @@
+<script>
+ import { locale, locales } from 'svelte-i18n';
+ import { getLangNameFromCode } from 'language-name-map';
+ import { goto } from '$app/navigation';
+
+ $: namedLocales = $locales
+ .map((code) => ({
+ code,
+ ...getLangNameFromCode(code)
+ }))
+ .sort((a, b) => a.native - b.native);
+
+ let selected = $locale;
+
+ $: {
+ locale.set(selected);
+ }
+
+ const navigateAway = function () {
+ goto('/');
+ };
+</script>
+
+<select bind:value={selected} on:change={navigateAway}>
+ {#each namedLocales as namedLocale}
+ <option value={namedLocale.code}>{namedLocale.native}</option>
+ {/each}
+</select>
+
+<style>
+</style>
diff --git a/src/lib/components/loader.svelte b/src/lib/components/loader.svelte
new file mode 100644
index 0000000..4309aff
--- /dev/null
+++ b/src/lib/components/loader.svelte
@@ -0,0 +1,3 @@
+<script>
+</script>
+<p> Loading... </p>
diff --git a/src/lib/components/new_prompt.svelte b/src/lib/components/new_prompt.svelte
new file mode 100644
index 0000000..f44ecf1
--- /dev/null
+++ b/src/lib/components/new_prompt.svelte
@@ -0,0 +1,21 @@
+<script>
+ import { _ } from 'svelte-i18n';
+ import { getPrompt } from '$lib/stores/prompt';
+ import { goto } from '$app/navigation';
+
+ export let locale
+
+ $: prompt = getPrompt(locale);
+
+ $: {
+ if ($prompt) {
+ goto(`/${locale.split('-')[0]}/${$prompt}`);
+ }
+ }
+</script>
+
+<article>
+ <main>
+ {$_('loading')}
+ </main>
+</article>
diff --git a/src/lib/components/prompt.svelte b/src/lib/components/prompt.svelte
new file mode 100644
index 0000000..fbdc9ef
--- /dev/null
+++ b/src/lib/components/prompt.svelte
@@ -0,0 +1,16 @@
+<script>
+ import { _ } from 'svelte-i18n';
+ export let terms
+</script>
+
+<article>
+ <header>
+ {$_('title')}
+ </header>
+ <main>
+ {terms}
+ </main>
+ <footer>
+ <a href="/">{$_('refresh')}</a>
+ </footer>
+</article>
diff --git a/src/lib/stores/prompt.js b/src/lib/stores/prompt.js
new file mode 100644
index 0000000..59df711
--- /dev/null
+++ b/src/lib/stores/prompt.js
@@ -0,0 +1,45 @@
+import { readable } from 'svelte/store';
+import { browser } from '$app/env';
+
+const internals = {
+ kDataPrefix: 'http://localhost:3000/data/',
+ kAdjectivesPath: '/adjectives.json',
+ kNounsPath: '/nouns.json',
+
+ async get(locale, path) {
+
+ const shortLocale = locale.split('-')[0];
+ const targetFile = internals.kDataPrefix + shortLocale + path;
+ const data = browser && sessionStorage.getItem(targetFile);
+
+ if (data) {
+ return JSON.parse(data);
+ }
+
+ let newData = await (await fetch(targetFile)).json();
+ browser && sessionStorage.setItem(targetFile, JSON.stringify(newData));
+
+ return newData;
+ },
+
+ random(list) {
+
+ return list[Math.floor(Math.random() * list.length)];
+ }
+};
+
+export const getPrompt = function (locale) {
+
+ return readable(null, function (set) {
+
+ (async function() {
+
+ const adjectives = await internals.get(locale, internals.kAdjectivesPath);
+ const nouns = await internals.get(locale, internals.kNounsPath);
+
+ set(`${internals.random(nouns)}, ${internals.random(nouns)}, ${internals.random(adjectives)}`);
+ })();
+
+ return function stop() {};
+ });
+};