Add support for nautical units

This commit is contained in:
bdbkun 2024-08-19 22:14:23 +00:00
parent 1a4ae96782
commit f39ae57b09
4 changed files with 58 additions and 8 deletions

View file

@ -333,6 +333,7 @@
<Menubar.RadioGroup bind:value={$distanceUnits}>
<Menubar.RadioItem value="metric">{$_('menu.metric')}</Menubar.RadioItem>
<Menubar.RadioItem value="imperial">{$_('menu.imperial')}</Menubar.RadioItem>
<Menubar.RadioItem value="nautical">{$_('menu.nautical')}</Menubar.RadioItem>
</Menubar.RadioGroup>
</Menubar.SubContent>
</Menubar.Sub>

View file

@ -80,7 +80,7 @@ export function dexieSettingStore<T>(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),

View file

@ -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));
}
}
}

View file

@ -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"