@bmlt-enabled/croutonjs 4.3.2 → 4.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/crouton.js CHANGED
@@ -15468,7 +15468,7 @@ function Crouton(config) {
15468
15468
  self.distanceTabAllowed = false;
15469
15469
  self.favoritesOn = false;
15470
15470
  self.config = {
15471
- version: '4.3.2', // CroutonJS version for debugging
15471
+ version: '4.3.3', // CroutonJS version for debugging
15472
15472
  on_complete: null, // Javascript function to callback when data querying is completed.
15473
15473
  root_server: null, // The root server to use.
15474
15474
  placeholder_id: "bmlt-tabs", // The DOM id that will be used for rendering
@@ -17747,7 +17747,7 @@ function MeetingMap(inConfig) {
17747
17747
  filterVisible(false);
17748
17748
  gSearchPoint = {"lat": position.lat, "lng": position.lng};
17749
17749
  crouton.updateDistances();
17750
- const locationSearchResult = gDelegate.getZoomAdjustedBounds(gSearchPoint, filterMeetingsAndBounds, config.locationSearchZoom ?? 12);
17750
+ const locationSearchResult = gDelegate.getZoomAdjustedBounds(gSearchPoint, filterMeetingsAndBounds, config.locationSearchZoom ?? 12, findClosestMeetingLatLng(gSearchPoint));
17751
17751
  gDelegate.flyToFixedZoom(position, locationSearchResult.zoom, filterVisible);
17752
17752
  filterVisible(true);
17753
17753
  setLocationSearchButtonLabel(crouton.localization.getWord('closest meetings'));
@@ -17911,7 +17911,7 @@ function MeetingMap(inConfig) {
17911
17911
  const centerAndBounds = gDelegate.getGeocodeCenterAndBounds(resp, i);
17912
17912
  if (!centerAndBounds) return;
17913
17913
  const zoom = calcZoomThatContainsBoundingBox(centerAndBounds);
17914
- const locationSearchResult = gDelegate.getZoomAdjustedBounds(gSearchPoint, filterMeetingsAndBounds, zoom);
17914
+ const locationSearchResult = gDelegate.getZoomAdjustedBounds(gSearchPoint, filterMeetingsAndBounds, zoom, findClosestMeetingLatLng(gSearchPoint));
17915
17915
  gDelegate.flyToFixedZoom(gSearchPoint, locationSearchResult.zoom, filterVisible);
17916
17916
  searchResponseCallback();
17917
17917
  })
@@ -17975,6 +17975,16 @@ function MeetingMap(inConfig) {
17975
17975
  function locationSearchGeocodeInitial(resp) {
17976
17976
  locationSearchGeocode(resp, true);
17977
17977
  }
17978
+ function findClosestMeetingLatLng(center) {
17979
+ return filterMeetings(gAllMeetings).reduce((closest, meeting) => {
17980
+ const meetingLocation = {lat: meeting.latitude, lng: meeting.longitude};
17981
+ const distance = getDistance(center, meetingLocation);
17982
+ if (distance < closest.distance) {
17983
+ return {meetingLocation: meetingLocation, distance: distance};
17984
+ }
17985
+ return closest;
17986
+ }, {meetingLocation: null, distance: Infinity}).meetingLocation;
17987
+ }
17978
17988
  function locationSearchGeocode(resp, initial=false) {
17979
17989
  chooseResponse('bmlt_location_search_modal', resp, function(resp, i) {
17980
17990
  closeModalWindow(gLocationSearchModal);
@@ -17983,7 +17993,8 @@ function MeetingMap(inConfig) {
17983
17993
  let center = centerAndBounds.center;
17984
17994
  filterVisible(false);
17985
17995
  let zoom = calcZoomThatContainsBoundingBox(centerAndBounds);
17986
- gLocationSearchResult = gDelegate.getZoomAdjustedBounds(center, filterMeetingsAndBounds, zoom);
17996
+
17997
+ gLocationSearchResult = gDelegate.getZoomAdjustedBounds(center, filterMeetingsAndBounds, zoom, findClosestMeetingLatLng(center));
17987
17998
  gSearchPoint = {"lat": gLocationSearchResult.center.lat, "lng": gLocationSearchResult.center.lng};
17988
17999
  filterVisible(true, gLocationSearchResult.bounds);
17989
18000
  crouton.updateDistances(initial);
@@ -18048,13 +18059,13 @@ function MeetingMap(inConfig) {
18048
18059
  retrieveGeolocation().then(function(coords) {
18049
18060
  filterVisible(false);
18050
18061
  if (isMapVisible() || !makeFilterVisible) {
18051
- const locationSearchResult = gDelegate.getZoomAdjustedBounds(coords, filterMeetingsAndBounds, config.locationSearchZoom ?? 12);
18062
+ const locationSearchResult = gDelegate.getZoomAdjustedBounds(coords, filterMeetingsAndBounds, config.locationSearchZoom ?? 12, findClosestMeetingLatLng(coords));
18052
18063
  gDelegate.flyToFixedZoom(coords, locationSearchResult.zoom, () => {
18053
18064
  filterVisible(makeFilterVisible);
18054
18065
  if (makeFilterVisible) setLocationSearchButtonLabel(crouton.localization.getWord('closest meetings'));
18055
18066
  });
18056
18067
  } else {
18057
- gLocationSearchResult = gDelegate.getZoomAdjustedBounds(coords, filterMeetingsAndBounds, config.locationSearchZoom ?? 12);
18068
+ gLocationSearchResult = gDelegate.getZoomAdjustedBounds(coords, filterMeetingsAndBounds, config.locationSearchZoom ?? 12, findClosestMeetingLatLng(coords));
18058
18069
  filterVisible(true, gLocationSearchResult.bounds);
18059
18070
  setLocationSearchButtonLabel(crouton.localization.getWord('closest meetings'));
18060
18071
  }
@@ -18588,129 +18599,139 @@ MeetingMap.prototype.hasMapSearch = null;
18588
18599
  MeetingMap.prototype.createLocationSearchButton = null;
18589
18600
 
18590
18601
  function MapDelegate(config) {
18591
- const shadowUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/NAMarkerS.png"
18602
+ const shadowUrl = config.BMLTPlugin_images
18603
+ ? config.BMLTPlugin_images + "/NAMarkerS.png"
18592
18604
  : "data:image/png;base64,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";
18593
- let iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/NAMarker.png"
18605
+ let iconUrl = config.BMLTPlugin_images
18606
+ ? config.BMLTPlugin_images + "/NAMarker.png"
18594
18607
  : "data:image/png;base64,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";
18595
18608
 
18596
- var g_icon_image_single = L.icon({
18609
+ var g_icon_image_single = L.icon({
18597
18610
  iconUrl: iconUrl,
18598
18611
  shadowUrl: shadowUrl,
18599
- iconSize: [23, 32], // size of the icon
18600
- shadowSize: [43, 32], // size of the shadow
18601
- iconAnchor: [12, 32], // point of the icon which will correspond to marker's location
18602
- shadowAnchor: [12, 32], // the same for the shadow
18603
- popupAnchor: [0, -32] // point from which the popup should open relative to the iconAnchor
18612
+ iconSize: [23, 32], // size of the icon
18613
+ shadowSize: [43, 32], // size of the shadow
18614
+ iconAnchor: [12, 32], // point of the icon which will correspond to marker's location
18615
+ shadowAnchor: [12, 32], // the same for the shadow
18616
+ popupAnchor: [0, -32], // point from which the popup should open relative to the iconAnchor
18604
18617
  });
18605
- iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/NAMarkerG.png"
18618
+ iconUrl = config.BMLTPlugin_images
18619
+ ? config.BMLTPlugin_images + "/NAMarkerG.png"
18606
18620
  : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAhCAYAAAAyCTAQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADTRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDQuMi4yLWMwNjMgNTMuMzUyNjI0LCAyMDA4LzA3LzMwLTE4OjA1OjQxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOklwdGM0eG1wQ29yZT0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcENvcmUvMS4wL3htbG5zLyIKICAgeG1wUmlnaHRzOldlYlN0YXRlbWVudD0iIgogICBwaG90b3Nob3A6QXV0aG9yc1Bvc2l0aW9uPSIiPgogICA8ZGM6cmlnaHRzPgogICAgPHJkZjpBbHQ+CiAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ii8+CiAgICA8L3JkZjpBbHQ+CiAgIDwvZGM6cmlnaHRzPgogICA8ZGM6Y3JlYXRvcj4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkvPgogICAgPC9yZGY6U2VxPgogICA8L2RjOmNyZWF0b3I+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+TkFNYXJrZXI8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcFJpZ2h0czpVc2FnZVRlcm1zPgogICAgPHJkZjpBbHQ+CiAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ii8+CiAgICA8L3JkZjpBbHQ+CiAgIDwveG1wUmlnaHRzOlVzYWdlVGVybXM+CiAgIDxJcHRjNHhtcENvcmU6Q3JlYXRvckNvbnRhY3RJbmZvCiAgICBJcHRjNHhtcENvcmU6Q2lBZHJFeHRhZHI9IiIKICAgIElwdGM0eG1wQ29yZTpDaUFkckNpdHk9IiIKICAgIElwdGM0eG1wQ29yZTpDaUFkclJlZ2lvbj0iIgogICAgSXB0YzR4bXBDb3JlOkNpQWRyUGNvZGU9IiIKICAgIElwdGM0eG1wQ29yZTpDaUFkckN0cnk9IiIKICAgIElwdGM0eG1wQ29yZTpDaVRlbFdvcms9IiIKICAgIElwdGM0eG1wQ29yZTpDaUVtYWlsV29yaz0iIgogICAgSXB0YzR4bXBDb3JlOkNpVXJsV29yaz0iIi8+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7HRMckAAAG20lEQVR42qyWeXBV9RXHP/fet+QlL+QlPAgkeZIFxAWxqWBVagVKYtQUUTvtSIeKLYNY24pY/MPptA50nI4OnXbGzojVoSLNdFGJ6ci0MRSo1BZcILgQgglGSdJsL9vL2+679/bcBasVpON4Zn7v3d/2Pef3Pcvvp/DpskjaLQFYmq9QLf++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";
18607
18621
  var g_icon_image_multi = L.icon({
18608
18622
  iconUrl: iconUrl,
18609
18623
  shadowUrl: shadowUrl,
18610
- iconSize: [23, 32], // size of the icon
18611
- shadowSize: [43, 32], // size of the shadow
18612
- iconAnchor: [12, 32], // point of the icon which will correspond to marker's location
18613
- shadowAnchor: [12, 32], // the same for the shadow
18614
- popupAnchor: [0, -32] // point from which the popup should open relative to the iconAnchor
18624
+ iconSize: [23, 32], // size of the icon
18625
+ shadowSize: [43, 32], // size of the shadow
18626
+ iconAnchor: [12, 32], // point of the icon which will correspond to marker's location
18627
+ shadowAnchor: [12, 32], // the same for the shadow
18628
+ popupAnchor: [0, -32], // point from which the popup should open relative to the iconAnchor
18615
18629
  });
18616
- iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/NAMarkerSel.png"
18630
+ iconUrl = config.BMLTPlugin_images
18631
+ ? config.BMLTPlugin_images + "/NAMarkerSel.png"
18617
18632
  : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAhCAYAAAAyCTAQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/JpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wUmlnaHRzOk1hcmtlZD0iRmFsc2UiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEFFRUI5RkFCQkM0MTFFMEFEOEJGMzBCOTRGRDNBMTMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEFFRUI5RjlCQkM0MTFFMEFEOEJGMzBCOTRGRDNBMTMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTMyBNYWNpbnRvc2giPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0idXVpZDo5NkJFNTVGQjQ5MDhEQzExQUFBN0ZDRDFGNTZEMTYyMiIgc3RSZWY6ZG9jdW1lbnRJRD0idXVpZDpE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";
18618
18633
  var g_icon_image_selected = L.icon({
18619
18634
  iconUrl: iconUrl,
18620
18635
  shadowUrl: shadowUrl,
18621
- iconSize: [23, 32], // size of the icon
18622
- shadowSize: [43, 32], // size of the shadow
18623
- iconAnchor: [12, 32], // point of the icon which will correspond to marker's location
18624
- shadowAnchor: [12, 32], // the same for the shadow
18625
- popupAnchor: [12, -32] // point from which the popup should open relative to the iconAnchor
18626
- });
18627
- iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/SearchPoint.png"
18636
+ iconSize: [23, 32], // size of the icon
18637
+ shadowSize: [43, 32], // size of the shadow
18638
+ iconAnchor: [12, 32], // point of the icon which will correspond to marker's location
18639
+ shadowAnchor: [12, 32], // the same for the shadow
18640
+ popupAnchor: [12, -32], // point from which the popup should open relative to the iconAnchor
18641
+ });
18642
+ iconUrl = config.BMLTPlugin_images
18643
+ ? config.BMLTPlugin_images + "/SearchPoint.png"
18628
18644
  : "data:image/png;base64,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";
18629
18645
  var g_icon_image_searchpoimt = L.icon({
18630
18646
  iconUrl: iconUrl,
18631
18647
  shadowUrl: shadowUrl,
18632
- iconSize: [23, 32], // size of the icon
18633
- shadowSize: [43, 32], // size of the shadow
18634
- iconAnchor: [12, 32], // point of the icon which will correspond to marker's location
18635
- shadowAnchor: [12, 32], // the same for the shadow
18636
- popupAnchor: [12, -32] // point from which the popup should open relative to the iconAnchor
18637
- });
18638
- var gAllMarkers = []; ///< Holds all the markers.
18648
+ iconSize: [23, 32], // size of the icon
18649
+ shadowSize: [43, 32], // size of the shadow
18650
+ iconAnchor: [12, 32], // point of the icon which will correspond to marker's location
18651
+ shadowAnchor: [12, 32], // the same for the shadow
18652
+ popupAnchor: [12, -32], // point from which the popup should open relative to the iconAnchor
18653
+ });
18654
+ var gAllMarkers = []; ///< Holds all the markers.
18639
18655
  var gMainMap;
18640
18656
  var gTileLayer;
18641
18657
  var gClusterLayer = null;
18642
18658
  var gSearchPointMarker = false;
18643
18659
  var gOpenMarker = false;
18644
18660
  var gDiv = null;
18645
- function createMap(inDiv, inCenter, inHidden = false) {
18646
- if (! inCenter ) return null;
18647
- gDiv = inDiv;
18648
- if ( inHidden ) {
18649
- gDiv.style.height = 'auto';
18650
- gDiv.style.marginBottom = '10px';
18661
+ function createMap(inDiv, inCenter, inHidden = false) {
18662
+ if (!inCenter) return null;
18663
+ gDiv = inDiv;
18664
+ if (inHidden) {
18665
+ gDiv.style.height = "auto";
18666
+ gDiv.style.marginBottom = "10px";
18651
18667
  gMainMap = null;
18652
18668
  return gDiv;
18653
18669
  }
18654
18670
  myOptions = {
18655
- 'minZoom': config.minZoom,
18656
- 'maxZoom': config.maxZoom,
18657
- 'doubleClickZoom' : false,
18658
- 'scrollWheelZoom' : false
18671
+ minZoom: config.minZoom,
18672
+ maxZoom: config.maxZoom,
18673
+ doubleClickZoom: false,
18674
+ scrollWheelZoom: false,
18659
18675
  };
18660
18676
  myOptions = Object.assign(myOptions, {
18661
- 'center': new L.latLng ( inCenter.latitude, inCenter.longitude ),
18662
- 'zoom': inCenter.zoom});
18663
- var pixel_width = inDiv.offsetWidth;
18677
+ center: new L.latLng(inCenter.latitude, inCenter.longitude),
18678
+ zoom: inCenter.zoom,
18679
+ });
18680
+ var pixel_width = inDiv.offsetWidth;
18664
18681
  if (pixel_width == 0) {
18665
18682
  pixel_width = inDiv.parentNode.offsetWidth;
18666
18683
  }
18667
- var pixel_height = inDiv.offsetHeight;
18684
+ var pixel_height = parseInt(
18685
+ jQuery(inDiv).css("height").replace("px", ""),
18686
+ );
18668
18687
  if (pixel_height == 0) {
18669
18688
  pixel_height = pixel_width;
18670
18689
  }
18671
- if (pixel_height > pixel_width*1.4) {
18672
- inDiv.style.height = (pixel_width*1.6)+'px';
18690
+ if (pixel_height > pixel_width) {
18691
+ jQuery(inDiv).css("height", pixel_width + "px");
18673
18692
  }
18674
- gMainMap = new L.Map ( inDiv, myOptions );
18675
- gTileLayer = L.tileLayer(config.tileUrl,config.tileOptions).addTo(gMainMap);
18676
- gMainMap.zoomControl.setPosition('bottomright');
18677
- gMainMap.on('moveend',function() {
18693
+ gMainMap = new L.Map(inDiv, myOptions);
18694
+ gTileLayer = L.tileLayer(config.tileUrl, config.tileOptions).addTo(
18695
+ gMainMap,
18696
+ );
18697
+ gMainMap.zoomControl.setPosition("bottomright");
18698
+ gMainMap.on("moveend", function () {
18678
18699
  gTileLayer.redraw();
18679
18700
  });
18680
- return gMainMap;
18681
- }
18682
- function addListener(ev,f,once) {
18701
+ return gMainMap;
18702
+ }
18703
+ function addListener(ev, f, once) {
18683
18704
  if (!gMainMap) return;
18684
- if (ev=='idle') {
18685
- ev = 'moveend';
18705
+ if (ev == "idle") {
18706
+ ev = "moveend";
18686
18707
  }
18687
- if (ev=='dragstart') {
18688
- ev = 'movestart';
18708
+ if (ev == "dragstart") {
18709
+ ev = "movestart";
18689
18710
  }
18690
- if (ev=='dragend') {
18691
- ev = 'moveend';
18711
+ if (ev == "dragend") {
18712
+ ev = "moveend";
18692
18713
  }
18693
- if (once) {
18714
+ if (once) {
18694
18715
  gMainMap.once(ev, f);
18695
18716
  } else {
18696
18717
  gMainMap.on(ev, f);
18697
18718
  }
18698
- return {'event': ev, 'f': f};
18699
- }
18719
+ return { event: ev, f: f };
18720
+ }
18700
18721
  function removeListener(o) {
18701
18722
  if (!gMainMap) return;
18702
18723
  gMainMap.off(o.event, o.f);
18703
18724
  }
18704
- function flyToFixedZoom(position, zoomLevel, extra=null) {
18725
+ function flyToFixedZoom(position, zoomLevel, extra = null) {
18705
18726
  if (!gMainMap) return;
18706
18727
 
18707
18728
  const latlng = L.latLng(position.lat, position.lng);
18708
- gMainMap.once('moveend', function(ev) {
18729
+ gMainMap.once("moveend", function (ev) {
18709
18730
  if (gMainMap.getZoom() != zoomLevel) {
18710
- gMainMap.once('zoomend',function() {
18731
+ gMainMap.once("zoomend", function () {
18711
18732
  gMainMap.invalidateSize();
18712
18733
  if (extra) {
18713
- gMainMap.once('load moveend', extra);
18734
+ gMainMap.once("load moveend", extra);
18714
18735
  }
18715
18736
  });
18716
18737
  gMainMap.setZoom(zoomLevel);
@@ -18720,12 +18741,15 @@ function MapDelegate(config) {
18720
18741
  });
18721
18742
  gMainMap.flyTo(latlng, zoomLevel);
18722
18743
  }
18723
- function clearAllMarkers ( )
18724
- {
18744
+ function clearAllMarkers() {
18725
18745
  if (!gMainMap) return;
18726
- gAllMarkers && gAllMarkers.forEach((m) => {m.marker.closePopup(); gMainMap.removeLayer(m.marker)});
18746
+ gAllMarkers &&
18747
+ gAllMarkers.forEach((m) => {
18748
+ m.marker.closePopup();
18749
+ gMainMap.removeLayer(m.marker);
18750
+ });
18727
18751
  gAllMarkers = [];
18728
- };
18752
+ }
18729
18753
  function getZoom() {
18730
18754
  if (!gMainMap) return null;
18731
18755
  return gMainMap.getZoom();
@@ -18735,286 +18759,410 @@ function MapDelegate(config) {
18735
18759
  }
18736
18760
  function webMercatorToLatLng(point, zoom) {
18737
18761
  const latLng = croutonMap.webMercatorToLatLng(point, zoom);
18738
- return L.latLng(latLng.lat, latLng.lng);
18762
+ return L.latLng(latLng.lat, latLng.lng);
18739
18763
  }
18740
18764
  function calculateBounds(center, zoom, width, height) {
18741
18765
  const centerPoint = croutonMap.latLngToWebMercator(center, zoom);
18742
- const northeastWebMercator = {x: centerPoint.x-width/2, y: centerPoint.y-height/2};
18743
- const southwestWebMercator = {x: centerPoint.x+width/2, y: centerPoint.y+height/2};
18744
- return L.latLngBounds(webMercatorToLatLng(southwestWebMercator, zoom), webMercatorToLatLng(northeastWebMercator, zoom));
18745
- }
18746
- function calcOffsetWidth(gDiv) {
18747
- let ret = gDiv.offsetWidth;
18748
- if (ret === 0) ret = gDiv.parentElement.offsetWidth;
18749
- return ret;
18750
- }
18766
+ const northeastWebMercator = {
18767
+ x: centerPoint.x - width / 2,
18768
+ y: centerPoint.y - height / 2,
18769
+ };
18770
+ const southwestWebMercator = {
18771
+ x: centerPoint.x + width / 2,
18772
+ y: centerPoint.y + height / 2,
18773
+ };
18774
+ return L.latLngBounds(
18775
+ webMercatorToLatLng(southwestWebMercator, zoom),
18776
+ webMercatorToLatLng(northeastWebMercator, zoom),
18777
+ );
18778
+ }
18779
+ function withinInscribedCircle(center, point, zoom, width, height) {
18780
+ const centerPoint = croutonMap.latLngToWebMercator(center, zoom);
18781
+ const meetingPoint = croutonMap.latLngToWebMercator(point, zoom);
18782
+ const radius = Math.min(width, height) / 2;
18783
+ const distance = Math.sqrt(
18784
+ Math.pow(centerPoint.x - meetingPoint.x, 2) +
18785
+ Math.pow(centerPoint.y - meetingPoint.y, 2),
18786
+ );
18787
+ return distance <= radius;
18788
+ }
18789
+ function calcOffsetWidth(gDiv) {
18790
+ let ret = gDiv.offsetWidth;
18791
+ if (ret === 0) ret = gDiv.parentElement.offsetWidth;
18792
+ return ret;
18793
+ }
18751
18794
  function calculateBoundsFromCenterAndZoom(center, zoomLevel) {
18752
- const mapWidth = calcOffsetWidth(gDiv);
18753
- const mapHeight = parseInt(jQuery(gDiv).css("height").replace("px",""));
18754
- return calculateBounds(center, zoomLevel, mapWidth, mapHeight);
18755
- }
18756
- function getZoomAdjust(filterMeetings,zoomLevel=gMainMap.getZoom(), center=gMainMap.getCenter()) {
18795
+ const mapWidth = calcOffsetWidth(gDiv);
18796
+ const mapHeight = parseInt(
18797
+ jQuery(gDiv).css("height").replace("px", ""),
18798
+ );
18799
+ return calculateBounds(center, zoomLevel, mapWidth, mapHeight);
18800
+ }
18801
+ function getZoomAdjust(
18802
+ filterMeetings,
18803
+ zoomLevel = gMainMap.getZoom(),
18804
+ center = gMainMap.getCenter(),
18805
+ closestMeeting = null,
18806
+ ) {
18757
18807
  if (!gMainMap) return 12;
18808
+ if (config.map_search && isFilterVisible()) return zoomLevel;
18758
18809
  const mapWidth = calcOffsetWidth(gDiv);
18759
- const mapHeight = parseInt(jQuery(gDiv).css("height").replace("px",""));
18760
- ret = zoomLevel;
18761
- if (config.map_search && isFilterVisible()) return ret;
18810
+ const mapHeight = parseInt(
18811
+ jQuery(gDiv).css("height").replace("px", ""),
18812
+ );
18813
+ let ret = zoomLevel;
18762
18814
  var bounds = calculateBounds(center, ret, mapWidth, mapHeight);
18763
- while(filterMeetings(bounds, center).length==0 && ret>config.minZoom) {
18764
- ret -= 1;
18765
- bounds = calculateBounds(center, ret, mapWidth, mapHeight);
18815
+ if (closestMeeting) {
18816
+ while (
18817
+ !withinInscribedCircle(
18818
+ center,
18819
+ closestMeeting,
18820
+ ret,
18821
+ mapWidth,
18822
+ mapHeight,
18823
+ ) &&
18824
+ ret > config.minZoom
18825
+ ) {
18826
+ ret -= 1;
18827
+ }
18828
+ } else {
18829
+ while (
18830
+ filterMeetings(bounds, center).length == 0 &&
18831
+ ret > config.minZoom
18832
+ ) {
18833
+ ret -= 1;
18834
+ bounds = calculateBounds(center, ret, mapWidth, mapHeight);
18835
+ }
18836
+ }
18837
+ // If we didn't zoom out, zoom in if it doesn't lose meetings
18838
+ if (ret == zoomLevel) {
18839
+ let meetingsInBounds = filterMeetings(bounds, center).length;
18840
+ if (meetingsInBounds > 0) {
18841
+ do {
18842
+ ret = ret + 1;
18843
+ if (ret > config.maxZoom) break;
18844
+ var bounds = calculateBounds(
18845
+ center,
18846
+ ret,
18847
+ mapWidth,
18848
+ mapHeight,
18849
+ );
18850
+ } while (
18851
+ filterMeetings(bounds, center).length === meetingsInBounds
18852
+ );
18853
+ ret = ret - 1;
18854
+ }
18766
18855
  }
18767
18856
  return ret;
18768
18857
  }
18769
18858
  function markSearchPoint(inCoords) {
18770
18859
  if (!gMainMap) return;
18771
18860
  if (gSearchPointMarker) gSearchPointMarker.remove();
18772
- gSearchPointMarker = L.marker(inCoords, {icon: g_icon_image_searchpoimt});
18861
+ gSearchPointMarker = L.marker(inCoords, {
18862
+ icon: g_icon_image_searchpoimt,
18863
+ });
18773
18864
  gSearchPointMarker.addTo(gMainMap);
18774
18865
  }
18775
- function createMarker ( inCoords, ///< The long/lat for the marker.
18776
- multi, ///< Flag if marker has multiple meetings
18777
- in_title, ///< The tooltip
18778
- )
18779
- {
18780
- if (!gMainMap) return;
18781
- var in_main_icon = (multi ? g_icon_image_multi : g_icon_image_single);
18782
-
18783
- var marker = L.marker(inCoords, {icon: in_main_icon, title: in_title})
18784
- marker.isMulti = multi;
18785
- if (gClusterLayer) gClusterLayer.addLayer(marker);
18786
- else marker.addTo(gMainMap);
18866
+ function createMarker(
18867
+ inCoords, ///< The long/lat for the marker.
18868
+ multi, ///< Flag if marker has multiple meetings
18869
+ in_title, ///< The tooltip
18870
+ ) {
18871
+ if (!gMainMap) return;
18872
+ var in_main_icon = multi ? g_icon_image_multi : g_icon_image_single;
18787
18873
 
18788
- return marker;
18789
- }
18790
- function bindPopup(marker, in_html, in_ids, openedMarker) {
18791
- if (!in_html) return;
18792
- let highlightRow = function(target) {
18793
- const id = target.id.split('-')[1];
18794
- gOpenMarker = id;
18795
- jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
18796
- jQuery("#meeting-data-row-" + id + " > td").addClass("rowHighlight");
18797
- if (typeof crouton != 'undefined') crouton.dayTabFromId(id);
18798
- }
18799
- marker.bindPopup(in_html);
18800
- marker.on('popupopen', function(e) {
18801
- if (openedMarker && marker.getPopup().getContent().includes("panel-"+openedMarker)) {
18802
- // I want to just do this:
18803
- //jQuery("#panel-"+openedMarker).prop("checked", true);
18804
- // But for some reason, leaflet makes a copy of the popup, so the ID is not unique....
18805
- jQuery("input[type=radio][name=panel]").filter(function() {
18806
- return jQuery(this).attr('id')=="panel-"+openedMarker})
18807
- .each(function(index,value) {
18808
- jQuery(this).prop("checked", true);
18874
+ var marker = L.marker(inCoords, {
18875
+ icon: in_main_icon,
18876
+ title: in_title,
18877
+ });
18878
+ marker.isMulti = multi;
18879
+ if (gClusterLayer) gClusterLayer.addLayer(marker);
18880
+ else marker.addTo(gMainMap);
18881
+
18882
+ return marker;
18883
+ }
18884
+ function bindPopup(marker, in_html, in_ids, openedMarker) {
18885
+ if (!in_html) return;
18886
+ let highlightRow = function (target) {
18887
+ const id = target.id.split("-")[1];
18888
+ gOpenMarker = id;
18889
+ jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
18890
+ jQuery("#meeting-data-row-" + id + " > td").addClass(
18891
+ "rowHighlight",
18892
+ );
18893
+ if (typeof crouton != "undefined") crouton.dayTabFromId(id);
18894
+ };
18895
+ marker.bindPopup(in_html);
18896
+ marker.on("popupopen", function (e) {
18897
+ if (
18898
+ openedMarker &&
18899
+ marker
18900
+ .getPopup()
18901
+ .getContent()
18902
+ .includes("panel-" + openedMarker)
18903
+ ) {
18904
+ // I want to just do this:
18905
+ //jQuery("#panel-"+openedMarker).prop("checked", true);
18906
+ // But for some reason, leaflet makes a copy of the popup, so the ID is not unique....
18907
+ jQuery("input[type=radio][name=panel]")
18908
+ .filter(function () {
18909
+ return (
18910
+ jQuery(this).attr("id") == "panel-" + openedMarker
18911
+ );
18912
+ })
18913
+ .each(function (index, value) {
18914
+ jQuery(this).prop("checked", true);
18915
+ });
18916
+ }
18917
+ marker.setIcon(g_icon_image_selected);
18918
+ gMainMap.on("zoomstart", function () {
18919
+ marker.closePopup();
18920
+ });
18921
+ jQuery("input[type=radio][name=panel]:checked").each(
18922
+ function (index, target) {
18923
+ highlightRow(target);
18924
+ },
18925
+ );
18926
+ jQuery("input[type=radio][name=panel]").change(function () {
18927
+ highlightRow(this);
18809
18928
  });
18810
- }
18811
- marker.setIcon(g_icon_image_selected);
18812
- gMainMap.on('zoomstart',function(){
18813
- marker.closePopup();
18814
18929
  });
18815
- jQuery("input[type=radio][name=panel]:checked").each(function(index, target) {
18816
- highlightRow(target);
18817
- });
18818
- jQuery('input[type=radio][name=panel]').change(function() {
18819
- highlightRow(this);
18820
- });
18821
- });
18822
- marker.on('popupclose', function(e) {
18823
- gOpenMarker = false;
18824
- marker.setIcon(marker.isMulti ? g_icon_image_multi : g_icon_image_single);
18825
- jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
18826
- });
18827
- if (openedMarker && in_ids.includes(parseInt(openedMarker))) {
18828
- marker.openPopup();
18829
- marker.once('add', function() {
18830
- if (!marker.isPopupOpen()) marker.openPopup();
18930
+ marker.on("popupclose", function (e) {
18931
+ gOpenMarker = false;
18932
+ marker.setIcon(
18933
+ marker.isMulti ? g_icon_image_multi : g_icon_image_single,
18934
+ );
18935
+ jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
18831
18936
  });
18937
+ if (openedMarker && in_ids.includes(parseInt(openedMarker))) {
18938
+ marker.openPopup();
18939
+ marker.once("add", function () {
18940
+ if (!marker.isPopupOpen()) marker.openPopup();
18941
+ });
18942
+ }
18943
+ gAllMarkers.push({ ids: in_ids, marker: marker });
18832
18944
  }
18833
- gAllMarkers.push( {ids: in_ids, marker: marker} );
18834
- }
18835
- function addMarkerCallback(marker, cb, in_ids) {
18836
- if (cb) marker.on('click', function() {
18837
- cb(in_ids);
18838
- });
18839
- gAllMarkers.push( {ids: in_ids, marker: marker} );
18840
- }
18841
- function getOpenMarker() {
18842
- return gOpenMarker;
18843
- }
18844
- function openMarker(id) {
18845
- if (!gMainMap) return;
18846
- marker = gAllMarkers.find((m) => m.ids.includes(id));
18847
- if (marker) {
18848
- marker.marker.openPopup();
18849
- jQuery("#panel-"+id).prop('checked', true);
18850
- if (typeof crouton != 'undefined') crouton.dayTabFromId(id);
18851
- }
18852
- jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
18853
- jQuery("#meeting-data-row-" + id + " > td").addClass("rowHighlight");
18854
- }
18855
- function addControl(div,pos,cb) {
18856
- if (!div) return;
18857
- if (!gMainMap) {
18858
- gDiv.appendChild(div);
18859
- return;
18860
- }
18861
- var ControlClass = L.Control.extend({
18862
- onAdd: function (map) {
18945
+ function addMarkerCallback(marker, cb, in_ids) {
18946
+ if (cb)
18947
+ marker.on("click", function () {
18948
+ cb(in_ids);
18949
+ });
18950
+ gAllMarkers.push({ ids: in_ids, marker: marker });
18951
+ }
18952
+ function getOpenMarker() {
18953
+ return gOpenMarker;
18954
+ }
18955
+ function openMarker(id) {
18956
+ if (!gMainMap) return;
18957
+ marker = gAllMarkers.find((m) => m.ids.includes(id));
18958
+ if (marker) {
18959
+ marker.marker.openPopup();
18960
+ jQuery("#panel-" + id).prop("checked", true);
18961
+ if (typeof crouton != "undefined") crouton.dayTabFromId(id);
18962
+ }
18963
+ jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
18964
+ jQuery("#meeting-data-row-" + id + " > td").addClass("rowHighlight");
18965
+ }
18966
+ function addControl(div, pos, cb) {
18967
+ if (!div) return;
18968
+ if (!gMainMap) {
18969
+ gDiv.appendChild(div);
18970
+ return;
18971
+ }
18972
+ var ControlClass = L.Control.extend({
18973
+ onAdd: function (map) {
18863
18974
  return div;
18864
18975
  },
18865
- onRemove: function(map) {
18976
+ onRemove: function (map) {
18866
18977
  // Nothing to do here
18867
- }
18978
+ },
18868
18979
  });
18869
- var controlConstructor = function(opts) {
18980
+ var controlConstructor = function (opts) {
18870
18981
  return new ControlClass(opts);
18871
- }
18982
+ };
18872
18983
  if (cb) {
18873
18984
  const observer = new MutationObserver(function (records) {
18874
- records.forEach(record => {
18875
- record.addedNodes.forEach(n => {
18985
+ records.forEach((record) => {
18986
+ record.addedNodes.forEach((n) => {
18876
18987
  if (n === div) {
18877
18988
  observer.disconnect();
18878
18989
  cb();
18879
18990
  }
18880
18991
  });
18881
- })
18992
+ });
18882
18993
  });
18883
- observer.observe(document, {childList: true, subtree: true});
18994
+ observer.observe(document, { childList: true, subtree: true });
18884
18995
  }
18885
18996
  controlConstructor({ position: pos }).addTo(gMainMap);
18886
- }
18887
- // Low level GeoCoding
18997
+ }
18998
+ // Low level GeoCoding
18888
18999
  function getJSON(url, params, callback) {
18889
19000
  var xmlHttp = new XMLHttpRequest();
18890
- xmlHttp.onreadystatechange = function() {
18891
- if (xmlHttp.readyState !== 4) {
18892
- return;
18893
- }
18894
- var message;
18895
- if (xmlHttp.status !== 200 && xmlHttp.status !== 304) {
18896
- message = '';
18897
- } else if (typeof xmlHttp.response === 'string') {
18898
- // IE doesn't parse JSON responses even with responseType: 'json'.
18899
- try {
18900
- message = JSON.parse(xmlHttp.response);
18901
- } catch (e) {
18902
- // Not a JSON response
18903
- message = xmlHttp.response;
18904
- }
18905
- } else {
18906
- message = xmlHttp.response;
18907
- }
18908
- callback(message);
18909
- };
18910
- xmlHttp.open('GET', url + getParamString(params), true);
18911
- xmlHttp.responseType = 'json';
18912
- xmlHttp.setRequestHeader('Accept', 'application/json');
18913
- xmlHttp.setRequestHeader('Accept', '*/*');
18914
- xmlHttp.send(null);
18915
- };
19001
+ xmlHttp.onreadystatechange = function () {
19002
+ if (xmlHttp.readyState !== 4) {
19003
+ return;
19004
+ }
19005
+ var message;
19006
+ if (xmlHttp.status !== 200 && xmlHttp.status !== 304) {
19007
+ message = "";
19008
+ } else if (typeof xmlHttp.response === "string") {
19009
+ // IE doesn't parse JSON responses even with responseType: 'json'.
19010
+ try {
19011
+ message = JSON.parse(xmlHttp.response);
19012
+ } catch (e) {
19013
+ // Not a JSON response
19014
+ message = xmlHttp.response;
19015
+ }
19016
+ } else {
19017
+ message = xmlHttp.response;
19018
+ }
19019
+ callback(message);
19020
+ };
19021
+ xmlHttp.open("GET", url + getParamString(params), true);
19022
+ xmlHttp.responseType = "json";
19023
+ xmlHttp.setRequestHeader("Accept", "application/json");
19024
+ xmlHttp.setRequestHeader("Accept", "*/*");
19025
+ xmlHttp.send(null);
19026
+ }
18916
19027
  function getParamString(obj, existingUrl, uppercase) {
18917
19028
  var params = [];
18918
19029
  for (var i in obj) {
18919
- var key = encodeURIComponent(uppercase ? i.toUpperCase() : i);
18920
- var value = obj[i];
18921
- if (!L.Util.isArray(value)) {
18922
- params.push(key + '=' + encodeURIComponent(value));
18923
- } else {
18924
- for (var j = 0; j < value.length; j++) {
18925
- params.push(key + '=' + encodeURIComponent(value[j]));
19030
+ var key = encodeURIComponent(uppercase ? i.toUpperCase() : i);
19031
+ var value = obj[i];
19032
+ if (!L.Util.isArray(value)) {
19033
+ params.push(key + "=" + encodeURIComponent(value));
19034
+ } else {
19035
+ for (var j = 0; j < value.length; j++) {
19036
+ params.push(key + "=" + encodeURIComponent(value[j]));
19037
+ }
18926
19038
  }
18927
- }
18928
19039
  }
18929
- return (!existingUrl || existingUrl.indexOf('?') === -1 ? '?' : '&') + params.join('&');
19040
+ return (
19041
+ (!existingUrl || existingUrl.indexOf("?") === -1 ? "?" : "&") +
19042
+ params.join("&")
19043
+ );
18930
19044
  }
18931
19045
  function geocode(query, params, cb) {
18932
19046
  var serviceUrl = config.nominatimUrl;
18933
- if (!serviceUrl) serviceUrl = 'https://nominatim.openstreetmap.org/';
19047
+ if (!serviceUrl) serviceUrl = "https://nominatim.openstreetmap.org/";
18934
19048
  getJSON(
18935
- serviceUrl + 'search',
18936
- L.extend(
18937
- {
18938
- q: query,
18939
- limit: 5,
18940
- format: 'json',
18941
- addressdetails: 1,
18942
- layer: "address"
18943
- },
18944
- params
18945
- ),
18946
- L.bind(function(data) {
18947
- if (data && data.length) {
18948
- results = data.reduce(function(carry, d) {
18949
- if (!carry.find((item) => item.name === d.display_name)) {
18950
- var bbox = d.boundingbox.map((c) => parseFloat(c));
18951
- carry.push({
18952
- name: d.display_name,
18953
- bbox: L.latLngBounds([bbox[0], bbox[2]], [bbox[1], bbox[3]]),
18954
- center: L.latLng(d.lat, d.lon),
18955
- properties: d
18956
- });
18957
- }
18958
- return carry;
18959
- }, []);
18960
- cb(results);
18961
- } else {
18962
- alert ( crouton.localization.getWord("address_lookup_fail") );
18963
- }
18964
- }, this)
19049
+ serviceUrl + "search",
19050
+ L.extend(
19051
+ {
19052
+ q: query,
19053
+ limit: 5,
19054
+ format: "json",
19055
+ addressdetails: 1,
19056
+ layer: "address",
19057
+ },
19058
+ params,
19059
+ ),
19060
+ L.bind(function (data) {
19061
+ if (data && data.length) {
19062
+ results = data.reduce(function (carry, d) {
19063
+ if (
19064
+ !carry.find((item) => item.name === d.display_name)
19065
+ ) {
19066
+ var bbox = d.boundingbox.map((c) => parseFloat(c));
19067
+ carry.push({
19068
+ name: d.display_name,
19069
+ bbox: L.latLngBounds(
19070
+ [bbox[0], bbox[2]],
19071
+ [bbox[1], bbox[3]],
19072
+ ),
19073
+ center: L.latLng(d.lat, d.lon),
19074
+ properties: d,
19075
+ });
19076
+ }
19077
+ return carry;
19078
+ }, []);
19079
+ cb(results);
19080
+ } else {
19081
+ alert(crouton.localization.getWord("address_lookup_fail"));
19082
+ }
19083
+ }, this),
18965
19084
  );
18966
- };
18967
- function getGeocodingChoices(in_geocode_response) {
18968
- if (!Array.isArray(in_geocode_response)) return [];
18969
- return in_geocode_response.map((r) => r.name);
18970
19085
  }
18971
- function getZoomAdjustedBounds(center, filterMeetings, zoomLevel) {
19086
+ function getGeocodingChoices(in_geocode_response) {
19087
+ if (!Array.isArray(in_geocode_response)) return [];
19088
+ return in_geocode_response.map((r) => r.name);
19089
+ }
19090
+ function getZoomAdjustedBounds(
19091
+ center,
19092
+ filterMeetings,
19093
+ zoomLevel,
19094
+ closestMeeting = null,
19095
+ ) {
18972
19096
  const mapWidth = calcOffsetWidth(gDiv);
18973
- const mapHeight = parseInt(jQuery(gDiv).css("height").replace("px",""));
19097
+ const mapHeight = parseInt(
19098
+ jQuery(gDiv).css("height").replace("px", ""),
19099
+ );
18974
19100
  if (center) {
18975
- const zoom = getZoomAdjust(filterMeetings, zoomLevel, center);
19101
+ const zoom = getZoomAdjust(
19102
+ filterMeetings,
19103
+ zoomLevel,
19104
+ center,
19105
+ closestMeeting,
19106
+ );
18976
19107
  const bounds = calculateBounds(center, zoom, mapWidth, mapHeight);
18977
- const ret = {"center": center, "bounds": bounds, "zoom": zoom};
19108
+ const ret = { center: center, bounds: bounds, zoom: zoom };
18978
19109
  return ret;
18979
19110
  } else {
18980
- alert ( crouton.localization.getWord("address_lookup_fail") );
19111
+ alert(crouton.localization.getWord("address_lookup_fail"));
18981
19112
  return null;
18982
19113
  }
18983
19114
  }
18984
- function getGeocodeCenterAndBounds (in_geocode_response, i=0) {
18985
- if ( in_geocode_response && in_geocode_response[i] ) {
18986
- return {
18987
- center: {lat: in_geocode_response[i].center.lat, lng: in_geocode_response[i].center.lng},
18988
- southWest: {lat: in_geocode_response[i].bbox.getSouthWest().lat, lng: in_geocode_response[i].bbox.getSouthWest().lng},
18989
- northEast: {lat: in_geocode_response[i].bbox.getNorthEast().lat, lng: in_geocode_response[i].bbox.getNorthEast().lng},
18990
- };
18991
- } else {
18992
- alert ( crouton.localization.getWord("address_lookup_fail") );
18993
- };
18994
- };
18995
- function callGeocoder(in_loc, callback) {
19115
+ function getGeocodeCenterAndBounds(in_geocode_response, i = 0) {
19116
+ if (in_geocode_response && in_geocode_response[i]) {
19117
+ return {
19118
+ center: {
19119
+ lat: in_geocode_response[i].center.lat,
19120
+ lng: in_geocode_response[i].center.lng,
19121
+ },
19122
+ southWest: {
19123
+ lat: in_geocode_response[i].bbox.getSouthWest().lat,
19124
+ lng: in_geocode_response[i].bbox.getSouthWest().lng,
19125
+ },
19126
+ northEast: {
19127
+ lat: in_geocode_response[i].bbox.getNorthEast().lat,
19128
+ lng: in_geocode_response[i].bbox.getNorthEast().lng,
19129
+ },
19130
+ };
19131
+ } else {
19132
+ alert(crouton.localization.getWord("address_lookup_fail"));
19133
+ }
19134
+ }
19135
+ function callGeocoder(in_loc, callback) {
18996
19136
  geoCodeParams = {};
18997
- if (config.region && config.region.trim() !== '') {
19137
+ if (config.region && config.region.trim() !== "") {
18998
19138
  geoCodeParams.countrycodes = config.region;
18999
19139
  }
19000
- if (config.bounds
19001
- && isNumber(config.bounds.north)
19002
- && isNumber(config.bounds.east)
19003
- && isNumber(config.bounds.south)
19004
- && isNumber(config.bounds.west)) {
19005
- geoCodeParams.viewbox = config.bounds.west+","+config.bounds.south+","+
19006
- config.bounds.east+","+config.bounds.north;
19007
- }
19008
- geocode(in_loc, geoCodeParams, callback);
19009
- }
19140
+ if (
19141
+ config.bounds &&
19142
+ isNumber(config.bounds.north) &&
19143
+ isNumber(config.bounds.east) &&
19144
+ isNumber(config.bounds.south) &&
19145
+ isNumber(config.bounds.west)
19146
+ ) {
19147
+ geoCodeParams.viewbox =
19148
+ config.bounds.west +
19149
+ "," +
19150
+ config.bounds.south +
19151
+ "," +
19152
+ config.bounds.east +
19153
+ "," +
19154
+ config.bounds.north;
19155
+ }
19156
+ geocode(in_loc, geoCodeParams, callback);
19157
+ }
19010
19158
  function isNumber(x) {
19011
- if (typeof x === 'number') return true;
19012
- if (typeof x === 'string' && x.trim() !== '' && !isNaN(x)) return true;
19159
+ if (typeof x === "number") return true;
19160
+ if (typeof x === "string" && x.trim() !== "" && !isNaN(x)) return true;
19013
19161
  return false;
19014
19162
  }
19015
19163
  function contains(bounds, lat, lng) {
19016
19164
  if (!gMainMap) return true;
19017
- return bounds.contains(L.latLng ( lat, lng ));
19165
+ return bounds.contains(L.latLng(lat, lng));
19018
19166
  }
19019
19167
  function getBounds() {
19020
19168
  if (!gMainMap) return null;
@@ -19026,7 +19174,10 @@ function addControl(div,pos,cb) {
19026
19174
  }
19027
19175
  function fitBounds(locations) {
19028
19176
  if (!gMainMap) return;
19029
- const bounds = locations.reduce(function(b,lat_lng) {b.extend(lat_lng); return b;}, L.latLngBounds());
19177
+ const bounds = locations.reduce(function (b, lat_lng) {
19178
+ b.extend(lat_lng);
19179
+ return b;
19180
+ }, L.latLngBounds());
19030
19181
  gMainMap.fitBounds(bounds);
19031
19182
  }
19032
19183
  function createClusterLayer() {
@@ -19043,50 +19194,68 @@ function addControl(div,pos,cb) {
19043
19194
  gClusterLayer = null;
19044
19195
  }
19045
19196
  function clickSearch(ev, cb) {
19046
- L.DomUtil.addClass(gMainMap._container,'crosshair-cursor-enabled');
19047
- gMainMap.once('click',function(e) {
19048
- gMainMap.once('click',function(e) {
19049
- L.DomUtil.removeClass(gMainMap._container,'crosshair-cursor-enabled');
19050
- cb(e.latlng.lat,e.latlng.lng);
19051
- })
19197
+ L.DomUtil.addClass(gMainMap._container, "crosshair-cursor-enabled");
19198
+ gMainMap.once("click", function (e) {
19199
+ gMainMap.once("click", function (e) {
19200
+ L.DomUtil.removeClass(
19201
+ gMainMap._container,
19202
+ "crosshair-cursor-enabled",
19203
+ );
19204
+ cb(e.latlng.lat, e.latlng.lng);
19205
+ });
19052
19206
  });
19053
19207
  }
19054
19208
  function getCorners(lat_lngs = false) {
19055
- var bounds = lat_lngs
19056
- ? lat_lngs.reduce(function(b,lat_lng) {b.extend(lat_lng); return b;}, L.latLngBounds())
19057
- : gMainMap.getBounds();
19209
+ var bounds = lat_lngs
19210
+ ? lat_lngs.reduce(function (b, lat_lng) {
19211
+ b.extend(lat_lng);
19212
+ return b;
19213
+ }, L.latLngBounds())
19214
+ : gMainMap.getBounds();
19058
19215
 
19059
- return {
19060
- "ne" : {"lat": bounds.getNorthEast().lat, "lng": bounds.getNorthEast().lng},
19061
- "sw" : {"lat": bounds.getSouthWest().lat, "lng": bounds.getSouthWest().lng}
19062
- }
19063
- }
19216
+ return {
19217
+ ne: {
19218
+ lat: bounds.getNorthEast().lat,
19219
+ lng: bounds.getNorthEast().lng,
19220
+ },
19221
+ sw: {
19222
+ lat: bounds.getSouthWest().lat,
19223
+ lng: bounds.getSouthWest().lng,
19224
+ },
19225
+ };
19226
+ }
19064
19227
  function getCenter() {
19065
- return {"lat": gMainMap.getCenter().lat, "lng": gMainMap.getCenter().lng};
19228
+ return { lat: gMainMap.getCenter().lat, lng: gMainMap.getCenter().lng };
19066
19229
  }
19067
19230
  function modalOn() {
19068
- if (gMainMap) gMainMap.dragging.disable()
19231
+ if (gMainMap) gMainMap.dragging.disable();
19069
19232
  }
19070
19233
  function modalOff() {
19071
- if (gMainMap) gMainMap.dragging.enable()
19234
+ if (gMainMap) gMainMap.dragging.enable();
19072
19235
  }
19073
19236
  function afterInit(doNotWait, f) {
19074
19237
  f();
19075
19238
  }
19076
- function returnTrue() {return true;}
19239
+ function returnTrue() {
19240
+ return true;
19241
+ }
19077
19242
  function isMapDefined() {
19078
- return (gMainMap !== null);
19243
+ return gMainMap !== null;
19079
19244
  }
19080
19245
  function isMapVisible() {
19081
- return (gMainMap !== null) && gMainMap.getSize().x > 0 && gMainMap.getSize().y > 0;
19246
+ return (
19247
+ gMainMap !== null &&
19248
+ gMainMap.getSize().x > 0 &&
19249
+ gMainMap.getSize().y > 0
19250
+ );
19082
19251
  }
19083
- this.createMap = createMap;
19084
- this.addListener = addListener;
19252
+ this.createMap = createMap;
19253
+ this.addListener = addListener;
19085
19254
  this.removeListener = removeListener;
19086
- this.addControl = addControl;
19255
+ this.addControl = addControl;
19087
19256
  this.flyToFixedZoom = flyToFixedZoom;
19088
- this.clearAllMarkers = clearAllMarkers;
19089
- this.callGeocoder = callGeocoder;
19257
+ this.clearAllMarkers = clearAllMarkers;
19258
+ this.callGeocoder = callGeocoder;
19090
19259
  this.getZoomAdjustedBounds = getZoomAdjustedBounds;
19091
19260
  this.getZoom = getZoom;
19092
19261
  this.createMarker = createMarker;
@@ -19149,6 +19318,7 @@ MapDelegate.prototype.getCenter = null;
19149
19318
  MapDelegate.prototype.markSearchPoint = null;
19150
19319
  MapDelegate.prototype.getOpenMarker = null;
19151
19320
  MapDelegate.prototype.calculateBoundsFromCenterAndZoom = null;
19321
+
19152
19322
  /* @preserve
19153
19323
  * Leaflet 1.9.4+v1.d15112c, a JS library for interactive maps. https://leafletjs.com
19154
19324
  * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade