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"