From f39ae57b09ef11c3d6f637fcf5d0e8bbd439bce1 Mon Sep 17 00:00:00 2001 From: bdbkun <1308709+mbof@users.noreply.github.com> Date: Mon, 19 Aug 2024 22:14:23 +0000 Subject: [PATCH] Add support for nautical units --- website/src/lib/components/Menu.svelte | 1 + website/src/lib/db.ts | 2 +- website/src/lib/units.ts | 59 +++++++++++++++++++++++--- website/src/locales/en.json | 4 ++ 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/website/src/lib/components/Menu.svelte b/website/src/lib/components/Menu.svelte index 5ca99121..add8a904 100644 --- a/website/src/lib/components/Menu.svelte +++ b/website/src/lib/components/Menu.svelte @@ -333,6 +333,7 @@ {$_('menu.metric')} {$_('menu.imperial')} + {$_('menu.nautical')} diff --git a/website/src/lib/db.ts b/website/src/lib/db.ts index 5763b3a7..6a39ef02 100644 --- a/website/src/lib/db.ts +++ b/website/src/lib/db.ts @@ -80,7 +80,7 @@ export function dexieSettingStore(key: string, initial: T, initialize: boolea } export const settings = { - distanceUnits: dexieSettingStore<'metric' | 'imperial'>('distanceUnits', 'metric'), + distanceUnits: dexieSettingStore<'metric' | 'imperial' | 'nautical'>('distanceUnits', 'metric'), velocityUnits: dexieSettingStore<'speed' | 'pace'>('velocityUnits', 'speed'), temperatureUnits: dexieSettingStore<'celsius' | 'fahrenheit'>('temperatureUnits', 'celsius'), elevationProfile: dexieSettingStore('elevationProfile', true), diff --git a/website/src/lib/units.ts b/website/src/lib/units.ts index 61ad1e20..5e674898 100644 --- a/website/src/lib/units.ts +++ b/website/src/lib/units.ts @@ -16,6 +16,10 @@ export function metersToFeet(value: number) { return value * 3.28084; } +export function kilometersToNauticalMiles(value: number) { + return value * 0.539957; +} + export function celsiusToFahrenheit(value: number) { return value * 1.8 + 32; } @@ -93,15 +97,35 @@ export function getTemperatureWithUnits(value: number, convert: boolean = true) // Get the units export function getDistanceUnits() { - return get(distanceUnits) === 'metric' ? get(_)('units.kilometers') : get(_)('units.miles'); + switch (get(distanceUnits)) { + case 'metric': + return get(_)('units.kilometers'); + case 'imperial': + return get(_)('units.miles'); + case 'nautical': + return get(_)('units.nautical_miles'); + } } export function getVelocityUnits() { if (get(velocityUnits) === 'speed') { - return get(distanceUnits) === 'metric' ? get(_)('units.kilometers_per_hour') : get(_)('units.miles_per_hour'); + switch (get(distanceUnits)) { + case 'metric': + return get(_)('units.kilometers_per_hour'); + case 'imperial': + return get(_)('units.miles_per_hour'); + case 'nautical': + return get(_)('units.knots'); + } } else { - return get(distanceUnits) === 'metric' ? get(_)('units.minutes_per_kilometer') : get(_)('units.minutes_per_mile'); - + switch (get(distanceUnits)) { + case 'metric': + return get(_)('units.minutes_per_kilometer'); + case 'imperial': + return get(_)('units.minutes_per_mile'); + case 'nautical': + return get(_)('units.minutes_per_nautical_mile'); + } } } @@ -127,7 +151,14 @@ export function getTemperatureUnits() { // Convert only the value export function getConvertedDistance(value: number) { - return get(distanceUnits) === 'metric' ? value : kilometersToMiles(value); + switch (get(distanceUnits)) { + case 'metric': + return value; + case 'imperial': + return kilometersToMiles(value); + case 'nautical': + return kilometersToNauticalMiles(value); + } } export function getConvertedElevation(value: number) { @@ -136,9 +167,23 @@ export function getConvertedElevation(value: number) { export function getConvertedVelocity(value: number) { if (get(velocityUnits) === 'speed') { - return get(distanceUnits) === 'metric' ? value : kilometersToMiles(value); + switch (get(distanceUnits)) { + case 'metric': + return value; + case 'imperial': + return milesToKilometers(value); + case 'nautical': + return kilometersToNauticalMiles(value); + } } else { - return get(distanceUnits) === 'metric' ? distancePerHourToSecondsPerDistance(value) : distancePerHourToSecondsPerDistance(kilometersToMiles(value)); + switch (get(distanceUnits)) { + case 'metric': + return distancePerHourToSecondsPerDistance(value); + case 'imperial': + return distancePerHourToSecondsPerDistance(kilometersToMiles(value)); + case 'nautical': + return distancePerHourToSecondsPerDistance(kilometersToNauticalMiles(value)); + } } } diff --git a/website/src/locales/en.json b/website/src/locales/en.json index b1717ba8..4c9b687e 100644 --- a/website/src/locales/en.json +++ b/website/src/locales/en.json @@ -41,6 +41,7 @@ "distance_units": "Distance units", "metric": "Metric", "imperial": "Imperial", + "nautical": "Nautical", "velocity_units": "Velocity units", "temperature_units": "Temperature units", "celsius": "Celsius", @@ -363,12 +364,15 @@ "feet": "ft", "kilometers": "km", "miles": "mi", + "nautical_miles": "nm", "celsius": "°C", "fahrenheit": "°F", "kilometers_per_hour": "km/h", "miles_per_hour": "mph", "minutes_per_kilometer": "min/km", "minutes_per_mile": "min/mi", + "minutes_per_nautical_mile": "min/nm", + "knots": "kn", "heartrate": "bpm", "cadence": "rpm", "power": "W"