From 136eabc29b194de731431f2b8da76a79f85c7246 Mon Sep 17 00:00:00 2001 From: kritzl Date: Fri, 7 Jun 2024 12:59:09 +0200 Subject: [PATCH] new version handling; alternative search strings --- elevators.js | 71 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 55 insertions(+), 16 deletions(-) diff --git a/elevators.js b/elevators.js index ea999f4..3ec0265 100644 --- a/elevators.js +++ b/elevators.js @@ -6,8 +6,13 @@ let geolocationPermission = false; let geolocation = null; const openStations = new Set(); let sortByDistance = false; +const version = '0.5.0' +const minorVersion = version.split('.').splice(0, 2).join('.'); +const numberFormat = new Intl.NumberFormat('de-DE', { + maximumFractionDigits: 1 +}); -const substituteCoordinates = [ +const substituteData = [ { name: 'Borgweg (Stadtpark)', coordinates: [53.5907696, 10.0147719], @@ -24,6 +29,26 @@ const substituteCoordinates = [ name: 'Hagenbecks Tierpark', coordinates: [53.5925874, 9.9440359], }, + { + name: 'Hamburg Hbf', + searchTarget: "Hauptbahnhof", + }, + { + name: 'Jungfernstieg', + searchTarget: "Rathaus", + }, + { + name: 'Rathaus', + searchTarget: "Jungfernstieg", + }, + { + name: 'Stephansplatz (Oper/CCH)', + searchTarget: "Dammtor (Messe/CCH)", + }, + + name: 'Dammtor (Messe/CCH)', + searchTarget: "Stephansplatz (Oper/CCH)", + }, { name: 'Hauptbahnhof Nord', coordinates: [53.5541197, 10.0061270], @@ -89,6 +114,13 @@ async function loadElevators() { for (const station of stations) { const stationName = station['mainSubStation']['stationName']; const stationComment = station['mainSubStation']['comment']; + let searchTarget = undefined; + + const substitute = substituteData.filter(subs => subs.name === stationName) + + if (substitute.length && substitute[0].hasOwnProperty('searchTarget')) { + searchTarget = substitute[0].searchTarget; + } const lines = new Set(); const elevators = []; for (const elevatorKey of Object.keys(station.elevators)) { @@ -157,6 +189,7 @@ async function loadElevators() { internalData.stations[stationIndex++] = { name: stationName, comment: stationComment, + searchTarget: searchTarget, state: stationState, lines: stationLines, types: stationTypes, @@ -165,7 +198,7 @@ async function loadElevators() { } localStorage.setItem("internal_data", JSON.stringify({ - api: 'v1', + api: minorVersion, ...internalData })); } @@ -217,20 +250,20 @@ async function loadOsmData() { } if (!internalData.stations[stationIndex].hasOwnProperty('coordinates')) { - const substitute = substituteCoordinates.filter(subs => subs.name === internalData.stations[stationIndex].name) - if (substitute.length) { + const substitute = substituteData.filter(subs => subs.name === internalData.stations[stationIndex].name) + if (substitute.length && substitute.hasOwnProperty('coordinates')) { internalData.stations[stationIndex]['coordinates'] = substitute[0].coordinates; } } } localStorage.setItem("osm_data", JSON.stringify({ - api: 'v1', + api: minorVersion, lastUpdate: new Date(), nodes: osmNodes })); localStorage.setItem("internal_data", JSON.stringify({ - api: 'v1', + api: minorVersion, ...internalData })); } @@ -646,22 +679,25 @@ function filterData() { const typeA = document.querySelector('button.typeChip[data-type="A"]'); const typeR = document.querySelector('button.typeChip[data-type="R"]'); const activeTypes = []; - if(typeU.dataset.pressed === 'true') activeTypes.push('U'); - if(typeS.dataset.pressed === 'true') activeTypes.push('S'); - if(typeA.dataset.pressed === 'true') activeTypes.push('A'); - if(typeR.dataset.pressed === 'true') activeTypes.push('R'); + if (typeU.dataset.pressed === 'true') activeTypes.push('U'); + if (typeS.dataset.pressed === 'true') activeTypes.push('S'); + if (typeA.dataset.pressed === 'true') activeTypes.push('A'); + if (typeR.dataset.pressed === 'true') activeTypes.push('R'); const stationCount = internalData.stations.length; let filteredStations = 0; if (internalData) { for (const stationIndex in internalData.stations) { - const matchesSearch = internalData.stations[stationIndex].name.toLowerCase().search(searchString.toLowerCase()) >= 0; + const matchesName = internalData.stations[stationIndex].name.toLowerCase().search(searchString.toLowerCase()) >= 0; + const matchesSearchTarget = internalData.stations[stationIndex].hasOwnProperty('searchTarget') + ? internalData.stations[stationIndex].searchTarget.toLowerCase().search(searchString.toLowerCase()) >= 0 + : false; let matchesType = false; internalData.stations[stationIndex].types.forEach(type => { - if(activeTypes.includes(type)) matchesType = true; + if (activeTypes.includes(type)) matchesType = true; }) - const filtered = !(matchesSearch && matchesType); + const filtered = !((matchesName || matchesSearchTarget) && matchesType); document.querySelector(`#station_${stationIndex}`).classList.toggle('hidden', filtered); - if(filtered) filteredStations++; + if (filtered) filteredStations++; } document.querySelector('#stationCount').innerHTML = stationCount; @@ -692,11 +728,14 @@ function closeDialog(selector) { document.querySelector(selector).classList.add('hidden') } +// set version +document.querySelector('#version').innerHTML = `v${version}`; + // data api version check const check_internal = JSON.parse(localStorage.getItem("internal_data")); const check_osm = JSON.parse(localStorage.getItem("osm_data")); -if (check_internal === null || check_internal.hasOwnProperty('api') && check_internal.api === 'v1') { - if (check_osm === null || check_osm.hasOwnProperty('api') && check_osm.api === 'v1') { +if (check_internal === null || check_internal.hasOwnProperty('api') && check_internal.api === minorVersion) { + if (check_osm === null || check_osm.hasOwnProperty('api') && check_osm.api === minorVersion) { renderData(); } else { console.log('osm_data: version mismatch')