ctucx.git: trainsearch

web based trip-planner, fork of https://cyberchaos.dev/yuka/trainsearch

commit 0a6cfcb0567a98c26cbb04531853b3d075cddfb3
parent 55eba5783170d74232292f981cb15a27f4f34354
Author: Katja (ctucx) <git@ctu.cx>
Date: Fri, 31 Jan 2025 14:36:36 +0100

settingsView: add walking-speed selector
5 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/src/dataStorage.js b/src/dataStorage.js
@@ -68,6 +68,14 @@ class IDBStorage {
 						}
 
 						await transaction.objectStore('settings').put(settings, 'settings');
+					case 5:
+						settings = await transaction.objectStore('settings').get('settings');
+
+						if (settings !== undefined && settings.walkingSpeed === undefined) {
+							settings.walkingSpeed = 'normal';
+						}
+
+						await transaction.objectStore('settings').put(settings, 'settings');
 				}
 			}
 		});
diff --git a/src/languages.js b/src/languages.js
@@ -91,6 +91,10 @@ const languages = {
 		'class':               'Klasse',
 		'titleNoTransfers':    'keine Umstiege zulassen',
 		'lastSelectedJourney': 'Zuletzt gewählte Verbindung',
+		'walkingSpeed':        'Gehgeschwindigkeit',
+		'walkingSpeedSlow':    'langsam',
+		'walkingSpeedNormal':  'normal',
+		'walkingSpeedFast':    'schnell',
 	},
 
 	'nl': {

@@ -235,5 +239,9 @@ const languages = {
 		'class':               'Class',
 		'titleNoTransfers':    'only direct connections',
 		'lastSelectedJourney': 'Last selected Journey',
+		'walkingSpeed':        'Walking speed',
+		'walkingSpeedSlow':    'slow',
+		'walkingSpeedNormal':  'normal',
+		'walkingSpeedFast':    'fast',
 	}
 };
diff --git a/src/searchView.js b/src/searchView.js
@@ -342,6 +342,7 @@ const submitForm = async (event) => {
 		to,
 		results: 6,
 		accessibility: settings.accessibility,
+		walkingSpeed: settings.walkingSpeed,
 		bike: settings.bikeFriendly,
 		products: settings.products,
 		loyaltyCard: loyaltyCardFromString(settings.loyaltyCard),
diff --git a/src/settings.js b/src/settings.js
@@ -18,6 +18,7 @@ const defaultSettings = {
 		'taxi': true
 	},
 	accessibility: 'none',
+	walkingSpeed: 'normal',
 	bikeFriendly: false,
 	loyaltyCard: 'NONE',
 	journeysViewMode: 'canvas',
diff --git a/src/settingsView.js b/src/settingsView.js
@@ -35,6 +35,15 @@ const settingsTemplate = () => html`
 			</select>
 		</div>
 
+		<div class="row" id="walkingSpeedElement">
+			<label for="walkingSpeed">${t('walkingSpeed')}:</label>
+			<select id="walkingSpeed">
+				<option value="slow"   ?selected=${settings.walkingSpeed === 'slow'}>${t('walkingSpeedSlow')}</option>
+				<option value="normal" ?selected=${settings.walkingSpeed === 'normal'}>${t('walkingSpeedNormal')}</option>
+				<option value="fast"   ?selected=${settings.walkingSpeed === 'fast'}>${t('walkingSpeedFast')}</option>
+			</select>
+		</div>
+
 		<div class="row" id="loyaltyCardElement">
 			<label for="loyaltyCard">${t('loyaltyCard')}:</label>
 			<select id="loyaltyCard">

@@ -65,13 +74,15 @@ const settingsTemplate = () => html`
 const profileChangeHandler = (profile) => {
 	switch (profile) {
 		case 'db':
-			showElement(ElementById('showPricesElement'))
-			showElement(ElementById('loyaltyCardElement'))
+			showElement(ElementById('showPricesElement'));
+			showElement(ElementById('loyaltyCardElement'));
+			hideElement(ElementById('walkingSpeedElement'));
 			break;
 
 		default:
-			hideElement(ElementById('showPricesElement'))
-			hideElement(ElementById('loyaltyCardElement'))
+			showElement(ElementById('walkingSpeedElement'));
+			hideElement(ElementById('showPricesElement'));
+			hideElement(ElementById('loyaltyCardElement'));
 			break;
 	};
 };

@@ -96,6 +107,7 @@ const saveSettings = async () => {
 		settings.language        = ElementById('language').value;
 		settings.profile         = ElementById('profile').value;
 		settings.loyaltyCard     = ElementById('loyaltyCard').value;
+		settings.walkingSpeed    = ElementById('walkingSpeed').value;
 
 		return settings;
 	});