diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2021-08-29 21:49:37 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2021-08-29 21:49:37 +0200 |
| commit | 38431710cfb1cc1ffd7297085d069be1328f083b (patch) | |
| tree | b28fba3eb891d8e1f383d4faa358ee7f067be93b /src | |
Add project
Diffstat (limited to 'src')
| -rw-r--r-- | src/app.html | 13 | ||||
| -rw-r--r-- | src/config/i18n.js | 12 | ||||
| -rw-r--r-- | src/config/translations/en.json | 6 | ||||
| -rw-r--r-- | src/config/translations/es.json | 7 | ||||
| -rw-r--r-- | src/global.d.ts | 1 | ||||
| -rw-r--r-- | src/lib/components/language_selector.svelte | 31 | ||||
| -rw-r--r-- | src/lib/components/loader.svelte | 3 | ||||
| -rw-r--r-- | src/lib/components/new_prompt.svelte | 21 | ||||
| -rw-r--r-- | src/lib/components/prompt.svelte | 16 | ||||
| -rw-r--r-- | src/lib/stores/prompt.js | 45 | ||||
| -rw-r--r-- | src/routes/[locale]/[terms].svelte | 15 | ||||
| -rw-r--r-- | src/routes/[locale]/__layout.svelte | 22 | ||||
| -rw-r--r-- | src/routes/[locale]/index.svelte | 14 | ||||
| -rw-r--r-- | src/routes/__layout.svelte | 5 | ||||
| -rw-r--r-- | src/routes/index.svelte | 6 |
15 files changed, 217 insertions, 0 deletions
diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..b624a15 --- /dev/null +++ b/src/app.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8" /> + <link rel="icon" href="/favicon.png" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <link rel="stylesheet" href="/global.css" /> + %svelte.head% + </head> + <body> + <div id="svelte">%svelte.body%</div> + </body> +</html> diff --git a/src/config/i18n.js b/src/config/i18n.js new file mode 100644 index 0000000..25ffc45 --- /dev/null +++ b/src/config/i18n.js @@ -0,0 +1,12 @@ +import { addMessages, getLocaleFromNavigator, init } from 'svelte-i18n'; + +import en from './translations/en.json'; +import es from './translations/es.json'; + +addMessages('en', en); +addMessages('es', es); + +init({ + fallbackLocale: 'en', + initialLocale: getLocaleFromNavigator() +}); diff --git a/src/config/translations/en.json b/src/config/translations/en.json new file mode 100644 index 0000000..c5c0cef --- /dev/null +++ b/src/config/translations/en.json @@ -0,0 +1,6 @@ +{ + "refresh": "Get a new prompt.", + "title": "Your prompt is:", + "loading": "Finding your prompt..." +} + diff --git a/src/config/translations/es.json b/src/config/translations/es.json new file mode 100644 index 0000000..914970b --- /dev/null +++ b/src/config/translations/es.json @@ -0,0 +1,7 @@ +{ + "refresh": "Genera un prompt nuevo.", + "title": "Tu prompt es:", + "loading": "Encontrando tu prompt..." +} + + diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..63908c6 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1 @@ +/// <reference types="@sveltejs/kit" /> 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() {}; + }); +}; diff --git a/src/routes/[locale]/[terms].svelte b/src/routes/[locale]/[terms].svelte new file mode 100644 index 0000000..e389a4d --- /dev/null +++ b/src/routes/[locale]/[terms].svelte @@ -0,0 +1,15 @@ +<script context="module"> + export async function load({ page }) { + return { + props: { + terms: page.params.terms + } + } + } +</script> +<script> + import Prompt from '$lib/components/prompt.svelte'; + export let terms; +</script> + +<Prompt terms={terms} /> diff --git a/src/routes/[locale]/__layout.svelte b/src/routes/[locale]/__layout.svelte new file mode 100644 index 0000000..29319ba --- /dev/null +++ b/src/routes/[locale]/__layout.svelte @@ -0,0 +1,22 @@ +<script context="module"> + export async function load({ page }) { + return { + props: { + localeFromPath: page.params.locale + } + } + } +</script> + +<script> + import '../../config/i18n'; + export let localeFromPath; + + import { locale } from 'svelte-i18n'; + import LanguageSelector from '$lib/components/language_selector.svelte'; + + locale.set(localeFromPath); +</script> + +<slot /> +<LanguageSelector/> diff --git a/src/routes/[locale]/index.svelte b/src/routes/[locale]/index.svelte new file mode 100644 index 0000000..d8e8050 --- /dev/null +++ b/src/routes/[locale]/index.svelte @@ -0,0 +1,14 @@ +<script context="module"> + export async function load({ page }) { + return { + props: { + locale: page.params.locale + } + } + } +</script> +<script> + import NewPrompt from '$lib/components/new_prompt.svelte'; + export let locale; +</script> +<NewPrompt locale={locale} /> diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte new file mode 100644 index 0000000..fce59a3 --- /dev/null +++ b/src/routes/__layout.svelte @@ -0,0 +1,5 @@ +<script> + import '../config/i18n'; +</script> + +<slot /> diff --git a/src/routes/index.svelte b/src/routes/index.svelte new file mode 100644 index 0000000..edd7231 --- /dev/null +++ b/src/routes/index.svelte @@ -0,0 +1,6 @@ +<script> + import { locale } from 'svelte-i18n'; + import NewPrompt from '$lib/components/new_prompt.svelte'; +</script> + +<NewPrompt locale={$locale}/> |