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}
/>
+
+ {#each aggregation as entry}
+
+ {#if entry.duration > 4}
+
{CLASS_TEXT_MAP[entry.conditions][1]}
+ {:else if entry.duration > 2}
+
{CLASS_TEXT_MAP[entry.conditions][1]}
+ {/if}
+
+ {/each}
+
+
+
+ {#each Array(11) as _, i}
+ {@const timestamp = hourly[2 * (i + 1)].timestamp}
+
+ {/each}
+
+
+
+
+ {#each Array(11) as _, i}
+ {@const temperature = hourly[2 * (i + 1)].temperature}
+
+ {/each}
+
+
diff --git a/src/components/HourlyVerticalLayout.svelte b/src/components/HourlyVerticalLayout.svelte
new file mode 100644
index 0000000..80894a4
--- /dev/null
+++ b/src/components/HourlyVerticalLayout.svelte
@@ -0,0 +1,58 @@
+
+
+