From 19a3387f2cae0411e591070ba728eedacea2335b Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Fri, 05 Jul 2019 22:27:13 +0000
Subject: [PATCH] Use CSS icon for geolocation button, wrap it in #menu
---
map.js | 145 ++++++++++++++++++++++++-----------------------
1 files changed, 74 insertions(+), 71 deletions(-)
diff --git a/map.js b/map.js
index 11c7aa0..07f2361 100644
--- a/map.js
+++ b/map.js
@@ -1,4 +1,4 @@
-"use strict";
+'use strict';
var ttss_refresh = 10000; // 10 seconds
var ttss_position_type = 'RAW';
@@ -20,7 +20,7 @@
var vehicles_info = {};
var stops_xhr = null;
-var stops_ignored = ['131'];
+var stops_ignored = ['131', '744', '1263', '3039'];
var stops_style = {
'sb': new ol.style.Style({
image: new ol.style.Circle({
@@ -151,9 +151,9 @@
function fail_ajax_generic(data, fnc) {
// abort() is not a failure
- if(data.readyState == 0) return;
+ if(data.readyState === 0) return;
- if(data.status == 0) {
+ if(data.status === 0) {
fnc(lang.error_request_failed_connectivity, data);
} else if (data.statusText) {
fnc(lang.error_request_failed_status.replace('$status', data.statusText), data);
@@ -193,7 +193,7 @@
fill = '#05B';
}
if(selected) {
- fill = '#292';
+ fill = '#922';
}
var image = '<svg xmlns="http://www.w3.org/2000/svg" height="30" width="20"><polygon points="10,0 20,23 0,23" style="fill:'+fill+';stroke:'+color_type+';stroke-width:3" /></svg>';
@@ -228,7 +228,6 @@
var feature, prefix;
for(var i = 0; i < stops.length; i++) {
- feature = null;
if(stops[i].getId) {
feature = stops[i];
} else {
@@ -278,7 +277,7 @@
var vehicle_name_space = vehicle.name.indexOf(' ');
vehicle.line = vehicle.name.substr(0, vehicle_name_space);
- vehicle.direction = vehicle.name.substr(vehicle_name_space+1);
+ vehicle.direction = normalizeName(vehicle.name.substr(vehicle_name_space+1));
if(special_directions[vehicle.direction]) {
vehicle.line = special_directions[vehicle.direction];
}
@@ -310,8 +309,9 @@
function updateStopSource(stops, prefix) {
var source = stops_source[prefix];
var mapping = stops_mapping[prefix];
+ var stop;
for(var i = 0; i < stops.length; i++) {
- var stop = stops[i];
+ stop = stops[i];
if(stop.category == 'other') continue;
if(stops_ignored.includes(stop.shortName)) continue;
@@ -347,7 +347,7 @@
}).fail(fail_ajax);
}
-function vehiclePath(feature, tripId) {
+function vehiclePath(feature) {
if(path_xhr) path_xhr.abort();
var featureId = feature.getId();
@@ -389,36 +389,38 @@
+ '?tripId=' + encodeURIComponent(feature.get('tripId'))
+ '&mode=departure'
).done(function(data) {
- if(!data.routeName || !data.directionText) {
+ if(typeof data.old === "undefined" || typeof data.actual === "undefined") {
return;
}
deleteChildren(table);
- var i, il;
+ var all_departures = data.old.concat(data.actual);
var tr;
- for(i = 0, il = data.old.length; i < il; i++) {
- tr = document.createElement('tr');
- addCellWithText(tr, data.old[i].actualTime || data.old[i].plannedTime);
- addCellWithText(tr, data.old[i].stop_seq_num + '. ' + data.old[i].stop.name);
-
- tr.className = 'active';
- table.appendChild(tr);
- }
-
var stopsToMark = [];
-
- for(i = 0, il = data.actual.length; i < il; i++) {
+ for(var i = 0, il = all_departures.length; i < il; i++) {
tr = document.createElement('tr');
- addCellWithText(tr, data.actual[i].actualTime || data.actual[i].plannedTime);
- addCellWithText(tr, data.actual[i].stop_seq_num + '. ' + data.actual[i].stop.name);
+ addCellWithText(tr, all_departures[i].actualTime || all_departures[i].plannedTime);
+ addCellWithText(tr, all_departures[i].stop_seq_num + '. ' + normalizeName(all_departures[i].stop.name));
- stopsToMark.push('s' + ttss_type + data.actual[i].stop.id);
+ if(i >= data.old.length) {
+ stopsToMark.push('s' + ttss_type + all_departures[i].stop.id);
+ }
- if(data.actual[i].status == 'STOPPING') {
+ if(i < data.old.length) {
+ tr.className = 'active';
+ } else if(all_departures[i].status === 'STOPPING') {
tr.className = 'success';
}
table.appendChild(tr);
+ }
+
+ if(all_departures.length === 0) {
+ tr = document.createElement('tr');
+ table.appendChild(tr);
+ tr = addCellWithText(tr, lang.no_data);
+ tr.colSpan = '2';
+ tr.className = 'active';
}
markStops(stopsToMark, ttss_type, true);
@@ -439,36 +441,22 @@
).done(function(data) {
deleteChildren(table);
- var i, il;
+ var all_departures = data.old.concat(data.actual);
var tr, dir_cell, vehicle, status, status_cell, delay, delay_cell;
- for(i = 0, il = data.old.length; i < il; i++) {
+ for(var i = 0, il = all_departures.length; i < il; i++) {
tr = document.createElement('tr');
- addCellWithText(tr, data.old[i].patternText);
- dir_cell = addCellWithText(tr, data.old[i].direction);
- vehicle = parseVehicle(data.old[i].vehicleId);
+ addCellWithText(tr, all_departures[i].patternText);
+ dir_cell = addCellWithText(tr, normalizeName(all_departures[i].direction));
+ vehicle = parseVehicle(all_departures[i].vehicleId);
dir_cell.appendChild(displayVehicle(vehicle));
- status = parseStatus(data.old[i]);
+ status = parseStatus(all_departures[i]);
status_cell = addCellWithText(tr, status);
- delay_cell = addCellWithText(tr, '');
-
- tr.className = 'active';
- table.appendChild(tr);
- }
-
- for(i = 0, il = data.actual.length; i < il; i++) {
- tr = document.createElement('tr');
- addCellWithText(tr, data.actual[i].patternText);
- dir_cell = addCellWithText(tr, data.actual[i].direction);
- vehicle = parseVehicle(data.actual[i].vehicleId);
- dir_cell.appendChild(displayVehicle(vehicle));
- status = parseStatus(data.actual[i]);
- status_cell = addCellWithText(tr, status);
- delay = parseDelay(data.actual[i]);
+ delay = parseDelay(all_departures[i]);
delay_cell = addCellWithText(tr, delay);
- if(data.actual[i].status === 'DEPARTED') {
+ if(i < data.old.length) {
tr.className = 'active';
- } else if(status == lang.boarding_sign) {
+ } else if(status === lang.boarding_sign) {
tr.className = 'success';
status_cell.className = 'status-boarding';
} else if(parseInt(delay) > 9) {
@@ -496,12 +484,9 @@
return;
}
- var coordinates = feature.getGeometry().getCoordinates();
-
var div = document.createElement('div');
- var typeName;
- var name = feature.get('name');
+ var name = normalizeName(feature.get('name'));
var additional;
var table = document.createElement('table');
var thead = document.createElement('thead');
@@ -598,7 +583,19 @@
loader.colSpan = thead.childNodes.length;
addParaWithText(div, typeName).className = 'type';
- addParaWithText(div, name).className = 'name';
+
+ var nameElement = addParaWithText(div, name + ' ');
+ nameElement.className = 'name';
+
+ var showOnMapElement = addElementWithText(nameElement, 'a', lang.show_on_map);
+ var showOnMapFunction = function() {
+ setTimeout(function () {map.getView().animate({
+ center: feature.getGeometry().getCoordinates(),
+ })}, 10);
+ };
+ showOnMapElement.addEventListener('click', showOnMapFunction);
+ showOnMapElement.className = 'icon-pin addon-icon';
+ showOnMapElement.title = lang.show_on_map;
if(additional) {
div.appendChild(additional);
@@ -610,10 +607,7 @@
window.location.hash = '#!' + feature.getId();
}
- setTimeout(function () {map.getView().animate({
- center: feature.getGeometry().getCoordinates(),
- }) }, 10);
-
+ showOnMapFunction();
panel.show(div, function() {
if(!ignore_hashchange) {
@@ -640,6 +634,8 @@
if(feature.getId()) features.push(feature);
});
+ var feature = features[0];
+
if(features.length > 1) {
featureClicked();
@@ -647,7 +643,7 @@
addParaWithText(div, lang.select_feature);
- var feature, p, a, full_type, typeName;
+ var p, a, full_type, typeName;
for(var i = 0; i < features.length; i++) {
feature = features[i];
@@ -663,10 +659,13 @@
if(typeof typeName === 'undefined') {
typeName = '';
}
+ if(feature.get('vehicle_type')) {
+ typeName += ' ' + feature.get('vehicle_type').num;
+ }
addElementWithText(a, 'span', typeName).className = 'small';
a.appendChild(document.createTextNode(' '));
- addElementWithText(a, 'span', feature.get('name'));
+ addElementWithText(a, 'span', normalizeName(feature.get('name')));
div.appendChild(p);
}
@@ -676,7 +675,6 @@
return;
}
- var feature = features[0];
if(!feature) {
stops_type.forEach(function(type) {
if(stops_layer[type].getVisible()) {
@@ -816,6 +814,7 @@
});
vehicles_layer[type] = new ol.layer.Vector({
source: vehicles_source[type],
+ renderMode: 'image',
});
vehicles_last_update[type] = 0;
});
@@ -840,9 +839,9 @@
geolocation_layer = new ol.layer.Vector({
source: geolocation_source,
});
- geolocation_button = document.querySelector('#track button');
+ geolocation_button = document.querySelector('#track');
if(!navigator.geolocation) {
- geolocation_button.classList.add('hidden');
+ geolocation_button.remove();
}
geolocation = new ol.Geolocation({projection: 'EPSG:3857'});
@@ -867,7 +866,7 @@
geolocation.on('error', function(error) {
fail(lang.error_location + ' ' + error.message);
trackingStop();
- geolocation_button.classList.add('hidden');
+ geolocation_button.remove();
});
geolocation_button.addEventListener('click', trackingToggle);
@@ -905,7 +904,7 @@
element: fail_element,
}),
new ol.control.Control({
- element: document.getElementById('track'),
+ element: document.getElementById('menu'),
}),
]),
loadTilesWhileAnimating: false,
@@ -926,7 +925,7 @@
});
// Change layer visibility on zoom
- var change_resolution = function(e) {
+ var change_resolution = function() {
stops_type.forEach(function(type) {
if(type.startsWith('p')) {
stops_layer[type].setVisible(map.getView().getZoom() >= 16);
@@ -951,11 +950,15 @@
window.addEventListener('hashchange', hash);
setTimeout(function() {
- if(trams_xhr) trams_xhr.abort();
- if(trams_timer) clearTimeout(trams_timer);
- if(buses_xhr) buses_xhr.abort();
- if(buses_timer) clearTimeout(buses_timer);
-
+ 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);
}
--
Gitblit v1.9.1