diff --git a/src/App.svelte b/src/App.svelte index 2a5e218..f34de81 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -20,7 +20,7 @@ import type { ProviderFactory, Provider, Weather } from './providers/Provider'; import { Location } from './providers/Location'; import { ExampleProvider } from './providers/ExampleProvider'; - import { AutoExpand, configuration } from './Configuration'; + import { AutoExpand, configuration, Layout } from './Configuration'; import Timestamp from './components/scalars/Timestamp.svelte'; import CurrentDetails from './components/CurrentDetails.svelte'; @@ -128,11 +128,12 @@
{#if weather} + {@const { sunset_timestamp, sunrise_timestamp, precipitation_amount, precipitation_probability } = weather.daily[0]}
- +
- +
{#each weather.daily as daily, i} @@ -153,16 +154,15 @@ global_low={Math.min(...weather.daily.map((d) => d.temperature_low))} global_high={Math.max(...weather.daily.map((d) => d.temperature_high))} /> -
- - - {#if daily.hourly[0].precipitation_probability !== undefined && $configuration.showHourlyPrecipitation} - - {/if} - {#if daily.hourly[0].wind_speed !== undefined && $configuration.showHourlyWind} - - {/if} -
+ +
+ + {#if daily.hourly[0].precipitation_probability !== undefined && $configuration.showHourlyPrecipitation} + + {/if} + {#if daily.hourly[0].wind_speed !== undefined && $configuration.showHourlyWind} + + {/if}
{/each}
diff --git a/src/Configuration.ts b/src/Configuration.ts index 8f3d16f..35c655c 100644 --- a/src/Configuration.ts +++ b/src/Configuration.ts @@ -21,6 +21,11 @@ export enum AutoExpand { None, } +export enum Layout { + Horizontal, + Vertical, +} + export interface Configuration { providerFactory: ProviderFactory; providerParams: { [key: string]: string }; @@ -31,6 +36,7 @@ export interface Configuration { refreshInterval: number; showHourlyPrecipitation: boolean; showHourlyWind: boolean; + layout: Layout; } const DEFAULT_CONFIGURATION: Configuration = { @@ -43,6 +49,7 @@ const DEFAULT_CONFIGURATION: Configuration = { refreshInterval: 2 * 3600, showHourlyPrecipitation: true, showHourlyWind: true, + layout: Layout.Horizontal, }; function decodeConfiguration(params: { [key: string]: string }): Configuration { @@ -63,6 +70,7 @@ function decodeConfiguration(params: { [key: string]: string }): Configuration { const showHourlyPrecipitation = params['hourly_precipitation'] === undefined ? DEFAULT_CONFIGURATION.showHourlyPrecipitation : params['hourly_precipitation'] === 'true' ? true : false; const showHourlyWind = params['hourly_wind'] === undefined ? DEFAULT_CONFIGURATION.showHourlyWind : params['hourly_wind'] === 'true' ? true : false; + const layout = params['layout'] === 'vertical' ? Layout.Vertical : Layout.Horizontal; return { providerFactory, @@ -74,6 +82,7 @@ function decodeConfiguration(params: { [key: string]: string }): Configuration { refreshInterval, showHourlyPrecipitation, showHourlyWind, + layout, }; } @@ -107,7 +116,9 @@ function encodeConfiguration(configuration: Configuration): object { if (configuration.showHourlyWind !== DEFAULT_CONFIGURATION.showHourlyWind) { params['hourly_wind'] = configuration.showHourlyWind.toString(); } - + if (configuration.layout !== DEFAULT_CONFIGURATION.layout) { + params['layout'] = configuration.layout === Layout.Vertical ? 'vertical' : 'horizontal'; + } return params; } diff --git a/src/SettingsModal.svelte b/src/SettingsModal.svelte index c3bf738..493704c 100644 --- a/src/SettingsModal.svelte +++ b/src/SettingsModal.svelte @@ -4,7 +4,7 @@ import { ProviderFactories } from './providers'; import { Location } from './providers/Location'; - import { Units, AutoExpand, loadConfiguration, storeConfiguration } from './Configuration'; + import { Units, AutoExpand, loadConfiguration, Layout, storeConfiguration } from './Configuration'; import { Modal, Tabs, TabItem, Label, Select, Input, Hr, Button, ButtonGroup, Spinner, Radio, Checkbox } from 'flowbite-svelte'; import Icon from '@iconify/svelte'; @@ -29,6 +29,7 @@ let showHourlyPrecipitation: boolean; let showHourlyWind: boolean; let valid: boolean; + let layout: Layout; /* Loading State for location */ let locationLoading: boolean = false; @@ -51,6 +52,7 @@ title = currentConfiguration.title; showHourlyPrecipitation = currentConfiguration.showHourlyPrecipitation; showHourlyWind = currentConfiguration.showHourlyWind; + layout = currentConfiguration.layout; updateProviderParams(); @@ -88,6 +90,7 @@ refreshInterval: currentConfiguration.refreshInterval, showHourlyPrecipitation, showHourlyWind, + layout, }; storeConfiguration(configuration); @@ -203,6 +206,17 @@ bind:value={autoexpand} />
+
+ +