From 07dae439ef2617451cd0aa4e9ecebf5d86f5e078 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <jkowalsk@student.agh.edu.pl> Date: Sat, 01 Sep 2018 10:56:34 +0000 Subject: [PATCH] Merge pull request #15 from tsedor/patch-1 --- map.js | 120 ++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 97 insertions(+), 23 deletions(-) diff --git a/map.js b/map.js index fa587a0..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; } @@ -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