From 11916a39859ae676cf7943368f9facfafb43891d Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Tue, 06 Nov 2018 21:24:37 +0000
Subject: [PATCH] Update JavaScript libraries used to the latest versions
---
map.js | 122 ++++++++++++++++++++++++++++++++--------
1 files changed, 98 insertions(+), 24 deletions(-)
diff --git a/map.js b/map.js
index 4b7365f..0c553fb 100644
--- a/map.js
+++ b/map.js
@@ -25,6 +25,7 @@
var map = null;
var map_sphere = null;
var popup_element = document.getElementById('popup');
+var popup_close_callback;
var fail_element = document.getElementById('fail');
var ignore_hashchange = false;
@@ -169,7 +170,7 @@
if(vehicle.isDeleted) {
if(vehicle_feature) {
vehicles_source.removeFeature(vehicle_feature);
- if(feature_clicked.getId() == vehicle_feature.getId()) {
+ if(feature_clicked && feature_clicked.getId() === vehicle_feature.getId()) {
featureClicked();
}
}
@@ -257,7 +258,7 @@
+ '?tripId=' + encodeURIComponent(tripId)
+ '&mode=departure'
).done(function(data) {
- if(!data.routeName || !data.directionText || data.old.length + data.actual.length == 0) {
+ if(!data.routeName || !data.directionText) {
return;
}
@@ -293,7 +294,7 @@
if(!vehicleId) return;
feature_xhr = $.get(
- ttss_base + '/internetservice/geoserviceDispatcher/services/pathinfo/vehicle'
+ ttss_base + '/geoserviceDispatcher/services/pathinfo/vehicle'
+ '?id=' + encodeURIComponent(vehicleId)
).done(function(data) {
if(!data || !data.paths || !data.paths[0] || !data.paths[0].wayPoints) return;
@@ -368,6 +369,31 @@
}).fail(fail_ajax_popup);
}
+function showPanel(contents, closeCallback) {
+ var old_callback = popup_close_callback;
+ popup_close_callback = null;
+ if(old_callback) old_callback();
+ popup_close_callback = closeCallback;
+
+ deleteChildren(popup_element);
+
+ var close = addParaWithText(popup_element, '×');
+ close.className = 'close';
+ close.addEventListener('click', function() { hidePanel(); });
+
+ popup_element.appendChild(contents);
+
+ $(popup_element).addClass('show');
+}
+
+function hidePanel() {
+ var old_callback = popup_close_callback;
+ popup_close_callback = null;
+ if(old_callback) old_callback();
+
+ $(popup_element).removeClass('show');
+}
+
function featureClicked(feature) {
if(feature && !feature.getId()) return;
@@ -375,23 +401,13 @@
route_source.clear();
if(!feature) {
- feature_clicked = null;
-
- $(popup_element).removeClass('show');
-
- ignore_hashchange = true;
- window.location.hash = '';
-
+ hidePanel();
return;
}
var coordinates = feature.getGeometry().getCoordinates();
- deleteChildren(popup_element);
-
- var close = addParaWithText(popup_element, '×');
- close.className = 'close';
- close.addEventListener('click', function() { featureClicked(); });
+ var div = document.createElement('div');
var type;
var name = feature.get('name');
@@ -460,17 +476,14 @@
loader.className = 'active';
loader.colSpan = thead.childNodes.length;
- addParaWithText(popup_element, type).className = 'type';
- addParaWithText(popup_element, name).className = 'name';
+ addParaWithText(div, type).className = 'type';
+ addParaWithText(div, name).className = 'name';
if(additional) {
- popup_element.appendChild(additional);
+ div.appendChild(additional);
}
- popup_element.appendChild(table);
-
- ignore_hashchange = true;
- window.location.hash = '#!' + feature.getId();
+ div.appendChild(table);
styleFeature(feature, true);
@@ -478,7 +491,22 @@
center: feature.getGeometry().getCoordinates(),
}) }, 10);
- $(popup_element).addClass('show');
+ ignore_hashchange = true;
+ window.location.hash = '#!' + feature.getId();
+
+ showPanel(div, function() {
+ if(!ignore_hashchange) {
+ ignore_hashchange = true;
+ window.location.hash = '';
+
+ feature_clicked = null;
+ unstyleSelectedFeatures();
+ route_source.clear();
+
+ if(feature_xhr) feature_xhr.abort();
+ if(feature_timer) clearTimeout(feature_timer);
+ }
+ });
feature_clicked = feature;
}
@@ -621,8 +649,50 @@
// Display popup on click
map.on('singleclick', function(e) {
var point = e.coordinate;
- var feature = map.forEachFeatureAtPixel(e.pixel, function(feature) { return feature; });
+ var features = [];
+ map.forEachFeatureAtPixel(e.pixel, function(feature) { if(feature.getId()) features.push(feature); });
+ if(features.length > 1) {
+ var div = document.createElement('div');
+
+ addParaWithText(div, lang.select_feature);
+
+ for(var i = 0; i < features.length; i++) {
+ var feature = features[i];
+
+ var p = document.createElement('p');
+ var a = document.createElement('a');
+ p.appendChild(a);
+ a.addEventListener('click', function(feature) { return function() {
+ featureClicked(feature);
+ }}(feature));
+
+ var type = '';
+ switch(feature.getId().substr(0, 1)) {
+ case 'v':
+ type = lang.type_vehicle + ' ' + feature.get('vehicle_type').num;
+ break;
+ case 's':
+ type = lang.type_stop;
+ break;
+ case 'p':
+ type = lang.type_stoppoint;
+ break;
+ }
+
+ addElementWithText(a, 'span', type).className = 'small';
+ a.appendChild(document.createTextNode(' '));
+ addElementWithText(a, 'span', feature.get('name'));
+
+ div.appendChild(p);
+ }
+
+ showPanel(div);
+
+ return;
+ }
+
+ var feature = features[0];
if(!feature) {
if(stops_layer.getVisible()) {
feature = returnClosest(point, feature, stops_source.getClosestFeatureToCoordinate(point));
@@ -641,6 +711,10 @@
featureClicked(feature);
});
+
+ fail_element.addEventListener('click', function() {
+ fail_element.style.top = '-10em';
+ });
// Change mouse cursor when over marker
map.on('pointermove', function(e) {
--
Gitblit v1.9.1