From d80109132d362199e6d9e370d5f54bd0d6554126 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Thu, 29 Jul 2021 22:40:29 +0000 Subject: [PATCH] [map] Allow zero-prefixed stop identifiers (fix for bus stops) --- map.js | 107 +++++++++++++++++++++++++++++++++++------------------ 1 files changed, 70 insertions(+), 37 deletions(-) diff --git a/map.js b/map.js index 1cc411e..456edaa 100644 --- a/map.js +++ b/map.js @@ -189,7 +189,7 @@ ttss_types.forEach(function(ttss_type) { vehicles[ttss_type].source.forEachFeature(function(feature) { - if(feature.get('vehicle_type') && feature.get('vehicle_type').num.indexOf(query) > -1) { + if(feature.get('type') && feature.get('type').num.indexOf(query) > -1) { features.push(feature); } }); @@ -322,10 +322,10 @@ }, _removeFeature: function(feature) { if(!feature) return; - this.source.removeFeature(feature); if(this.selectedFeatureId === feature.getId()) { this.deselect(); } + this.source.removeFeature(feature); }, loadFullData: function(data) { var self = this; @@ -494,7 +494,7 @@ stop = stops[i]; var feature = new ol.Feature(stop); - feature.setId(stop.id); + feature.setId(stop.id.replace(/^0+/, '')); feature.setGeometry(getGeometryFeature(feature)); if(feature.get('parent') === null) { @@ -545,7 +545,7 @@ return path_xhr; } -function vehicleTable(feature, table) { +function vehicleTable(feature, table, post, trip) { if(feature_xhr) feature_xhr.abort(); if(feature_timer) clearTimeout(feature_timer); @@ -554,9 +554,13 @@ var featureSource = featureDiscriminator.substr(1, 1); var featureStatus = feature.get('status'); + var isTripCurrent = !trip || feature.get('trip') == trip; + feature_xhr = $.get( - api_url + '/trip/?type=' + featureSource + '&id=' + feature.get('trip') - ).done(function(data) { + api_url + '/trip/?type=' + featureSource + '&id=' + (trip ? trip : feature.get('trip')) + ).done(function(results) { + var data = results['data']; + deleteChildren(table); var tr; @@ -568,10 +572,12 @@ stopsToMark.push(data[i].stop); - if(data[i].seq < feature.get('seq')) { - tr.className = 'active'; - } else if(data[i].seq == feature.get('seq') && featureStatus < 2) { - tr.className = 'success'; + if(isTripCurrent) { + if(data[i].seq < feature.get('seq')) { + tr.className = 'active'; + } else if(data[i].seq == feature.get('seq') && featureStatus < 2) { + tr.className = 'success'; + } } table.appendChild(tr); } @@ -584,9 +590,42 @@ tr.className = 'active'; } + deleteChildren(post); + + if(results['prev']) { + tr = addElementWithText(post, 'a', lang.trip_previous); + tr.className = 'left'; + tr.onclick = function() { + vehicleTable(feature, table, post, results['prev']); + }; + } else { + tr = document.createElement('span'); + post.appendChild(tr); + } + if(!isTripCurrent) { + tr = addElementWithText(post, 'a', lang.trip_current); + tr.className = 'center'; + tr.onclick = function() { + vehicleTable(feature, table, post); + }; + } else { + tr = document.createElement('span'); + post.appendChild(tr); + } + if(results['next']) { + tr = addElementWithText(post, 'a', lang.trip_next); + tr.className = 'right'; + tr.onclick = function() { + vehicleTable(feature, table, post, results['next']); + }; + } else { + tr = document.createElement('span'); + post.appendChild(tr); + } + markStops(stopsToMark, featureSource, true); - feature_timer = setTimeout(function() { vehicleTable(feature, table); }, api_refresh); + feature_timer = setTimeout(function() { vehicleTable(feature, table, post, trip); }, api_refresh); }).fail(fail_ajax_popup); return feature_xhr; } @@ -600,23 +639,22 @@ var featureSource = featureDiscriminator.substr(1, 1); feature_xhr = $.get( - api_url + '/stop/?type=' + featureSource + '&id=' + feature.getId() + api_url + '/schedule/?type=' + featureSource + '&id=' + feature.getId() ).done(function(data) { deleteChildren(table); - var all_departures = data.old.concat(data.actual); var tr, dir_cell, vehicle, status, status_cell, delay, delay_cell; - for(var i = 0, il = all_departures.length; i < il; i++) { + for(var i = 0, il = data.length; i < il; i++) { tr = document.createElement('tr'); - addCellWithText(tr, all_departures[i].patternText); - dir_cell = addCellWithText(tr, normalizeName(all_departures[i].direction)); + addCellWithText(tr, data[i].line); + dir_cell = addCellWithText(tr, data[i].direction); //vehicle = vehicles_info.getParsed(all_departures[i].vehicleId); - dir_cell.appendChild(displayVehicle(vehicle)); - status = parseStatus(all_departures[i]); - status_cell = addCellWithText(tr, status); - delay = parseDelay(all_departures[i]); - delay_cell = addCellWithText(tr, delay); - + //dir_cell.appendChild(displayVehicle(vehicle)); + //status = parseStatus(all_departures[i]); + status_cell = addCellWithText(tr, data[i].time); + //delay = parseDelay(all_departures[i]); + delay_cell = addCellWithText(tr, ''); + /* if(i < data.old.length) { tr.className = 'active'; } else if(status === lang.boarding_sign) { @@ -628,7 +666,7 @@ } else if(parseInt(delay) > 3) { tr.className = 'warning'; } - + */ table.appendChild(tr); } @@ -662,6 +700,7 @@ var tbody = document.createElement('tbody'); table.appendChild(thead); table.appendChild(tbody); + var post; var tabular_data = true; @@ -691,7 +730,10 @@ addElementWithText(thead, 'th', lang.header_time); addElementWithText(thead, 'th', lang.header_stop); - vehicleTable(feature, tbody); + post = document.createElement('div'); + post.className = 'post-nav'; + + vehicleTable(feature, tbody, post); //vehiclePath(feature); } // Stop or stop point @@ -765,6 +807,10 @@ if(tabular_data) { div.appendChild(table); + } + + if(post) { + div.appendChild(post); } showOnMapFunction(); @@ -1143,19 +1189,6 @@ hash = new Hash(); Deferred.all(future_requests).done(hash.ready.bind(hash)); - - setTimeout(function() { - ttss_types.forEach(function(type) { - if(vehicles_xhr[type]) { - vehicles_xhr[type].abort(); - } - if(vehicles_timer[type]) { - clearTimeout(vehicles_timer[type]); - } - }); - - fail(lang.error_refresh); - }, 1800000); } init(); -- Gitblit v1.9.1