ctucx.git: trainsearch

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

commit 72fe0ed6e3b60e513c88711b76b38dbe1184c0bf
parent c33bb7c69213cc935a34b0649e45f4cffc596bb6
Author: Katja (ctucx) <git@ctu.cx>
Date: Tue, 4 Feb 2025 07:25:02 +0100

settingsView: add ageGroup setting
5 files changed, 40 insertions(+), 1 deletion(-)
M
src/dataStorage.js
|
13
+++++++++++++
M
src/languages.js
|
10
++++++++++
M
src/searchView.js
|
4
+++-
M
src/settings.js
|
1
+
M
src/settingsView.js
|
13
+++++++++++++
diff --git a/src/dataStorage.js b/src/dataStorage.js
@@ -44,6 +44,7 @@ class IDBStorage {
 						db.createObjectStore('journey', {keyPath: 'refreshToken'});
 						db.createObjectStore('journeysOverview', {keyPath: 'slug'});
 						db.createObjectStore('journeysHistory', {autoIncrement: true});
+
 					case 2:
 						settings = await transaction.objectStore('settings').get('settings');
 

@@ -52,6 +53,7 @@ class IDBStorage {
 						}
 
 						await transaction.objectStore('settings').put(settings, 'settings');
+
 					case 3:
 						settings = await transaction.objectStore('settings').get('settings');
 

@@ -60,6 +62,7 @@ class IDBStorage {
 						}
 
 						await transaction.objectStore('settings').put(settings, 'settings');
+
 					case 4:
 						settings = await transaction.objectStore('settings').get('settings');
 

@@ -68,6 +71,7 @@ class IDBStorage {
 						}
 
 						await transaction.objectStore('settings').put(settings, 'settings');
+
 					case 5:
 						settings = await transaction.objectStore('settings').get('settings');
 

@@ -76,6 +80,15 @@ class IDBStorage {
 						}
 
 						await transaction.objectStore('settings').put(settings, 'settings');
+
+					case 5:
+						settings = await transaction.objectStore('settings').get('settings');
+
+						if (settings !== undefined && settings.ageGroup === undefined) {
+							settings.ageGroup = 'E';
+						}
+
+						await transaction.objectStore('settings').put(settings, 'settings');
 				}
 			}
 		});
diff --git a/src/languages.js b/src/languages.js
@@ -108,6 +108,11 @@ const languages = {
 		'walkingSpeedFast':    'schnell',
 		'shareURL':            'Link teilen',
 		'copyURL':             'Link kopieren',
+		'ageGroup':            'Altersgruppe',
+		'ageGroupChild':       'Kind',
+		'ageGroupYoung':       'Jung',
+		'ageGroupAdult':       'Erwachsen',
+		'ageGroupSenior':      'Senior',
 	},
 
 	'nl': {

@@ -256,5 +261,10 @@ const languages = {
 		'walkingSpeedFast':    'fast',
 		'shareURL':            'Share URL',
 		'copyURL':             'Copy URL',
+		'ageGroup':            'Age group',
+		'ageGroupChild':       'Child',
+		'ageGroupYoung':       'Young',
+		'ageGroupAdult':       'Adult',
+		'ageGroupSenior':      'Senior',
 	}
 };
diff --git a/src/searchView.js b/src/searchView.js
@@ -343,7 +343,6 @@ const submitForm = async (event) => {
 		results: 6,
 		bike: settings.bikeFriendly,
 		products: settings.products,
-		loyaltyCard: loyaltyCardFromString(settings.loyaltyCard),
 	};
 
 	if (via)                   params.via       = via;

@@ -356,6 +355,9 @@ const submitForm = async (event) => {
 	if (settings.profile !== 'db') {
 		params.accessibility = settings.accessibility;
 		params.walkingSpeed  = settings.walkingSpeed;
+	} else {
+		params.loyaltyCard   = loyaltyCardFromString(settings.loyaltyCard);
+		params.ageGroup      = settings.ageGroup;
 	}
 
 	showLoader();
diff --git a/src/settings.js b/src/settings.js
@@ -21,6 +21,7 @@ const defaultSettings = {
 	walkingSpeed: 'normal',
 	bikeFriendly: false,
 	loyaltyCard: 'NONE',
+	ageGroup: 'E',
 	journeysViewMode: 'canvas',
 	combineDateTime: false,
 	showPrices: true,
diff --git a/src/settingsView.js b/src/settingsView.js
@@ -44,6 +44,16 @@ const settingsTemplate = () => html`
 			</select>
 		</div>
 
+		<div class="flex-row" id="ageGroupElement">
+			<label for="ageGroup">${t('ageGroup')}:</label>
+			<select id="ageGroup">
+				<option value="K" ?selected=${settings.ageGroup === 'K'}>${t('ageGroupChild')} (7-14)</option>
+				<option value="Y" ?selected=${settings.ageGroup === 'Y'}>${t('ageGroupYoung')} (15-26)</option>
+				<option value="E" ?selected=${settings.ageGroup === 'E'}>${t('ageGroupAdult')} (27-64)</option>
+				<option value="S" ?selected=${settings.ageGroup === 'S'}>${t('ageGroupSenior')} (65+)</option>
+			</select>
+		</div>
+
 		<div class="flex-row" id="loyaltyCardElement">
 			<label for="loyaltyCard">${t('loyaltyCard')}:</label>
 			<select id="loyaltyCard">

@@ -76,6 +86,7 @@ const profileChangeHandler = (profile) => {
 		case 'db':
 			showElement(ElementById('showPricesElement'));
 			showElement(ElementById('loyaltyCardElement'));
+			showElement(ElementById('ageGroupElement'));
 			hideElement(ElementById('walkingSpeedElement'));
 			break;
 

@@ -83,6 +94,7 @@ const profileChangeHandler = (profile) => {
 			showElement(ElementById('walkingSpeedElement'));
 			hideElement(ElementById('showPricesElement'));
 			hideElement(ElementById('loyaltyCardElement'));
+			hideElement(ElementById('ageGroupElement'));
 			break;
 	};
 };

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