sunrise-sunset: create the sunrise-sunset photo guessing page

This commit is contained in:
Thomas 2023-01-24 21:12:19 +00:00
parent 2e0fc8de97
commit e1769f5c6a
2 changed files with 98 additions and 64 deletions

View file

@ -1,21 +1,11 @@
<script lang="ts"> <script lang="ts">
import { writable } from 'svelte/store'; import type { PageData } from "./$types.js";
import Navbar from "$lib/components/Navbar.svelte";
import { writable } from "svelte/store";
const pictures: { export let data: PageData;
imageUrl: string;
daytime: 'sunrise' | 'sunset';
}[] = [
{
imageUrl: '/example',
daytime: 'sunrise'
},
{
imageUrl: '/examplele',
daytime: 'sunset'
}
];
const pictureStore = writable(pictures[0]); $: picture = data.body.photo;
const guessHistory = writable({ const guessHistory = writable({
correct: 0, correct: 0,
@ -23,9 +13,9 @@
total: 0 total: 0
}); });
function onOptionSelected(option: 'sunrise' | 'sunset') { function onOptionSelected(option: "sunrise" | "sunset") {
$guessHistory.total += 1; $guessHistory.total += 1;
if (option === $pictureStore.daytime) { if (option === picture.sunrise_or_sunset) {
$guessHistory.correct += 1; $guessHistory.correct += 1;
} else { } else {
$guessHistory.incorrect += 1; $guessHistory.incorrect += 1;
@ -34,23 +24,33 @@
} }
</script> </script>
<h1>Sunrise, Sunset?</h1> <Navbar />
<section class="header">
<h1>Sunrise, Sunset?</h1>
</section>
<section class="picture"> <section class="picture">
<img src={$pictureStore.imageUrl} alt="Sunrise or Sunset?" /> <img src={picture.small_url} alt="Sunrise or Sunset?" />
</section> </section>
<section class="options"> <section class="options">
<div class="options__buttons-container"> <div class="options__buttons-container">
<button class="options__button" on:click={() => onOptionSelected('sunrise')}>Sunrise</button> <button class="options__button" on:click={() => onOptionSelected("sunrise")}
<button class="options__button" on:click={() => onOptionSelected('sunset')}>Sunset</button> >Sunrise</button
>
<button class="options__button" on:click={() => onOptionSelected("sunset")}
>Sunset</button
>
</div> </div>
</section> </section>
<section class="score"> <section class="score">
{#if $guessHistory.total > 0} {#if $guessHistory.total > 0}
<p class="score__text"> <p class="score__text">
You've guessed correctly {Number($guessHistory.correct / $guessHistory.total)}% of the time You've guessed correctly {Number(
$guessHistory.correct / $guessHistory.total
)}% of the time
</p> </p>
{:else} {:else}
<p class="score__text">You've not guessed yet.</p> <p class="score__text">You've not guessed yet.</p>
@ -58,6 +58,23 @@
</section> </section>
<style lang="scss" type="text/postcss"> <style lang="scss" type="text/postcss">
.header {
display: grid;
place-content: center;
padding: 12px 0px;
}
.picture {
display: grid;
place-content: center;
padding: 12px 0px;
}
.picture img {
max-width: 100%;
max-height: 100%;
}
.options { .options {
width: 100%; width: 100%;
display: flex; display: flex;

View file

@ -0,0 +1,17 @@
import { error } from '@sveltejs/kit';
import type { PageLoad } from './$types.js';
import { type DailyPhoto } from '../api/sunrise-sunset-photo.json/SunriseSunsetController.js';
export const load: PageLoad = async ({ fetch }) => {
const response = await fetch('/api/sunrise-sunset-photo.json');
if (response.ok) {
const json: DailyPhoto = await response.json();
return {
status: 200,
body: json as DailyPhoto,
};
}
throw error(500, 'Failed to fetch sunrise-sunset photo');
};