Improved www.ttss.krakow.pl
Jacek Kowalski
2021-07-31 95ecda6c51c197c3171c0784583d079b3ae5ff67
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;
@@ -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;
   
@@ -681,8 +720,10 @@
      var span = displayVehicle(feature.get('type'));
      
      additional = document.createElement('p');
      if(span.title) {
         setText(additional, span.title);
      if(span.dataset.typeShort) {
         setText(additional, span.dataset.typeShort);
         additional.title = span.dataset.typeAdditional;
         span.removeAttribute('title');
      } else {
         setText(additional, feature.getId());
      }
@@ -691,7 +732,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 +809,10 @@
   
   if(tabular_data) {
      div.appendChild(table);
   }
   if(post) {
      div.appendChild(post);
   }
   
   showOnMapFunction();
@@ -898,7 +946,9 @@
      return false;
   },
   _updateOld: function() {
      if(window.location.hash.match(/^#![bt][0-9]{3}$/)) {
      if(window.location.hash.match(/^#!s[bt][0-9]{1,3}$/)) {
         this.go('s' + window.location.hash.charAt(3) + window.location.hash.substr(4).padStart(4, '0'));
      } else if(window.location.hash.match(/^#![bt][0-9]{3}$/)) {
         this.go('v' + window.location.hash.substr(2));
      } else if(window.location.hash.match(/^#![RHrh][A-Za-z][0-9]{3}$/)) {
         this.go('vt'+ window.location.hash.substr(4));
@@ -1143,19 +1193,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();