@bmlt-enabled/croutonjs 4.3.2 → 4.3.4

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-gmaps.js CHANGED
@@ -12982,7 +12982,7 @@ function CroutonHandlebarsExtensions() {
12982
12982
  crouton_Handlebars.registerPartial('header', hbs_Crouton.templates['header']);
12983
12983
  crouton_Handlebars.registerPartial('byfields', hbs_Crouton.templates['byfield']);
12984
12984
  crouton_Handlebars.registerPartial('formatPopup', hbs_Crouton.templates['formatPopup']);
12985
- crouton_Handlebars.registerPartial('meetingModal', "<a tabindex='0' href='#' onclick='crouton.meetingModal({{this.id_bigint}})'><span class='glyphicon glyphicon-search' aria-hidden='true'></span>{{this.meeting_name}}</a>");
12985
+ crouton_Handlebars.registerPartial('meetingModal', "<a tabindex='0' onclick='crouton.meetingModal({{this.id_bigint}})'><span class='glyphicon glyphicon-search' aria-hidden='true'></span>{{this.meeting_name}}</a>");
12986
12986
  crouton_Handlebars.registerPartial('meetingLink', `
12987
12987
  {{#if this.meeting_details_url}}
12988
12988
  <a href='{{{this.meeting_details_url}}}'><span class='glyphicon glyphicon-search' aria-hidden='true'></span>{{this.meeting_name}}</a>
@@ -13388,7 +13388,7 @@ this["hbs_Crouton"]["templates"]["group3ColumnRow"] = Handlebars.template({"0":f
13388
13388
 
13389
13389
  return "<td class=\"bmlt-column1\" "
13390
13390
  + ((stack1 = (lookupProperty(helpers,"getWord")||(depth0 && lookupProperty(depth0,"getWord"))||alias2).call(alias1,"css-textAlign",{"name":"getWord","hash":{},"data":data,"loc":{"start":{"line":1,"column":25},"end":{"line":1,"column":54}}})) != null ? stack1 : "")
13391
- + ">\n <div class='meeting-name'>\n <a tabindex='0' href='#' onclick='crouton.meetingModal("
13391
+ + ">\n <div class='meeting-name'>\n <a tabindex='0' onclick='crouton.meetingModal("
13392
13392
  + alias4(alias3((depth0 != null ? lookupProperty(depth0,"id_bigint") : depth0), depth0))
13393
13393
  + ")'><span class='glyphicon glyphicon-search' aria-hidden='true'></span>"
13394
13394
  + alias4(alias3((depth0 != null ? lookupProperty(depth0,"meeting_name") : depth0), depth0))
@@ -13622,10 +13622,10 @@ this["hbs_Crouton"]["templates"]["header"] = Handlebars.template({"0":function(c
13622
13622
  return undefined
13623
13623
  };
13624
13624
 
13625
- return " <li><a href=\"#tab"
13625
+ return " <li><a href=\"./#tab"
13626
13626
  + alias1(container.lambda(depth0, depth0))
13627
13627
  + "\" data-toggle=\"tab\">"
13628
- + alias1((lookupProperty(helpers,"getDayOfTheWeek")||(depth0 && lookupProperty(depth0,"getDayOfTheWeek"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"getDayOfTheWeek","hash":{},"data":data,"loc":{"start":{"line":38,"column":61},"end":{"line":38,"column":85}}}))
13628
+ + alias1((lookupProperty(helpers,"getDayOfTheWeek")||(depth0 && lookupProperty(depth0,"getDayOfTheWeek"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),depth0,{"name":"getDayOfTheWeek","hash":{},"data":data,"loc":{"start":{"line":38,"column":63},"end":{"line":38,"column":87}}}))
13629
13629
  + "</a></li>\n";
13630
13630
  },"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) {
13631
13631
  var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
@@ -14092,7 +14092,7 @@ this["hbs_Crouton"]["templates"]["meetingDetailsButton"] = Handlebars.template({
14092
14092
 
14093
14093
  return " <div>\n <a onclick='crouton.meetingModal("
14094
14094
  + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,"id_bigint") : depth0), depth0))
14095
- + ")' tabindex='0' href='#' class='map-button btn btn-primary btn-xs'>\n <span class='glyphicon glyphicon-search' aria-hidden='true'></span>\n "
14095
+ + ")' tabindex='0' class='map-button btn btn-primary btn-xs'>\n <span class='glyphicon glyphicon-search' aria-hidden='true'></span>\n "
14096
14096
  + alias1((lookupProperty(helpers,"getWord")||(depth0 && lookupProperty(depth0,"getWord"))||container.hooks.helperMissing).call(depth0 != null ? depth0 : (container.nullContext || {}),"meeting details",{"name":"getWord","hash":{},"data":data,"loc":{"start":{"line":4,"column":5},"end":{"line":4,"column":34}}}))
14097
14097
  + "\n </a>\n </div>\n";
14098
14098
  },"useData":true});
@@ -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.4', // 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
@@ -15726,7 +15726,7 @@ function Crouton(config) {
15726
15726
  self.dayTabFromId = function(id) {
15727
15727
  const day_id = self.meetingData.find((m)=>m.id_bigint == id).weekday_tinyint;
15728
15728
  self.hideAllPages();
15729
- jQuery('.nav-tabs a[href="#tab' + day_id + '"]').tab('show');
15729
+ jQuery('.nav-tabs a[href="./#tab' + day_id + '"]').tab('show');
15730
15730
  jQuery("#" + day_id).removeClass("hide").addClass("show");
15731
15731
  };
15732
15732
  /**
@@ -17059,7 +17059,7 @@ Crouton.prototype.render = function(doMeetingMap = false, fitBounds=true) {
17059
17059
  const d = new Date();
17060
17060
  let n = d.getDay();
17061
17061
  n++;
17062
- jQuery('.nav-tabs a[href="#tab' + n + '"]').tab('show');
17062
+ jQuery('.nav-tabs a[href="./#tab' + n + '"]').tab('show');
17063
17063
  jQuery('#tab' + n).show();
17064
17064
  }
17065
17065
 
@@ -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,514 +18599,751 @@ MeetingMap.prototype.hasMapSearch = null;
18588
18599
  MeetingMap.prototype.createLocationSearchButton = null;
18589
18600
 
18590
18601
  function MapDelegate(in_config) {
18591
- const config = in_config;
18592
- var g_icon_image_single = null;
18593
- var g_icon_image_multi = null;
18594
- var g_icon_image_selected = null;
18595
- var g_icon_shadow = null;
18596
- var g_icon_shape = null;
18597
- var gDiv = null;
18598
- var gMainMap;
18599
- var gOms = null;
18600
- var gMarkerClusterer = null;
18601
- var gInfoWindow;
18602
- var gIsLoaded = false;
18603
- var gIsClustering = false;
18604
- var gAllMarkers = []; ///< Holds all the markers.
18605
- var gSearchPointMarker = false;
18606
- var gOpenMarker = false;
18607
- function isApiLoaded() {
18608
- return gIsLoaded;
18609
- }
18610
- function loadApi(f, args) {
18611
- var tag = document.createElement('script');
18612
- gIsLoaded = true;
18613
- if (typeof config['api_key'] === 'undefined') config['api_key'] = "";
18614
- tag.src = "https://maps.googleapis.com/maps/api/js?key=" + config['api_key'] + "&loading=async&callback=croutonMap.apiLoadedCallback";
18615
- tag.defer = true;
18616
- tag.async = true;
18617
- var firstScriptTag = document.getElementsByTagName('script')[0];
18618
- firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
18619
- };
18620
- function createMap(inDiv, inCenter, inHidden = false) {
18621
- gDiv = inDiv;
18622
- if ( inHidden ) {
18623
- gDiv.style.height = 'auto';
18624
- gDiv.style.marginBottom = '10px';
18602
+ const config = in_config;
18603
+ var g_icon_image_single = null;
18604
+ var g_icon_image_multi = null;
18605
+ var g_icon_image_selected = null;
18606
+ var g_icon_shadow = null;
18607
+ var g_icon_shape = null;
18608
+ var gDiv = null;
18609
+ var gMainMap;
18610
+ var gOms = null;
18611
+ var gMarkerClusterer = null;
18612
+ var gInfoWindow;
18613
+ var gIsLoaded = false;
18614
+ var gIsClustering = false;
18615
+ var gAllMarkers = []; ///< Holds all the markers.
18616
+ var gSearchPointMarker = false;
18617
+ var gOpenMarker = false;
18618
+ function isApiLoaded() {
18619
+ return gIsLoaded;
18620
+ }
18621
+ function loadApi(f, args) {
18622
+ var tag = document.createElement("script");
18623
+ gIsLoaded = true;
18624
+ if (typeof config["api_key"] === "undefined") config["api_key"] = "";
18625
+ tag.src =
18626
+ "https://maps.googleapis.com/maps/api/js?key=" +
18627
+ config["api_key"] +
18628
+ "&loading=async&callback=croutonMap.apiLoadedCallback";
18629
+ tag.defer = true;
18630
+ tag.async = true;
18631
+ var firstScriptTag = document.getElementsByTagName("script")[0];
18632
+ firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
18633
+ }
18634
+ function createMap(inDiv, inCenter, inHidden = false) {
18635
+ gDiv = inDiv;
18636
+ if (inHidden) {
18637
+ gDiv.style.height = "auto";
18638
+ gDiv.style.marginBottom = "10px";
18625
18639
  gMainMap = null;
18626
18640
  return gDiv;
18627
18641
  }
18628
- let iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/NAMarker.png"
18629
- : "data:image/png;base64,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";
18630
- g_icon_image_single = new google.maps.MarkerImage ( iconUrl, new google.maps.Size(23, 32), new google.maps.Point(0,0), new google.maps.Point(12, 32) );
18631
- iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/NAMarkerG.png"
18632
- : "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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";
18633
- g_icon_image_multi = new google.maps.MarkerImage ( iconUrl, new google.maps.Size(23, 32), new google.maps.Point(0,0), new google.maps.Point(12, 32) );
18634
- iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/NAMarkerSel.png"
18635
- : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAhCAYAAAAyCTAQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/JpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wUmlnaHRzOk1hcmtlZD0iRmFsc2UiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEFFRUI5RkFCQkM0MTFFMEFEOEJGMzBCOTRGRDNBMTMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEFFRUI5RjlCQkM0MTFFMEFEOEJGMzBCOTRGRDNBMTMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTMyBNYWNpbnRvc2giPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0idXVpZDo5NkJFNTVGQjQ5MDhEQzExQUFBN0ZDRDFGNTZEMTYyMiIgc3RSZWY6ZG9jdW1lbnRJRD0idXVpZDpE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";
18636
- g_icon_image_selected = new google.maps.MarkerImage ( iconUrl, new google.maps.Size(23, 32), new google.maps.Point(0,0), new google.maps.Point(12, 32) );
18637
-
18638
- iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/SearchPoint.png"
18639
- : "data:image/png;base64,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";
18640
- g_icon_image_searchpoint = new google.maps.MarkerImage ( iconUrl, new google.maps.Size(23, 32), new google.maps.Point(0,0), new google.maps.Point(12, 32) );
18641
- iconUrl = config.BMLTPlugin_images ? config.BMLTPlugin_images+"/NAMarkerS.png"
18642
- : "data:image/png;base64,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";
18643
- g_icon_shadow = new google.maps.MarkerImage( iconUrl, new google.maps.Size(43, 32), new google.maps.Point(0,0), new google.maps.Point(12, 32) );
18644
- g_icon_shape = { coord: [16,0,18,1,19,2,20,3,21,4,21,5,22,6,22,7,22,8,22,9,22,10,22,11,22,12,22,13,22,14,22,15,22,16,21,17,21,18,22,19,20,20,19,21,20,22,18,23,17,24,18,25,17,26,15,27,14,28,15,29,12,30,12,31,10,31,10,30,9,29,8,28,8,27,7,26,6,25,5,24,5,23,4,22,3,21,3,20,2,19,1,18,1,17,1,16,0,15,0,14,0,13,0,12,0,11,0,10,0,9,0,8,0,7,1,6,1,5,2,4,2,3,3,2,5,1,6,0,16,0], type: 'poly' };
18645
-
18646
- var myOptions = {
18647
- 'mapTypeId': google.maps.MapTypeId.ROADMAP,
18648
- 'zoomControl': true,
18649
- 'minZoom': config.minZoom,
18650
- 'maxZoom': config.maxZoom,
18651
- 'mapTypeControl': false,
18652
- 'streetViewControl': true,
18653
- 'disableDoubleClickZoom' : true,
18654
- 'draggableCursor': "pointer",
18655
- 'scaleControl' : true,
18656
- 'fullscreenControl': config.map_search ? true : false,
18657
- };
18658
- if (inCenter) {
18659
- myOptions = Object.assign(myOptions, {
18660
- 'center': new google.maps.LatLng ( inCenter.latitude, inCenter.longitude ),
18661
- 'zoom': parseInt(inCenter.zoom)
18662
- });
18663
- }
18664
- var pixel_width = inDiv.offsetWidth;
18665
- var pixel_height = inDiv.offsetHeight;
18666
-
18667
- if ( (pixel_width < 640) || (pixel_height < 640) ) {
18668
- myOptions.scrollwheel = true;
18669
- myOptions.zoomControlOptions = { 'style': google.maps.ZoomControlStyle.SMALL };
18670
- } else {
18671
- myOptions.zoomControlOptions = { 'style': google.maps.ZoomControlStyle.LARGE };
18672
- };
18673
- gInfoWindow = new google.maps.InfoWindow();
18674
- gMainMap = new google.maps.Map ( inDiv, myOptions );
18675
-
18676
- return gMainMap;
18677
- }
18678
- function addListener(ev,f,once) {
18679
- if (!gMainMap) return;
18680
- var e = ev;
18681
- switch (ev) {
18682
- case "zoomend":
18683
- e = 'zoom_changed';
18684
- break;
18685
- default:
18686
- ;
18687
- }
18688
- if (once) {
18689
- return google.maps.event.addListenerOnce( gMainMap, e, f);
18690
- } else {
18691
- return google.maps.event.addListener( gMainMap, e, f);
18692
- }
18693
- }
18694
- function removeListener(f) {
18695
- if (!gMainMap) return;
18696
- f.remove();
18697
- }
18698
- function fitBounds(locations) {
18699
- if (!gMainMap) return;
18700
- google.maps.event.addListenerOnce(gMainMap, "bounds_changed", function () {
18701
- gMainMap.setZoom(parseInt(Math.min(gMainMap.getZoom(), config.maxZoom)));
18702
- });
18703
- let start = new google.maps.LatLngBounds(); // avoid occasional timing problem
18704
- if (!start) return;
18705
- const bounds = locations.reduce(
18706
- function (bounds, m) {
18707
- if (bounds === null) return start;
18708
- return bounds.extend(new google.maps.LatLng(m[0], m[1]));
18709
- }, start);
18710
- gMainMap.fitBounds(bounds);
18711
- }
18712
- function flyToFixedZoom(position, zoom, extra) {
18713
- if (!gMainMap) return;
18714
- google.maps.event.addListenerOnce(gMainMap, 'idle', function() {
18715
- if (extra) extra();
18716
- });
18717
- const latlng = new google.maps.LatLng(position.lat, position.lng);
18718
- gMainMap.setCenter(latlng);
18719
- gMainMap.setZoom(zoom);
18720
- }
18721
- function getOpenMarker() {
18722
- return gOpenMarker;
18723
- }
18724
- function clearAllMarkers ()
18725
- {
18726
- if (!gMainMap) return;
18727
- gAllMarkers && gAllMarkers.forEach(function(m) {
18728
- m && m.marker.info_win && gAllMarkers[c].marker.info_win_.close();
18729
- m.marker.setMap( null );
18730
- });
18731
- gAllMarkers = [];
18732
- gOpenMarker = false;
18733
- };
18734
- function isFilterVisible() {
18642
+ let iconUrl = config.BMLTPlugin_images
18643
+ ? config.BMLTPlugin_images + "/NAMarker.png"
18644
+ : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAgCAYAAAD5VeO1AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAXAAAAIACehauIAAAGEElEQVRIx62We2xT9xXHP/dhmxA7Iy/aOMY0Y01AMALdmjIi9bWpj6G9KqGQTtq6P6a26rqCUtCoWk1iAwmhtZ2oEJPQJhBdH2lUGjqUBLp2UaCq6BALxU7jOI8aamLqENuxiR/3nv1xb5w0CxPTeqSfrs69v/M95/f9fX/ndxVubApwF/AIlNwN7jpwamAITMUg/RFIJ3ASSN8IYCG7F9y/gW/eA2sWQS3gAXQ8HpX77tP57LPPCQb7zWz2o0/gyn7gMJD/b+CLQNkHG34FDwFfB8oAF6ADKl6vk5MnfZSWmvT3p3j99SE6OjrJZjt6YeoXwPBC1brA+XZ5+c9kzZq/SlVVt2zc+E/x+c7JE0+EpaMjJk8/PSaVlf0SDickm01JLndNpqai0t7+idTX/1HANww0LMTQ/kWLfi4vv3xKLl6MSFfXpJw9m5GOjoQEgxkREXn33YSUlQVldHRaRAzp7r4mgcCkiEzKxx8PS2PjIYHqs/Zyi/ZduFt27HhHJiYuiYhIOJyV3t60nDmTkXg8LyIix44lxe0ekJGRrIiItLVFpbIyKL29kyKSlL6+EamqekGA3QCqhV22ranpRzz22Arc7ioAqqs1NA1MUzAMe20KmCZFv6bGQTyeY/PmKBcuQHNzOc8++2PgO78E/CrQBI33tLauZenSJaRSIAIej0pVlU44nCcWM4rgIlYCsOaAxvh4ge3b4+RyTlpbfdTX/6Aa+KEKbPL51rqbm5eSybh45plxBgaygILLpfDSSxNMThpfqtw0xVKAS7EFp9Hdnaaraxq/v4QHH/w2sPR7Kiy+q75+OX5/KYGAydGjk+zbFwdg2TKdZcscRRpEFAoFoVCwfE1TANMeBm+8kQI0mppqAV+DDp4VXm85breTwcECoPDmm0na2ipZvdrF889XUlpqbc0dd7h49VUvPp8OQHNzCQcP1mIYkMmYeL0qhYKCz7cYp7O6UgeXo7TUhaZpJBIWmem0wf791zh48FaamkowTUFEqK110NLiACy/rs7J448754hOKBSmcbl0HI5STYfp66lUHhGortZtDhVeey3B1q0VrFzpRFWtwxwMZjl6NMlTTy3B63UQCuV4660Uug6GISxfrtHSUsL0tEkul8qpkPz00qUEmUyBVascNo+QTBZ45ZWJLx2zoaEce/ZcZWzMaiGBQJbnnouyY8cVdu6McuLEFKoKkUiafD76uQrTZwYGRhkdnWb9egd33ukCBFA5ciTBhQvZYgvSdWtVM1K01KIWx5YtHkD48MMxYPScCnTHYv2T7703gcdjsn17BYpi8ZdKFXjxxdnqVdVKUiiIrZaZ3meyaZOHhx9eTCSSp6urD5jqssMqOhsa/izDwxERycrevTGBgMBFcTqD0teXFhGRnp4pgYC8/77lf/BBWuCirFsXlsuXsyKSld27AwLrBoFyzQK/fj0eL9ty5UoDIjo1NS6++MJkeDiPYZiMj5s8+ujXiETyHD6coKZGR9fh1KkM589n2bq1ApECPT0p9u49Rjp9eB9waqafa1DTB7/bAN8APGiaC8NQixLr7PRzyy0aDzwQYdu2Cm6/3cmBA9c4fTqNopiI5IAk0DYC5zYAMa0YzVQUHD+FRsCByKwsAUKhHGvXuhgayvPkk0uoq3PgckF3dwqwjzDHgfadQC+gaMxaCEZXwKpGuNW+ebRigmi0QCiUJxjMEo+bjI3laW9PEovl7OM/Cuz5O0y12S/+45rzwerT8Fs/1ABuwDHbmRE7ROaMPJADdiXgxL3A+RkwbR54Eq6OgdoCq+3Pc+mZqWUmgWE/jwOHdgLH5hY8HxxgAAY9cNtG8NlTtHngUuyEMADs6oBM23yghcAB8x8w1AyNddZ1ODcBNnDeVsfuMIRabOdmwDEgdRquPgLry8DJzK/FLM8G8Jc8HG8F/rXA/t0QHGACLg2CowVWqtZUldnLoRf4wwtgHpmzCTcNDhCCT0247X5LPTN8XwZ2vQMTv14I9H8xBfyd8CeBvwn0CHx/BPD/P6BzzQ/3R+CQwDYB5Sezib8Sc2yGbwlUHviqKp5HD78H6m424N/MV8HqLH5ZPAAAACV0RVh0Y3JlYXRlLWRhdGUAMjAxMS0wMS0wNlQwMzoyNDoxMyswMDowMJsWpgAAAAAldEVYdG1vZGlmeS1kYXRlADIwMTEtMDEtMDZUMDM6MjQ6MTMrMDA6MDDEp9A0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAABJRU5ErkJggg==";
18645
+ g_icon_image_single = new google.maps.MarkerImage(
18646
+ iconUrl,
18647
+ new google.maps.Size(23, 32),
18648
+ new google.maps.Point(0, 0),
18649
+ new google.maps.Point(12, 32),
18650
+ );
18651
+ iconUrl = config.BMLTPlugin_images
18652
+ ? config.BMLTPlugin_images + "/NAMarkerG.png"
18653
+ : "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++nIWVhP40vCJzLdJekpY722blHKBXBWHzfJUV8xWmlcmqAhn02S2Uh/aFK+jr7+d4V3f2qMXrcXhMpprOB273H7oUHlyu4qsyoVCDoOEC25JfNp3SHU0YeXkkjrXT3bybF/fuoxVe0OEuWTJwNnBFOk80BH3r6qPTKRkdZXrZLHxDw4S/ch2hK69CP3qE9P42ZjW/iFVWgS47MokpRvf8mbZt23hiaOTIGDQKVh/81yBbHrxeYd3q9XdRvXQZxb2nCc6ejXGqC+3yWgLL60g17WS4dQ8BVUPNz0d99TCB8nKC31rDytgFhDbfX/to38DT4pObBC+resALL4GfrLrtVmrWfpeKq68hVFsLlmifOx+tdDbW5AToOoppOsfVCsJkWnYzeucd5IkBkeuWUbdlK98IBVfI9AYb1AGXKNh8Y2UsULX2O0SLIyiWhRopcTkzDBRVEc68ZoPbTdPwRaNMHXub+N3rCQ70U1R3PatW3848+JHsLLHBay6EGxeuvJlILIbfBhRwpagIpbgYayyOJfwrquq6SOYQcDzrxd9Mvt3J5CMPkycKY99cTV20OCbDN9g7vrYgUlgyY8mXJSoMUtt/jTUyjBIKoRQUkNz1NIb00XyOy62PgCvBoHM6VaYmW1owXztM6KKLWXzttXboNqhi6TVzqqspqKxCe+8UQ49uY2rXTpRAUKgpJjs4iGWDKS5FVkaMz+lubGkqjhpJoWwqR7L5OTQJ0YpFi6mABb4wXFoyu4zAtCLMA38jK6vHm54h/O21KBIBRRu+h2pbndXRyisovHUlyrSIKEmjVVYTWbFcTmNgpqTv86OmkhTMqSSqqbN8IQjnRYpkQsMYGnKOm+odIvnsHwjf9wCBxlVOlJiJSfy1X6R4xzPyncCamMB/9RJmLl3u0iTNyGbFBh2/hGnE7wv47GFyOeeYap7LoSU/Y8J1we1rIBLBmRcx43HMN9vRqmokVfMdBbnBAc/ZwlpA4m5GqeN0XZyjJqA3OTyCpefwlcec2FTEEcmu0yRfeB5VuLetUoRL/dVDDDbegNHZgVoUIfevV+hrqKf3pno+qK9jfOtPZV0QfTTOcFYfVafgyFDPe+jxEbTLFuKfWYRQ6Fg/vuNJzKFBySQ3kS3bd1kpi5mMFzkmmWSGVCJFOpnGv+AyLImg0RMd9FqcVGVD27s975upd97CmlNFYePNcj7ZKyec6ugm9dwfUUP5DrJ9fEuOZknUuIHuw2FEuA3NjBBaeYvkxRgdBw8iJr1sT+1/Sze6BlqayaZThO/5IQXzq5yQM89Y39/nWu9xi2E6lisyZoe9beH0ezehXHQJKaFq/+tHMjK0x1493gPPt7e+RKKtFasixszHthO+sEYshcTJHqakYNnORsqATZclRjhOFmWa30/pxu+Tv26DRNsgHb/ZzstZvU1w3zxTcucthvaNpcWh0pq5hMOFcLqH1MkuJ8ryS2dQ3roPvfMEp79+G8X1XyUo/pnct5dUZ6eU4y+hmwb6SJzHj71Dk0WDYP5V88DjEuGxymR6UdEHfeS6TknYST3RXCb0sSR+1cRXPRf9tX9KYt2Db+HlTl5MHHqDZLec7tT7vDswxOPwF7kCf/ZhVbRFEvrhPQrxhDhSl2ZqbnTgVf2x3zehHzwgjpbJdBpFSrBd0+3EMGXIEtaaNbJyWTyEExIOgx+Te+/w8csGAQ4Lcp5dPs5cV7I8kC8xnM7IJTKLQHSG+KOTTCqDKSYeEvq26vxCPHG/t+UT4L6IQusDfpbNsy9lURBQ3OPZdcqOf9vJlu5mvCXJlpPxUZn/sc7xbosluF0+RosnuTGLu5/NMTYhwGl7wPLosVxgvNtFERoM6RsC/ieDnAD/4KPAZwO35cQbJhvbDBc84xFoehlquXfJh0oPy0SLwSPyufd/XxPaOd4t7V0WF9So1EY93jXF3al4inLeG2Jbjr+Pw/qzPYzUcz21JE3u+12Oo/+2nG+pci6o4X1n5X+nwYjUkA3u8k+K+ilPuYkeizt3G0wk7N2KC6p7dOwVTfsMNsnn8XO93NTzvBWPHjDZ9A8BSlmeAmniPHYZPGUbfybs+KxSIlhb/Fi/DWDtlHal6lgb5XOS6BUq3T8XBWt8djJTx+cpcvbGixVycqH/6jwv5M8sW6TF/t/F/xFgADsAxARvscdVAAAAAElFTkSuQmCC";
18654
+ g_icon_image_multi = new google.maps.MarkerImage(
18655
+ iconUrl,
18656
+ new google.maps.Size(23, 32),
18657
+ new google.maps.Point(0, 0),
18658
+ new google.maps.Point(12, 32),
18659
+ );
18660
+ iconUrl = config.BMLTPlugin_images
18661
+ ? config.BMLTPlugin_images + "/NAMarkerSel.png"
18662
+ : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAhCAYAAAAyCTAQAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA/JpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wUmlnaHRzOk1hcmtlZD0iRmFsc2UiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEFFRUI5RkFCQkM0MTFFMEFEOEJGMzBCOTRGRDNBMTMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEFFRUI5RjlCQkM0MTFFMEFEOEJGMzBCOTRGRDNBMTMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTMyBNYWNpbnRvc2giPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0idXVpZDo5NkJFNTVGQjQ5MDhEQzExQUFBN0ZDRDFGNTZEMTYyMiIgc3RSZWY6ZG9jdW1lbnRJRD0idXVpZDpE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";
18663
+ g_icon_image_selected = new google.maps.MarkerImage(
18664
+ iconUrl,
18665
+ new google.maps.Size(23, 32),
18666
+ new google.maps.Point(0, 0),
18667
+ new google.maps.Point(12, 32),
18668
+ );
18669
+
18670
+ iconUrl = config.BMLTPlugin_images
18671
+ ? config.BMLTPlugin_images + "/SearchPoint.png"
18672
+ : "data:image/png;base64,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";
18673
+ g_icon_image_searchpoint = new google.maps.MarkerImage(
18674
+ iconUrl,
18675
+ new google.maps.Size(23, 32),
18676
+ new google.maps.Point(0, 0),
18677
+ new google.maps.Point(12, 32),
18678
+ );
18679
+ iconUrl = config.BMLTPlugin_images
18680
+ ? config.BMLTPlugin_images + "/NAMarkerS.png"
18681
+ : "data:image/png;base64,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";
18682
+ g_icon_shadow = new google.maps.MarkerImage(
18683
+ iconUrl,
18684
+ new google.maps.Size(43, 32),
18685
+ new google.maps.Point(0, 0),
18686
+ new google.maps.Point(12, 32),
18687
+ );
18688
+ g_icon_shape = {
18689
+ coord: [
18690
+ 16, 0, 18, 1, 19, 2, 20, 3, 21, 4, 21, 5, 22, 6, 22, 7, 22, 8,
18691
+ 22, 9, 22, 10, 22, 11, 22, 12, 22, 13, 22, 14, 22, 15, 22, 16,
18692
+ 21, 17, 21, 18, 22, 19, 20, 20, 19, 21, 20, 22, 18, 23, 17, 24,
18693
+ 18, 25, 17, 26, 15, 27, 14, 28, 15, 29, 12, 30, 12, 31, 10, 31,
18694
+ 10, 30, 9, 29, 8, 28, 8, 27, 7, 26, 6, 25, 5, 24, 5, 23, 4, 22,
18695
+ 3, 21, 3, 20, 2, 19, 1, 18, 1, 17, 1, 16, 0, 15, 0, 14, 0, 13,
18696
+ 0, 12, 0, 11, 0, 10, 0, 9, 0, 8, 0, 7, 1, 6, 1, 5, 2, 4, 2, 3,
18697
+ 3, 2, 5, 1, 6, 0, 16, 0,
18698
+ ],
18699
+ type: "poly",
18700
+ };
18701
+
18702
+ var myOptions = {
18703
+ mapTypeId: google.maps.MapTypeId.ROADMAP,
18704
+ zoomControl: true,
18705
+ minZoom: config.minZoom,
18706
+ maxZoom: config.maxZoom,
18707
+ mapTypeControl: false,
18708
+ streetViewControl: true,
18709
+ disableDoubleClickZoom: true,
18710
+ draggableCursor: "pointer",
18711
+ scaleControl: true,
18712
+ fullscreenControl: config.map_search ? true : false,
18713
+ };
18714
+ if (inCenter) {
18715
+ myOptions = Object.assign(myOptions, {
18716
+ center: new google.maps.LatLng(
18717
+ inCenter.latitude,
18718
+ inCenter.longitude,
18719
+ ),
18720
+ zoom: parseInt(inCenter.zoom),
18721
+ });
18722
+ }
18723
+ var pixel_width = inDiv.offsetWidth;
18724
+ if (pixel_width == 0) {
18725
+ pixel_width = inDiv.parentNode.offsetWidth;
18726
+ }
18727
+ var pixel_height = parseInt(
18728
+ jQuery(inDiv).css("height").replace("px", ""),
18729
+ );
18730
+ if (pixel_height == 0) {
18731
+ pixel_height = pixel_width;
18732
+ }
18733
+ if (pixel_height > pixel_width) {
18734
+ jQuery(inDiv).css("height", pixel_width + "px");
18735
+ }
18736
+ if (pixel_width < 640 || pixel_height < 640) {
18737
+ myOptions.scrollwheel = true;
18738
+ myOptions.zoomControlOptions = {
18739
+ style: google.maps.ZoomControlStyle.SMALL,
18740
+ };
18741
+ } else {
18742
+ myOptions.zoomControlOptions = {
18743
+ style: google.maps.ZoomControlStyle.LARGE,
18744
+ };
18745
+ }
18746
+ gInfoWindow = new google.maps.InfoWindow();
18747
+ gMainMap = new google.maps.Map(inDiv, myOptions);
18748
+
18749
+ return gMainMap;
18750
+ }
18751
+ function addListener(ev, f, once) {
18752
+ if (!gMainMap) return;
18753
+ var e = ev;
18754
+ switch (ev) {
18755
+ case "zoomend":
18756
+ e = "zoom_changed";
18757
+ break;
18758
+ default:
18759
+ }
18760
+ if (once) {
18761
+ return google.maps.event.addListenerOnce(gMainMap, e, f);
18762
+ } else {
18763
+ return google.maps.event.addListener(gMainMap, e, f);
18764
+ }
18765
+ }
18766
+ function removeListener(f) {
18767
+ if (!gMainMap) return;
18768
+ f.remove();
18769
+ }
18770
+ function fitBounds(locations) {
18771
+ if (!gMainMap) return;
18772
+ google.maps.event.addListenerOnce(
18773
+ gMainMap,
18774
+ "bounds_changed",
18775
+ function () {
18776
+ gMainMap.setZoom(
18777
+ parseInt(Math.min(gMainMap.getZoom(), config.maxZoom)),
18778
+ );
18779
+ },
18780
+ );
18781
+ let start = new google.maps.LatLngBounds(); // avoid occasional timing problem
18782
+ if (!start) return;
18783
+ const bounds = locations.reduce(function (bounds, m) {
18784
+ if (bounds === null) return start;
18785
+ return bounds.extend(new google.maps.LatLng(m[0], m[1]));
18786
+ }, start);
18787
+ gMainMap.fitBounds(bounds);
18788
+ }
18789
+ function flyToFixedZoom(position, zoom, extra) {
18790
+ if (!gMainMap) return;
18791
+ google.maps.event.addListenerOnce(gMainMap, "idle", function () {
18792
+ if (extra) extra();
18793
+ });
18794
+ const latlng = new google.maps.LatLng(position.lat, position.lng);
18795
+ gMainMap.setCenter(latlng);
18796
+ gMainMap.setZoom(zoom);
18797
+ }
18798
+ function getOpenMarker() {
18799
+ return gOpenMarker;
18800
+ }
18801
+ function clearAllMarkers() {
18802
+ if (!gMainMap) return;
18803
+ gAllMarkers &&
18804
+ gAllMarkers.forEach(function (m) {
18805
+ m &&
18806
+ m.marker.info_win &&
18807
+ gAllMarkers[c].marker.info_win_.close();
18808
+ m.marker.setMap(null);
18809
+ });
18810
+ gAllMarkers = [];
18811
+ gOpenMarker = false;
18812
+ }
18813
+ function isFilterVisible() {
18735
18814
  return config.filter_visible && config.filter_visible == 1;
18736
18815
  }
18737
18816
  function webMercatorToLatLng(point, zoom) {
18738
- const latLng = croutonMap.webMercatorToLatLng(point, zoom);
18739
- return new google.maps.LatLng(latLng.lat, latLng.lng);
18817
+ const latLng = croutonMap.webMercatorToLatLng(point, zoom);
18818
+ return new google.maps.LatLng(latLng.lat, latLng.lng);
18740
18819
  }
18741
18820
  function calculateBounds(center, zoom, width, height) {
18742
18821
  const centerPoint = croutonMap.latLngToWebMercator(center, zoom);
18743
- const southwestWebMercator = {x: centerPoint.x-width/2, y: centerPoint.y+height/2};
18744
- const northeastWebMercator = {x: centerPoint.x+width/2, y: centerPoint.y-height/2};
18745
- return new google.maps.LatLngBounds(webMercatorToLatLng(southwestWebMercator, zoom), webMercatorToLatLng(northeastWebMercator, zoom));
18746
- }
18747
- function calcOffsetWidth(gDiv) {
18748
- let ret = gDiv.offsetWidth;
18749
- if (ret === 0) ret = gDiv.parentElement.offsetWidth;
18750
- return ret;
18751
- }
18752
- function getZoomAdjust(filterMeetings, zoomLevel=gMainMap.getZoom(), center=gMainMap.getCenter()) {
18822
+ const southwestWebMercator = {
18823
+ x: centerPoint.x - width / 2,
18824
+ y: centerPoint.y + height / 2,
18825
+ };
18826
+ const northeastWebMercator = {
18827
+ x: centerPoint.x + width / 2,
18828
+ y: centerPoint.y - height / 2,
18829
+ };
18830
+ return new google.maps.LatLngBounds(
18831
+ webMercatorToLatLng(southwestWebMercator, zoom),
18832
+ webMercatorToLatLng(northeastWebMercator, zoom),
18833
+ );
18834
+ }
18835
+ function withinInscribedCircle(center, point, zoom, width, height) {
18836
+ const centerPoint = croutonMap.latLngToWebMercator(center, zoom);
18837
+ const meetingPoint = croutonMap.latLngToWebMercator(point, zoom);
18838
+ const radius = Math.min(width, height) / 2;
18839
+ const distance = Math.sqrt(
18840
+ Math.pow(centerPoint.x - meetingPoint.x, 2) +
18841
+ Math.pow(centerPoint.y - meetingPoint.y, 2),
18842
+ );
18843
+ return distance <= radius;
18844
+ }
18845
+ function calcOffsetWidth(gDiv) {
18846
+ let ret = gDiv.offsetWidth;
18847
+ if (ret === 0) ret = gDiv.parentElement.offsetWidth;
18848
+ return ret;
18849
+ }
18850
+ function getZoomAdjust(
18851
+ filterMeetings,
18852
+ zoomLevel = gMainMap.getZoom(),
18853
+ center = gMainMap.getCenter(),
18854
+ closestMeeting = null,
18855
+ ) {
18753
18856
  if (!gMainMap) return 12;
18857
+ if (config.map_search && isFilterVisible()) return zoomLevel;
18754
18858
  const mapWidth = calcOffsetWidth(gDiv);
18755
- const mapHeight = parseInt(jQuery(gDiv).css("height").replace("px",""));
18756
- const center_latlng = {"lat":center.lat(), "lng":center.lng()};
18757
- ret = zoomLevel;
18758
- if (config.map_search && isFilterVisible()) return ret;
18859
+ const mapHeight = parseInt(
18860
+ jQuery(gDiv).css("height").replace("px", ""),
18861
+ );
18862
+ const center_latlng = { lat: center.lat(), lng: center.lng() };
18863
+ let ret = zoomLevel;
18759
18864
  var bounds = calculateBounds(center_latlng, ret, mapWidth, mapHeight);
18760
- while(filterMeetings(bounds, center_latlng).length==0 && ret>6) {
18761
- ret -= 1;
18762
- bounds = calculateBounds(center_latlng, ret, mapWidth, mapHeight);
18865
+ if (closestMeeting) {
18866
+ while (
18867
+ !withinInscribedCircle(
18868
+ center_latlng,
18869
+ closestMeeting,
18870
+ ret,
18871
+ mapWidth,
18872
+ mapHeight,
18873
+ ) &&
18874
+ ret > config.minZoom
18875
+ ) {
18876
+ ret -= 1;
18877
+ }
18878
+ } else {
18879
+ while (
18880
+ filterMeetings(bounds, center_latlng).length == 0 &&
18881
+ ret > config.minZoom
18882
+ ) {
18883
+ ret -= 1;
18884
+ bounds = calculateBounds(
18885
+ center_latlng,
18886
+ ret,
18887
+ mapWidth,
18888
+ mapHeight,
18889
+ );
18890
+ }
18891
+ }
18892
+ // If we didn't zoom out, zoom in if it doesn't lose meetings
18893
+ if (ret == zoomLevel) {
18894
+ let meetingsInBounds = filterMeetings(bounds, center_latlng).length;
18895
+ if (meetingsInBounds > 0) {
18896
+ do {
18897
+ ret = ret + 1;
18898
+ if (ret > config.maxZoom) break;
18899
+ var bounds = calculateBounds(
18900
+ center_latlng,
18901
+ ret,
18902
+ mapWidth,
18903
+ mapHeight,
18904
+ );
18905
+ } while (
18906
+ filterMeetings(bounds, center_latlng).length ===
18907
+ meetingsInBounds
18908
+ );
18909
+ ret = ret - 1;
18910
+ }
18763
18911
  }
18764
18912
  return ret;
18765
18913
  }
18766
- function getZoom() {
18767
- if (!gMainMap) return 12;
18768
- return gMainMap.getZoom();
18769
- }
18770
- function contains(bounds, lat, lng) {
18771
- if (!gMainMap) return true;
18772
- return bounds.contains(new google.maps.LatLng ( lat, lng));
18773
- }
18774
- function getBounds() {
18775
- if (!gMainMap) return null;
18776
- return gMainMap.getBounds();
18777
- }
18778
- function createClusterLayer() {
18779
- gIsClustering = true;
18780
- }
18781
- function removeClusterLayer() {
18782
- if (!gMainMap) return;
18783
- gIsClustering =false;
18784
- gMarkerClusterer && gMarkerClusterer.setMap(null);
18785
- gMarkerClusterer = null;
18786
- if (gOms) {
18787
- gOms.removeAllMarkers();
18788
- gOms.clearListeners('click');
18789
- gOms = null;
18790
- }
18791
- }
18792
- function addClusterLayer() {
18793
- if (!gMainMap) return;
18794
- let markers = gAllMarkers.map((m)=>m.marker);
18795
- if (gIsClustering) {
18796
- gMarkerClusterer = new markerClusterer.MarkerClusterer( { 'map': gMainMap, 'markers': markers, 'imagePath': 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'} );
18797
- gOms = new OverlappingMarkerSpiderfier(gMainMap, {
18798
- markersWontMove: true,
18799
- markersWontHide: true,
18800
- });
18801
- gOms.addListener('format', function (marker, status) {
18802
- var icon;
18803
- if (status === OverlappingMarkerSpiderfier.markerStatus.SPIDERFIED
18804
- || status === OverlappingMarkerSpiderfier.markerStatus.SPIDERFIABLE
18805
- || status === OverlappingMarkerSpiderfier.markerStatus.UNSPIDERFIED) {
18806
- icon = g_icon_image_multi;
18807
- } else if (status === OverlappingMarkerSpiderfier.markerStatus.UNSPIDERFIABLE) {
18808
- icon = g_icon_image_single;
18809
- } else {
18810
- icon = null;
18811
- }
18812
- marker.setIcon(icon);
18813
- });
18814
- google.maps.event.addListener(gMainMap, 'zoom_changed', function() {
18815
- if (gMainMap.getProjection()=='undefined') return;
18816
- google.maps.event.addListenerOnce(gMainMap, 'idle', function() {
18817
- if (gMainMap.getProjection()=='undefined') return;
18818
- if (gOms == null) return;
18819
- var spidered = gOms.markersNearAnyOtherMarker();
18820
- for (var i = 0; i < spidered.length; i ++) {
18821
- spidered[i].icon = g_icon_image_multi;
18822
- }
18823
- });
18824
- });
18825
-
18826
- // This is necessary to make the Spiderfy work
18827
- gOms.addListener('click', function (marker) {
18828
- marker.zIndex = 999;
18829
- gInfoWindow.setContent(marker.desc);
18830
- gInfoWindow.open(gMainMap, marker);
18831
- });
18832
- markers.forEach((marker)=>gOms.addMarker(marker));
18833
-
18834
- } else markers.forEach((m)=>m.setMap(gMainMap));
18835
- }
18836
- function markSearchPoint(inCoords) {
18837
- if (!gMainMap) return;
18838
- if (gSearchPointMarker) gSearchPointMarker.setMap(null);
18839
- gSearchPointMarker = new google.maps.Marker (
18840
- { 'position': new google.maps.LatLng(...inCoords)});
18841
- gSearchPointMarker.setIcon(g_icon_image_searchpoint);
18842
- gSearchPointMarker.setMap(gMainMap);
18843
- }
18844
- function createMarker ( inCoords, ///< The long/lat for the marker.
18845
- multi,
18846
- inTitle
18847
- )
18848
- {
18849
- if (!gMainMap) return;
18850
- var in_main_icon = (multi ? g_icon_image_multi : g_icon_image_single)
18851
- var marker = null;
18852
-
18853
- var marker = new google.maps.Marker (
18854
- { 'position': new google.maps.LatLng(...inCoords),
18855
- 'shadow': g_icon_shadow,
18856
- 'icon': in_main_icon,
18857
- 'shape': g_icon_shape,
18858
- 'cursor': 'default',
18859
- 'title': inTitle,
18860
- 'draggable': false
18861
- } );
18862
- marker.zIndex = 999;
18863
- marker.old_image = marker.getIcon();
18864
- return marker;
18865
- };
18866
- function bindPopup(marker, inHtml, inIds, openedMarker) {
18867
- if (inHtml) {
18868
- marker.desc = inHtml;
18869
- google.maps.event.addListener ( marker, "click", function () {
18870
- gAllMarkers.forEach((m) => m.marker.setIcon(m.marker.old_image));
18871
- if(marker.old_image){marker.setIcon(g_icon_image_selected)};
18872
- openInfoWindow(marker);
18873
- });
18874
- if (gOpenMarker && inIds.includes(parseInt(gOpenMarker))) {
18875
- openInfoWindow(marker);
18876
- }
18877
- gInfoWindow.addListener('closeclick', function () {
18878
- gOpenMarker = false;
18879
- gAllMarkers.forEach((m) => m.marker.setIcon(m.marker.old_image));
18880
- jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
18881
- });
18882
- }
18883
- gAllMarkers[gAllMarkers.length] = {ids: inIds, marker: marker};
18884
- }
18885
- function addMarkerCallback(marker, cb, in_ids) {
18886
- if (cb) marker.addListener('click', () => {
18887
- cb(in_ids);
18888
- });
18889
- gAllMarkers.push( {ids: in_ids, marker: marker} );
18890
- }
18891
- function highlightRow(target) {
18892
- const id = target.id.split('-')[1];
18893
- gOpenMarker = id;
18894
- jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
18895
- jQuery("#meeting-data-row-" + id + " > td").addClass("rowHighlight");
18896
- if (typeof crouton == 'undefined') crouton.dayTabFromId(id);
18897
- }
18898
- function openInfoWindow(marker) {
18899
- marker.setZIndex(google.maps.Marker.MAX_ZINDEX+1);
18900
- gInfoWindow.setContent(marker.desc);
18901
- gInfoWindow.open(gMainMap, marker);
18902
- gInfoWindow.addListener('visible', function() {
18903
- jQuery("input[type=radio][name=panel]:checked").each(function(index, target) {
18904
- highlightRow(target);
18905
- });
18906
- jQuery('input[type=radio][name=panel]').change(function() {
18907
- highlightRow(this);
18908
- });
18909
- });
18910
- }
18911
- function addControl(div,pos,cb) {
18912
- if (!div) return;
18913
- if (!gMainMap) {
18914
- gDiv.appendChild(div);
18915
- return;
18916
- }
18917
- var p = pos;
18918
- switch(pos) {
18919
- case 'topright':
18920
- p = google.maps.ControlPosition.TOP_RIGHT;
18921
- div.style.margin = "10px 10px 0 0";
18922
- break;
18923
- case 'topleft':
18924
- p = google.maps.ControlPosition.TOP_LEFT;
18925
- div.style.margin = "10px 0 0 10px";
18926
- break;
18927
- case 'bottomleft':
18928
- p = google.maps.ControlPosition.LEFT_BOTTOM;
18929
- div.style.margin = "0 0 0px 10px";
18930
- break;
18931
- }
18932
- div.index = 1;
18933
- if (cb) {
18934
- const observer = new MutationObserver(function (records) {
18935
- records.forEach(record => {
18936
- record.addedNodes.forEach(n => {
18937
- if (n === div) {
18938
- observer.disconnect();
18939
- cb();
18940
- }
18941
- });
18942
- })
18943
- });
18944
- observer.observe(document, {childList: true, subtree: true});
18945
- }
18946
- gMainMap.controls[p].push(div);
18947
- }
18948
- function openMarker(id) {
18949
- if (!gMainMap) return;
18950
- const marker = gAllMarkers.find((m) => m.ids.includes(id));
18951
- if (marker) {
18952
- jQuery("#panel-"+id).prop('checked', true);
18953
- openInfoWindow(marker.marker)
18954
- }
18955
- }
18956
- function getGeocodingChoices(in_geocode_response) {
18957
- if (!Array.isArray(in_geocode_response)) return [];
18958
- return in_geocode_response.map((r) => r.formatted_address);
18959
- }
18960
- function getGeocodeCenterAndBounds(in_geocode_response, i=0) {
18961
- if ( in_geocode_response && in_geocode_response[i] && in_geocode_response[i].geometry && in_geocode_response[i].geometry.location )
18962
- return {
18963
- center: {lat: in_geocode_response[i].geometry.location.lat(), lng: in_geocode_response[i].geometry.location.lng()},
18964
- southWest: {lat: in_geocode_response[i].geometry.viewport.getSouthWest().lat(),
18965
- lng: in_geocode_response[i].geometry.viewport.getSouthWest().lng()},
18966
- northEast: {lat: in_geocode_response[i].geometry.viewport.getNorthEast().lat(),
18967
- lng: in_geocode_response[i].geometry.viewport.getNorthEast().lng()},
18968
- };
18969
- alert ( crouton.localization.getWord("address_lookup_fail") );
18970
- return null;
18971
- }
18972
- function callGeocoder(in_loc, callback) {
18973
- var geocoder = new google.maps.Geocoder;
18974
-
18975
- if ( geocoder )
18976
- {
18977
- var geoCodeParams = { 'address': in_loc };
18978
- if (config.region && config.region.trim() !== '') {
18979
- geoCodeParams.region = config.region;
18980
- }
18981
- if (config.bounds
18982
- && config.bounds.north && config.bounds.north.trim()!== ''
18983
- && config.bounds.east && config.bounds.east.trim()!== ''
18984
- && config.bounds.south && config.bounds.south.trim()!== ''
18985
- && config.bounds.west && config.bounds.west.trim()!== '') {
18986
- geoCodeParams.bounds = new google.maps.LatLngBounds(
18987
- new google.maps.LatLng(config.bounds.south, config.bounds.west),
18988
- new google.maps.LatLng(config.bounds.north, config.bounds.east));
18989
- }
18990
- geocoder.geocode ( geoCodeParams, callback );
18991
- }
18992
- else // None of that stuff is defined if we couldn't create the geocoder.
18993
- {
18994
- alert ( crouton.localization.getWord("address_lookup_fail") );
18995
- };
18996
- }
18997
- function getZoomAdjustedBounds(center_latlng, filterMeetings, zoomLevel) {
18998
- if (!center_latlng) return null;
18999
- const center = new google.maps.LatLng(center_latlng.lat, center_latlng.lng);
18914
+ function getZoom() {
18915
+ if (!gMainMap) return 12;
18916
+ return gMainMap.getZoom();
18917
+ }
18918
+ function contains(bounds, lat, lng) {
18919
+ if (!gMainMap) return true;
18920
+ return bounds.contains(new google.maps.LatLng(lat, lng));
18921
+ }
18922
+ function getBounds() {
18923
+ if (!gMainMap) return null;
18924
+ return gMainMap.getBounds();
18925
+ }
18926
+ function createClusterLayer() {
18927
+ gIsClustering = true;
18928
+ }
18929
+ function removeClusterLayer() {
18930
+ if (!gMainMap) return;
18931
+ gIsClustering = false;
18932
+ gMarkerClusterer && gMarkerClusterer.setMap(null);
18933
+ gMarkerClusterer = null;
18934
+ if (gOms) {
18935
+ gOms.removeAllMarkers();
18936
+ gOms.clearListeners("click");
18937
+ gOms = null;
18938
+ }
18939
+ }
18940
+ function addClusterLayer() {
18941
+ if (!gMainMap) return;
18942
+ let markers = gAllMarkers.map((m) => m.marker);
18943
+ if (gIsClustering) {
18944
+ gMarkerClusterer = new markerClusterer.MarkerClusterer({
18945
+ map: gMainMap,
18946
+ markers: markers,
18947
+ imagePath:
18948
+ "https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m",
18949
+ });
18950
+ gOms = new OverlappingMarkerSpiderfier(gMainMap, {
18951
+ markersWontMove: true,
18952
+ markersWontHide: true,
18953
+ });
18954
+ gOms.addListener("format", function (marker, status) {
18955
+ var icon;
18956
+ if (
18957
+ status ===
18958
+ OverlappingMarkerSpiderfier.markerStatus.SPIDERFIED ||
18959
+ status ===
18960
+ OverlappingMarkerSpiderfier.markerStatus.SPIDERFIABLE ||
18961
+ status ===
18962
+ OverlappingMarkerSpiderfier.markerStatus.UNSPIDERFIED
18963
+ ) {
18964
+ icon = g_icon_image_multi;
18965
+ } else if (
18966
+ status ===
18967
+ OverlappingMarkerSpiderfier.markerStatus.UNSPIDERFIABLE
18968
+ ) {
18969
+ icon = g_icon_image_single;
18970
+ } else {
18971
+ icon = null;
18972
+ }
18973
+ marker.setIcon(icon);
18974
+ });
18975
+ google.maps.event.addListener(
18976
+ gMainMap,
18977
+ "zoom_changed",
18978
+ function () {
18979
+ if (gMainMap.getProjection() == "undefined") return;
18980
+ google.maps.event.addListenerOnce(
18981
+ gMainMap,
18982
+ "idle",
18983
+ function () {
18984
+ if (gMainMap.getProjection() == "undefined") return;
18985
+ if (gOms == null) return;
18986
+ var spidered = gOms.markersNearAnyOtherMarker();
18987
+ for (var i = 0; i < spidered.length; i++) {
18988
+ spidered[i].icon = g_icon_image_multi;
18989
+ }
18990
+ },
18991
+ );
18992
+ },
18993
+ );
18994
+
18995
+ // This is necessary to make the Spiderfy work
18996
+ gOms.addListener("click", function (marker) {
18997
+ marker.zIndex = 999;
18998
+ gInfoWindow.setContent(marker.desc);
18999
+ gInfoWindow.open(gMainMap, marker);
19000
+ });
19001
+ markers.forEach((marker) => gOms.addMarker(marker));
19002
+ } else markers.forEach((m) => m.setMap(gMainMap));
19003
+ }
19004
+ function markSearchPoint(inCoords) {
19005
+ if (!gMainMap) return;
19006
+ if (gSearchPointMarker) gSearchPointMarker.setMap(null);
19007
+ gSearchPointMarker = new google.maps.Marker({
19008
+ position: new google.maps.LatLng(...inCoords),
19009
+ });
19010
+ gSearchPointMarker.setIcon(g_icon_image_searchpoint);
19011
+ gSearchPointMarker.setMap(gMainMap);
19012
+ }
19013
+ function createMarker(
19014
+ inCoords, ///< The long/lat for the marker.
19015
+ multi,
19016
+ inTitle,
19017
+ ) {
19018
+ if (!gMainMap) return;
19019
+ var in_main_icon = multi ? g_icon_image_multi : g_icon_image_single;
19020
+ var marker = null;
19021
+
19022
+ var marker = new google.maps.Marker({
19023
+ position: new google.maps.LatLng(...inCoords),
19024
+ shadow: g_icon_shadow,
19025
+ icon: in_main_icon,
19026
+ shape: g_icon_shape,
19027
+ cursor: "default",
19028
+ title: inTitle,
19029
+ draggable: false,
19030
+ });
19031
+ marker.zIndex = 999;
19032
+ marker.old_image = marker.getIcon();
19033
+ return marker;
19034
+ }
19035
+ function bindPopup(marker, inHtml, inIds, openedMarker) {
19036
+ if (inHtml) {
19037
+ marker.desc = inHtml;
19038
+ google.maps.event.addListener(marker, "click", function () {
19039
+ gAllMarkers.forEach((m) =>
19040
+ m.marker.setIcon(m.marker.old_image),
19041
+ );
19042
+ if (marker.old_image) {
19043
+ marker.setIcon(g_icon_image_selected);
19044
+ }
19045
+ openInfoWindow(marker);
19046
+ });
19047
+ if (gOpenMarker && inIds.includes(parseInt(gOpenMarker))) {
19048
+ openInfoWindow(marker);
19049
+ }
19050
+ gInfoWindow.addListener("closeclick", function () {
19051
+ gOpenMarker = false;
19052
+ gAllMarkers.forEach((m) =>
19053
+ m.marker.setIcon(m.marker.old_image),
19054
+ );
19055
+ jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
19056
+ });
19057
+ }
19058
+ gAllMarkers[gAllMarkers.length] = { ids: inIds, marker: marker };
19059
+ }
19060
+ function addMarkerCallback(marker, cb, in_ids) {
19061
+ if (cb)
19062
+ marker.addListener("click", () => {
19063
+ cb(in_ids);
19064
+ });
19065
+ gAllMarkers.push({ ids: in_ids, marker: marker });
19066
+ }
19067
+ function highlightRow(target) {
19068
+ const id = target.id.split("-")[1];
19069
+ gOpenMarker = id;
19070
+ jQuery(".bmlt-data-row > td").removeClass("rowHighlight");
19071
+ jQuery("#meeting-data-row-" + id + " > td").addClass("rowHighlight");
19072
+ if (typeof crouton == "undefined") crouton.dayTabFromId(id);
19073
+ }
19074
+ function openInfoWindow(marker) {
19075
+ marker.setZIndex(google.maps.Marker.MAX_ZINDEX + 1);
19076
+ gInfoWindow.setContent(marker.desc);
19077
+ gInfoWindow.open(gMainMap, marker);
19078
+ gInfoWindow.addListener("visible", function () {
19079
+ jQuery("input[type=radio][name=panel]:checked").each(
19080
+ function (index, target) {
19081
+ highlightRow(target);
19082
+ },
19083
+ );
19084
+ jQuery("input[type=radio][name=panel]").change(function () {
19085
+ highlightRow(this);
19086
+ });
19087
+ });
19088
+ }
19089
+ function addControl(div, pos, cb) {
19090
+ if (!div) return;
19091
+ if (!gMainMap) {
19092
+ gDiv.appendChild(div);
19093
+ return;
19094
+ }
19095
+ var p = pos;
19096
+ switch (pos) {
19097
+ case "topright":
19098
+ p = google.maps.ControlPosition.TOP_RIGHT;
19099
+ div.style.margin = "10px 10px 0 0";
19100
+ break;
19101
+ case "topleft":
19102
+ p = google.maps.ControlPosition.TOP_LEFT;
19103
+ div.style.margin = "10px 0 0 10px";
19104
+ break;
19105
+ case "bottomleft":
19106
+ p = google.maps.ControlPosition.LEFT_BOTTOM;
19107
+ div.style.margin = "0 0 0px 10px";
19108
+ break;
19109
+ }
19110
+ div.index = 1;
19111
+ if (cb) {
19112
+ const observer = new MutationObserver(function (records) {
19113
+ records.forEach((record) => {
19114
+ record.addedNodes.forEach((n) => {
19115
+ if (n === div) {
19116
+ observer.disconnect();
19117
+ cb();
19118
+ }
19119
+ });
19120
+ });
19121
+ });
19122
+ observer.observe(document, { childList: true, subtree: true });
19123
+ }
19124
+ gMainMap.controls[p].push(div);
19125
+ }
19126
+ function openMarker(id) {
19127
+ if (!gMainMap) return;
19128
+ const marker = gAllMarkers.find((m) => m.ids.includes(id));
19129
+ if (marker) {
19130
+ jQuery("#panel-" + id).prop("checked", true);
19131
+ openInfoWindow(marker.marker);
19132
+ }
19133
+ }
19134
+ function getGeocodingChoices(in_geocode_response) {
19135
+ if (!Array.isArray(in_geocode_response)) return [];
19136
+ return in_geocode_response.map((r) => r.formatted_address);
19137
+ }
19138
+ function getGeocodeCenterAndBounds(in_geocode_response, i = 0) {
19139
+ if (
19140
+ in_geocode_response &&
19141
+ in_geocode_response[i] &&
19142
+ in_geocode_response[i].geometry &&
19143
+ in_geocode_response[i].geometry.location
19144
+ )
19145
+ return {
19146
+ center: {
19147
+ lat: in_geocode_response[i].geometry.location.lat(),
19148
+ lng: in_geocode_response[i].geometry.location.lng(),
19149
+ },
19150
+ southWest: {
19151
+ lat: in_geocode_response[i].geometry.viewport
19152
+ .getSouthWest()
19153
+ .lat(),
19154
+ lng: in_geocode_response[i].geometry.viewport
19155
+ .getSouthWest()
19156
+ .lng(),
19157
+ },
19158
+ northEast: {
19159
+ lat: in_geocode_response[i].geometry.viewport
19160
+ .getNorthEast()
19161
+ .lat(),
19162
+ lng: in_geocode_response[i].geometry.viewport
19163
+ .getNorthEast()
19164
+ .lng(),
19165
+ },
19166
+ };
19167
+ alert(crouton.localization.getWord("address_lookup_fail"));
19168
+ return null;
19169
+ }
19170
+ function callGeocoder(in_loc, callback) {
19171
+ var geocoder = new google.maps.Geocoder();
19172
+
19173
+ if (geocoder) {
19174
+ var geoCodeParams = { address: in_loc };
19175
+ if (config.region && config.region.trim() !== "") {
19176
+ geoCodeParams.region = config.region;
19177
+ }
19178
+ if (
19179
+ config.bounds &&
19180
+ config.bounds.north &&
19181
+ config.bounds.north.trim() !== "" &&
19182
+ config.bounds.east &&
19183
+ config.bounds.east.trim() !== "" &&
19184
+ config.bounds.south &&
19185
+ config.bounds.south.trim() !== "" &&
19186
+ config.bounds.west &&
19187
+ config.bounds.west.trim() !== ""
19188
+ ) {
19189
+ geoCodeParams.bounds = new google.maps.LatLngBounds(
19190
+ new google.maps.LatLng(
19191
+ config.bounds.south,
19192
+ config.bounds.west,
19193
+ ),
19194
+ new google.maps.LatLng(
19195
+ config.bounds.north,
19196
+ config.bounds.east,
19197
+ ),
19198
+ );
19199
+ }
19200
+ geocoder.geocode(geoCodeParams, callback);
19201
+ } else // None of that stuff is defined if we couldn't create the geocoder.
19202
+ {
19203
+ alert(crouton.localization.getWord("address_lookup_fail"));
19204
+ }
19205
+ }
19206
+ function getZoomAdjustedBounds(
19207
+ center_latlng,
19208
+ filterMeetings,
19209
+ zoomLevel,
19210
+ closestMeeting = null,
19211
+ ) {
19212
+ if (!center_latlng) return null;
19213
+ const center = new google.maps.LatLng(
19214
+ center_latlng.lat,
19215
+ center_latlng.lng,
19216
+ );
19000
19217
  const mapWidth = calcOffsetWidth(gDiv);
19001
- const mapHeight = parseInt(jQuery(gDiv).css("height").replace("px",""));
19218
+ const mapHeight = parseInt(
19219
+ jQuery(gDiv).css("height").replace("px", ""),
19220
+ );
19002
19221
  if (center) {
19003
- const zoom = getZoomAdjust(filterMeetings, zoomLevel, center);
19004
- const bounds = calculateBounds(center_latlng, zoom, mapWidth, mapHeight);
19005
- const ret = {"center": center_latlng, "bounds": bounds, "zoom": zoom};
19222
+ const zoom = getZoomAdjust(
19223
+ filterMeetings,
19224
+ zoomLevel,
19225
+ center,
19226
+ closestMeeting,
19227
+ );
19228
+ const bounds = calculateBounds(
19229
+ center_latlng,
19230
+ zoom,
19231
+ mapWidth,
19232
+ mapHeight,
19233
+ );
19234
+ const ret = { center: center_latlng, bounds: bounds, zoom: zoom };
19006
19235
  return ret;
19007
19236
  } else {
19008
- alert ( crouton.localization.getWord("address_lookup_fail") );
19237
+ alert(crouton.localization.getWord("address_lookup_fail"));
19009
19238
  return null;
19010
19239
  }
19011
- }
19240
+ }
19012
19241
  function calculateBoundsFromCenterAndZoom(center, zoomLevel) {
19013
- const mapWidth = calcOffsetWidth(gDiv);
19014
- const mapHeight = parseInt(jQuery(gDiv).css("height").replace("px",""));
19015
- return calculateBounds(center, zoomLevel, mapWidth, mapHeight);
19016
- }
19017
- function invalidateSize() {
19018
- }
19019
- function clickSearch(ev, cb) {
19020
- if (!gMainMap) return;
19021
- gMainMap.setOptions({
19022
- draggableCursor: 'crosshair',
19023
- zoomControl: false,
19024
- gestureHandling: 'none'
19025
- });
19026
- google.maps.event.addListenerOnce( gMainMap, 'click', function(e) {
19027
- gMainMap.setOptions({
19028
- draggableCursor: 'default',
19029
- zoomControl: true,
19030
- gestureHandling: 'auto'
19031
- });
19032
- cb(e.latLng.lat(), e.latLng.lng());
19033
- })
19034
- };
19035
- function getCorners(lat_lngs = false) {
19036
- var bounds = lat_lngs
19037
- ? lat_lngs.reduce(function(b,m) {return b.extend(new google.maps.LatLng(m[0], m[1]));}, new google.maps.LatLngBounds())
19038
- : gMainMap.getBounds();
19039
-
19040
- return {
19041
- "ne" : {"lat": bounds.getNorthEast().lat(), "lng": bounds.getNorthEast().lng()},
19042
- "sw" : {"lat": bounds.getSouthWest().lat(), "lng": bounds.getSouthWest().lng()}
19043
- }
19044
- }
19045
- function getCenter() {
19046
- var center = gMainMap.getCenter();
19047
- return { "lat": center.lat(), "lng": center.lng()}
19048
- }
19049
- function afterInit(doNotWait, f) {
19050
- if (!gMainMap) return;
19051
- if (doNotWait || (typeof gMainMap.getBounds() !== 'undefined')) f();
19052
- else addListener('idle', function() {
19053
- f();
19054
- }, true);
19055
- }
19056
- function modalOn() {}
19057
- function modalOff() {}
19242
+ const mapWidth = calcOffsetWidth(gDiv);
19243
+ const mapHeight = parseInt(
19244
+ jQuery(gDiv).css("height").replace("px", ""),
19245
+ );
19246
+ return calculateBounds(center, zoomLevel, mapWidth, mapHeight);
19247
+ }
19248
+ function invalidateSize() {}
19249
+ function clickSearch(ev, cb) {
19250
+ if (!gMainMap) return;
19251
+ gMainMap.setOptions({
19252
+ draggableCursor: "crosshair",
19253
+ zoomControl: false,
19254
+ gestureHandling: "none",
19255
+ });
19256
+ google.maps.event.addListenerOnce(gMainMap, "click", function (e) {
19257
+ gMainMap.setOptions({
19258
+ draggableCursor: "default",
19259
+ zoomControl: true,
19260
+ gestureHandling: "auto",
19261
+ });
19262
+ cb(e.latLng.lat(), e.latLng.lng());
19263
+ });
19264
+ }
19265
+ function getCorners(lat_lngs = false) {
19266
+ var bounds = lat_lngs
19267
+ ? lat_lngs.reduce(function (b, m) {
19268
+ return b.extend(new google.maps.LatLng(m[0], m[1]));
19269
+ }, new google.maps.LatLngBounds())
19270
+ : gMainMap.getBounds();
19271
+
19272
+ return {
19273
+ ne: {
19274
+ lat: bounds.getNorthEast().lat(),
19275
+ lng: bounds.getNorthEast().lng(),
19276
+ },
19277
+ sw: {
19278
+ lat: bounds.getSouthWest().lat(),
19279
+ lng: bounds.getSouthWest().lng(),
19280
+ },
19281
+ };
19282
+ }
19283
+ function getCenter() {
19284
+ var center = gMainMap.getCenter();
19285
+ return { lat: center.lat(), lng: center.lng() };
19286
+ }
19287
+ function afterInit(doNotWait, f) {
19288
+ if (!gMainMap) return;
19289
+ if (doNotWait || typeof gMainMap.getBounds() !== "undefined") f();
19290
+ else
19291
+ addListener(
19292
+ "idle",
19293
+ function () {
19294
+ f();
19295
+ },
19296
+ true,
19297
+ );
19298
+ }
19299
+ function modalOn() {}
19300
+ function modalOff() {}
19058
19301
  function isMapDefined() {
19059
19302
  return gMainMap !== null && gMainMap !== undefined;
19060
19303
  }
19061
- function isMapVisible() {
19062
- return gMainMap !== null && gMainMap !== undefined && gMainMap.getProjection() !== null && gMainMap.getProjection() !== undefined;
19304
+ function isMapVisible() {
19305
+ return (
19306
+ gMainMap !== null &&
19307
+ gMainMap !== undefined &&
19308
+ gMainMap.getProjection() !== null &&
19309
+ gMainMap.getProjection() !== undefined
19310
+ );
19063
19311
  }
19064
- this.createMap = createMap;
19065
- this.addListener = addListener;
19066
- this.addControl = addControl;
19067
- this.flyToFixedZoom = flyToFixedZoom;
19068
- this.clearAllMarkers = clearAllMarkers;
19069
- this.callGeocoder = callGeocoder;
19312
+ this.createMap = createMap;
19313
+ this.addListener = addListener;
19314
+ this.addControl = addControl;
19315
+ this.flyToFixedZoom = flyToFixedZoom;
19316
+ this.clearAllMarkers = clearAllMarkers;
19317
+ this.callGeocoder = callGeocoder;
19070
19318
  this.getZoomAdjustedBounds = getZoomAdjustedBounds;
19071
- this.getZoom = getZoom;
19072
- this.createMarker = createMarker;
19319
+ this.getZoom = getZoom;
19320
+ this.createMarker = createMarker;
19073
19321
  this.bindPopup = bindPopup;
19074
19322
  this.addMarkerCallback = addMarkerCallback;
19075
- this.contains = contains;
19076
- this.getBounds = getBounds;
19077
- this.invalidateSize = invalidateSize;
19078
- this.fitBounds = fitBounds;
19079
- this.openMarker = openMarker;
19080
- this.isApiLoaded = isApiLoaded;
19081
- this.loadApi = loadApi;
19082
- this.createClusterLayer = createClusterLayer;
19083
- this.addClusterLayer = addClusterLayer;
19084
- this.removeClusterLayer = removeClusterLayer;
19085
- this.clickSearch = clickSearch;
19086
- this.getGeocodeCenterAndBounds = getGeocodeCenterAndBounds;
19087
- this.getGeocodingChoices = getGeocodingChoices;
19088
- this.modalOn = modalOn;
19089
- this.modalOff = modalOff;
19090
- this.removeListener = removeListener;
19091
- this.afterInit = afterInit;
19092
- this.isMapDefined = isMapDefined;
19093
- this.isMapVisible = isMapVisible;
19094
- this.getCorners = getCorners;
19095
- this.getCenter = getCenter;
19096
- this.markSearchPoint = markSearchPoint;
19097
- this.getOpenMarker = getOpenMarker;
19098
- this.calculateBoundsFromCenterAndZoom = calculateBoundsFromCenterAndZoom;
19323
+ this.contains = contains;
19324
+ this.getBounds = getBounds;
19325
+ this.invalidateSize = invalidateSize;
19326
+ this.fitBounds = fitBounds;
19327
+ this.openMarker = openMarker;
19328
+ this.isApiLoaded = isApiLoaded;
19329
+ this.loadApi = loadApi;
19330
+ this.createClusterLayer = createClusterLayer;
19331
+ this.addClusterLayer = addClusterLayer;
19332
+ this.removeClusterLayer = removeClusterLayer;
19333
+ this.clickSearch = clickSearch;
19334
+ this.getGeocodeCenterAndBounds = getGeocodeCenterAndBounds;
19335
+ this.getGeocodingChoices = getGeocodingChoices;
19336
+ this.modalOn = modalOn;
19337
+ this.modalOff = modalOff;
19338
+ this.removeListener = removeListener;
19339
+ this.afterInit = afterInit;
19340
+ this.isMapDefined = isMapDefined;
19341
+ this.isMapVisible = isMapVisible;
19342
+ this.getCorners = getCorners;
19343
+ this.getCenter = getCenter;
19344
+ this.markSearchPoint = markSearchPoint;
19345
+ this.getOpenMarker = getOpenMarker;
19346
+ this.calculateBoundsFromCenterAndZoom = calculateBoundsFromCenterAndZoom;
19099
19347
  }
19100
19348
  MapDelegate.prototype.createMap = null;
19101
19349
  MapDelegate.prototype.addListener = null;
@@ -19126,12 +19374,13 @@ MapDelegate.prototype.modalOn = null;
19126
19374
  MapDelegate.prototype.modalOff = null;
19127
19375
  MapDelegate.prototype.afterInit = null;
19128
19376
  MapDelegate.prototype.isMapDefined = null;
19129
- MapDelegate.prototype,isMapVisible = null;
19377
+ MapDelegate.prototype.isMapVisible = null;
19130
19378
  MapDelegate.prototype.getCorners = null;
19131
- MapDelegate.prototype.getCenter= null;
19379
+ MapDelegate.prototype.getCenter = null;
19132
19380
  MapDelegate.prototype.markSearchPoint = null;
19133
19381
  MapDelegate.prototype.getOpenMarker = null;
19134
19382
  MapDelegate.prototype.calculateBoundsFromCenterAndZoom = null;
19383
+
19135
19384
  var markerClusterer=function(t){"use strict";function e(t,e){var s={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(s[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(s[r[o]]=t[r[o]])}return s}class s{static isAdvancedMarkerAvailable(t){return google.maps.marker&&!0===t.getMapCapabilities().isAdvancedMarkersAvailable}static isAdvancedMarker(t){return google.maps.marker&&t instanceof google.maps.marker.AdvancedMarkerElement}static setMap(t,e){this.isAdvancedMarker(t)?t.map=e:t.setMap(e)}static getPosition(t){if(this.isAdvancedMarker(t)){if(t.position){if(t.position instanceof google.maps.LatLng)return t.position;if(t.position.lat&&t.position.lng)return new google.maps.LatLng(t.position.lat,t.position.lng)}return new google.maps.LatLng(null)}return t.getPosition()}static getVisible(t){return!!this.isAdvancedMarker(t)||t.getVisible()}}class r{constructor(t){let{markers:e,position:s}=t;this.markers=e,s&&(s instanceof google.maps.LatLng?this._position=s:this._position=new google.maps.LatLng(s))}get bounds(){if(0===this.markers.length&&!this._position)return;const t=new google.maps.LatLngBounds(this._position,this._position);for(const e of this.markers)t.extend(s.getPosition(e));return t}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter((t=>s.getVisible(t))).length}push(t){this.markers.push(t)}delete(){this.marker&&(s.setMap(this.marker,null),this.marker=void 0),this.markers.length=0}}const o=(t,e,r,o)=>{const n=i(t.getBounds(),e,o);return r.filter((t=>n.contains(s.getPosition(t))))},i=(t,e,s)=>{const{northEast:r,southWest:o}=h(t,e),i=l({northEast:r,southWest:o},s);return c(i,e)},n=(t,e,s)=>{const r=i(t,e,s),o=r.getNorthEast(),n=r.getSouthWest();return[n.lng(),n.lat(),o.lng(),o.lat()]},a=(t,e)=>{const s=(e.lat-t.lat)*Math.PI/180,r=(e.lng-t.lng)*Math.PI/180,o=Math.sin(s/2),i=Math.sin(r/2),n=o*o+Math.cos(t.lat*Math.PI/180)*Math.cos(e.lat*Math.PI/180)*i*i;return 6371*(2*Math.atan2(Math.sqrt(n),Math.sqrt(1-n)))},h=(t,e)=>({northEast:e.fromLatLngToDivPixel(t.getNorthEast()),southWest:e.fromLatLngToDivPixel(t.getSouthWest())}),l=(t,e)=>{let{northEast:s,southWest:r}=t;return s.x+=e,s.y-=e,r.x-=e,r.y+=e,{northEast:s,southWest:r}},c=(t,e)=>{let{northEast:s,southWest:r}=t;const o=e.fromDivPixelToLatLng(r),i=e.fromDivPixelToLatLng(s);return new google.maps.LatLngBounds(o,i)};class u{constructor(t){let{maxZoom:e=16}=t;this.maxZoom=e}noop(t){let{markers:e}=t;return m(e)}}class p extends u{constructor(t){var{viewportPadding:s=60}=t;super(e(t,["viewportPadding"])),this.viewportPadding=60,this.viewportPadding=s}calculate(t){let{markers:e,map:s,mapCanvasProjection:r}=t;return s.getZoom()>=this.maxZoom?{clusters:this.noop({markers:e}),changed:!1}:{clusters:this.cluster({markers:o(s,r,e,this.viewportPadding),map:s,mapCanvasProjection:r})}}}const m=t=>t.map((t=>new r({position:s.getPosition(t),markers:[t]})));function d(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var g=function t(e,s){if(e===s)return!0;if(e&&s&&"object"==typeof e&&"object"==typeof s){if(e.constructor!==s.constructor)return!1;var r,o,i;if(Array.isArray(e)){if((r=e.length)!=s.length)return!1;for(o=r;0!=o--;)if(!t(e[o],s[o]))return!1;return!0}if(e.constructor===RegExp)return e.source===s.source&&e.flags===s.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===s.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===s.toString();if((r=(i=Object.keys(e)).length)!==Object.keys(s).length)return!1;for(o=r;0!=o--;)if(!Object.prototype.hasOwnProperty.call(s,i[o]))return!1;for(o=r;0!=o--;){var n=i[o];if(!t(e[n],s[n]))return!1}return!0}return e!=e&&s!=s},f=d(g);const k=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];class w{static from(t){if(!(t instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");const[e,s]=new Uint8Array(t,0,2);if(219!==e)throw new Error("Data does not appear to be in a KDBush format.");const r=s>>4;if(1!==r)throw new Error(`Got v${r} data when expected v1.`);const o=k[15&s];if(!o)throw new Error("Unrecognized array type.");const[i]=new Uint16Array(t,2,1),[n]=new Uint32Array(t,4,1);return new w(n,i,o,t)}constructor(t,e=64,s=Float64Array,r){if(isNaN(t)||t<0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+e,2),65535),this.ArrayType=s,this.IndexArrayType=t<65536?Uint16Array:Uint32Array;const o=k.indexOf(this.ArrayType),i=2*t*this.ArrayType.BYTES_PER_ELEMENT,n=t*this.IndexArrayType.BYTES_PER_ELEMENT,a=(8-n%8)%8;if(o<0)throw new Error(`Unexpected typed array class: ${s}.`);r&&r instanceof ArrayBuffer?(this.data=r,this.ids=new this.IndexArrayType(this.data,8,t),this.coords=new this.ArrayType(this.data,8+n+a,2*t),this._pos=2*t,this._finished=!0):(this.data=new ArrayBuffer(8+i+n+a),this.ids=new this.IndexArrayType(this.data,8,t),this.coords=new this.ArrayType(this.data,8+n+a,2*t),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,16+o]),new Uint16Array(this.data,2,1)[0]=e,new Uint32Array(this.data,4,1)[0]=t)}add(t,e){const s=this._pos>>1;return this.ids[s]=s,this.coords[this._pos++]=t,this.coords[this._pos++]=e,s}finish(){const t=this._pos>>1;if(t!==this.numItems)throw new Error(`Added ${t} items when expected ${this.numItems}.`);return y(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(t,e,s,r){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:o,coords:i,nodeSize:n}=this,a=[0,o.length-1,0],h=[];for(;a.length;){const l=a.pop()||0,c=a.pop()||0,u=a.pop()||0;if(c-u<=n){for(let n=u;n<=c;n++){const a=i[2*n],l=i[2*n+1];a>=t&&a<=s&&l>=e&&l<=r&&h.push(o[n])}continue}const p=u+c>>1,m=i[2*p],d=i[2*p+1];m>=t&&m<=s&&d>=e&&d<=r&&h.push(o[p]),(0===l?t<=m:e<=d)&&(a.push(u),a.push(p-1),a.push(1-l)),(0===l?s>=m:r>=d)&&(a.push(p+1),a.push(c),a.push(1-l))}return h}within(t,e,s){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:r,coords:o,nodeSize:i}=this,n=[0,r.length-1,0],a=[],h=s*s;for(;n.length;){const l=n.pop()||0,c=n.pop()||0,u=n.pop()||0;if(c-u<=i){for(let s=u;s<=c;s++)C(o[2*s],o[2*s+1],t,e)<=h&&a.push(r[s]);continue}const p=u+c>>1,m=o[2*p],d=o[2*p+1];C(m,d,t,e)<=h&&a.push(r[p]),(0===l?t-s<=m:e-s<=d)&&(n.push(u),n.push(p-1),n.push(1-l)),(0===l?t+s>=m:e+s>=d)&&(n.push(p+1),n.push(c),n.push(1-l))}return a}}function y(t,e,s,r,o,i){if(o-r<=s)return;const n=r+o>>1;M(t,e,n,r,o,i),y(t,e,s,r,n-1,1-i),y(t,e,s,n+1,o,1-i)}function M(t,e,s,r,o,i){for(;o>r;){if(o-r>600){const n=o-r+1,a=s-r+1,h=Math.log(n),l=.5*Math.exp(2*h/3),c=.5*Math.sqrt(h*l*(n-l)/n)*(a-n/2<0?-1:1);M(t,e,s,Math.max(r,Math.floor(s-a*l/n+c)),Math.min(o,Math.floor(s+(n-a)*l/n+c)),i)}const n=e[2*s+i];let a=r,h=o;for(v(t,e,r,s),e[2*o+i]>n&&v(t,e,r,o);a<h;){for(v(t,e,a,h),a++,h--;e[2*a+i]<n;)a++;for(;e[2*h+i]>n;)h--}e[2*r+i]===n?v(t,e,r,h):(h++,v(t,e,h,o)),h<=s&&(r=h+1),s<=h&&(o=h-1)}}function v(t,e,s,r){x(t,s,r),x(e,2*s,2*r),x(e,2*s+1,2*r+1)}function x(t,e,s){const r=t[e];t[e]=t[s],t[s]=r}function C(t,e,s,r){const o=t-s,i=e-r;return o*o+i*i}const P={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:t=>t},_=Math.fround||(E=new Float32Array(1),t=>(E[0]=+t,E[0]));var E;const A=3,b=5,L=6;class O{constructor(t){this.options=Object.assign(Object.create(P),t),this.trees=new Array(this.options.maxZoom+1),this.stride=this.options.reduce?7:6,this.clusterProps=[]}load(t){const{log:e,minZoom:s,maxZoom:r}=this.options;e&&console.time("total time");const o=`prepare ${t.length} points`;e&&console.time(o),this.points=t;const i=[];for(let e=0;e<t.length;e++){const s=t[e];if(!s.geometry)continue;const[r,o]=s.geometry.coordinates,n=_(T(r)),a=_(j(o));i.push(n,a,1/0,e,-1,1),this.options.reduce&&i.push(0)}let n=this.trees[r+1]=this._createTree(i);e&&console.timeEnd(o);for(let t=r;t>=s;t--){const s=+Date.now();n=this.trees[t]=this._createTree(this._cluster(n,t)),e&&console.log("z%d: %d clusters in %dms",t,n.numItems,+Date.now()-s)}return e&&console.timeEnd("total time"),this}getClusters(t,e){let s=((t[0]+180)%360+360)%360-180;const r=Math.max(-90,Math.min(90,t[1]));let o=180===t[2]?180:((t[2]+180)%360+360)%360-180;const i=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)s=-180,o=180;else if(s>o){const t=this.getClusters([s,r,180,i],e),n=this.getClusters([-180,r,o,i],e);return t.concat(n)}const n=this.trees[this._limitZoom(e)],a=n.range(T(s),j(i),T(o),j(r)),h=n.data,l=[];for(const t of a){const e=this.stride*t;l.push(h[e+b]>1?Z(h,e,this.clusterProps):this.points[h[e+A]])}return l}getChildren(t){const e=this._getOriginId(t),s=this._getOriginZoom(t),r="No cluster with the specified id.",o=this.trees[s];if(!o)throw new Error(r);const i=o.data;if(e*this.stride>=i.length)throw new Error(r);const n=this.options.radius/(this.options.extent*Math.pow(2,s-1)),a=i[e*this.stride],h=i[e*this.stride+1],l=o.within(a,h,n),c=[];for(const e of l){const s=e*this.stride;i[s+4]===t&&c.push(i[s+b]>1?Z(i,s,this.clusterProps):this.points[i[s+A]])}if(0===c.length)throw new Error(r);return c}getLeaves(t,e,s){e=e||10,s=s||0;const r=[];return this._appendLeaves(r,t,e,s,0),r}getTile(t,e,s){const r=this.trees[this._limitZoom(t)],o=Math.pow(2,t),{extent:i,radius:n}=this.options,a=n/i,h=(s-a)/o,l=(s+1+a)/o,c={features:[]};return this._addTileFeatures(r.range((e-a)/o,h,(e+1+a)/o,l),r.data,e,s,o,c),0===e&&this._addTileFeatures(r.range(1-a/o,h,1,l),r.data,o,s,o,c),e===o-1&&this._addTileFeatures(r.range(0,h,a/o,l),r.data,-1,s,o,c),c.features.length?c:null}getClusterExpansionZoom(t){let e=this._getOriginZoom(t)-1;for(;e<=this.options.maxZoom;){const s=this.getChildren(t);if(e++,1!==s.length)break;t=s[0].properties.cluster_id}return e}_appendLeaves(t,e,s,r,o){const i=this.getChildren(e);for(const e of i){const i=e.properties;if(i&&i.cluster?o+i.point_count<=r?o+=i.point_count:o=this._appendLeaves(t,i.cluster_id,s,r,o):o<r?o++:t.push(e),t.length===s)break}return o}_createTree(t){const e=new w(t.length/this.stride|0,this.options.nodeSize,Float32Array);for(let s=0;s<t.length;s+=this.stride)e.add(t[s],t[s+1]);return e.finish(),e.data=t,e}_addTileFeatures(t,e,s,r,o,i){for(const n of t){const t=n*this.stride,a=e[t+b]>1;let h,l,c;if(a)h=I(e,t,this.clusterProps),l=e[t],c=e[t+1];else{const s=this.points[e[t+A]];h=s.properties;const[r,o]=s.geometry.coordinates;l=T(r),c=j(o)}const u={type:1,geometry:[[Math.round(this.options.extent*(l*o-s)),Math.round(this.options.extent*(c*o-r))]],tags:h};let p;p=a||this.options.generateId?e[t+A]:this.points[e[t+A]].id,void 0!==p&&(u.id=p),i.features.push(u)}}_limitZoom(t){return Math.max(this.options.minZoom,Math.min(Math.floor(+t),this.options.maxZoom+1))}_cluster(t,e){const{radius:s,extent:r,reduce:o,minPoints:i}=this.options,n=s/(r*Math.pow(2,e)),a=t.data,h=[],l=this.stride;for(let s=0;s<a.length;s+=l){if(a[s+2]<=e)continue;a[s+2]=e;const r=a[s],c=a[s+1],u=t.within(a[s],a[s+1],n),p=a[s+b];let m=p;for(const t of u){const s=t*l;a[s+2]>e&&(m+=a[s+b])}if(m>p&&m>=i){let t,i=r*p,n=c*p,d=-1;const g=((s/l|0)<<5)+(e+1)+this.points.length;for(const r of u){const h=r*l;if(a[h+2]<=e)continue;a[h+2]=e;const c=a[h+b];i+=a[h]*c,n+=a[h+1]*c,a[h+4]=g,o&&(t||(t=this._map(a,s,!0),d=this.clusterProps.length,this.clusterProps.push(t)),o(t,this._map(a,h)))}a[s+4]=g,h.push(i/m,n/m,1/0,g,-1,m),o&&h.push(d)}else{for(let t=0;t<l;t++)h.push(a[s+t]);if(m>1)for(const t of u){const s=t*l;if(!(a[s+2]<=e)){a[s+2]=e;for(let t=0;t<l;t++)h.push(a[s+t])}}}}return h}_getOriginId(t){return t-this.points.length>>5}_getOriginZoom(t){return(t-this.points.length)%32}_map(t,e,s){if(t[e+b]>1){const r=this.clusterProps[t[e+L]];return s?Object.assign({},r):r}const r=this.points[t[e+A]].properties,o=this.options.map(r);return s&&o===r?Object.assign({},o):o}}function Z(t,e,s){return{type:"Feature",id:t[e+A],properties:I(t,e,s),geometry:{type:"Point",coordinates:[(r=t[e],360*(r-.5)),S(t[e+1])]}};var r}function I(t,e,s){const r=t[e+b],o=r>=1e4?`${Math.round(r/1e3)}k`:r>=1e3?Math.round(r/100)/10+"k":r,i=t[e+L],n=-1===i?{}:Object.assign({},s[i]);return Object.assign(n,{cluster:!0,cluster_id:t[e+A],point_count:r,point_count_abbreviated:o})}function T(t){return t/360+.5}function j(t){const e=Math.sin(t*Math.PI/180),s=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return s<0?0:s>1?1:s}function S(t){const e=(180-360*t)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90}class z extends u{constructor(t){var{maxZoom:s,radius:r=60}=t,o=e(t,["maxZoom","radius"]);super({maxZoom:s}),this.state={zoom:-1},this.superCluster=new O(Object.assign({maxZoom:this.maxZoom,radius:r},o))}calculate(t){let e=!1;const r={zoom:t.map.getZoom()};if(!f(t.markers,this.markers)){e=!0,this.markers=[...t.markers];const r=this.markers.map((t=>{const e=s.getPosition(t);return{type:"Feature",geometry:{type:"Point",coordinates:[e.lng(),e.lat()]},properties:{marker:t}}}));this.superCluster.load(r)}return e||(this.state.zoom<=this.maxZoom||r.zoom<=this.maxZoom)&&(e=!f(this.state,r)),this.state=r,e&&(this.clusters=this.cluster(t)),{clusters:this.clusters,changed:e}}cluster(t){let{map:e}=t;return this.superCluster.getClusters([-180,-90,180,90],Math.round(e.getZoom())).map((t=>this.transformCluster(t)))}transformCluster(t){let{geometry:{coordinates:[e,o]},properties:i}=t;if(i.cluster)return new r({markers:this.superCluster.getLeaves(i.cluster_id,1/0).map((t=>t.properties.marker)),position:{lat:o,lng:e}});const n=i.marker;return new r({markers:[n],position:s.getPosition(n)})}}class U{constructor(t,e){this.markers={sum:t.length};const s=e.map((t=>t.count)),r=s.reduce(((t,e)=>t+e),0);this.clusters={count:e.length,markers:{mean:r/e.length,sum:r,min:Math.min(...s),max:Math.max(...s)}}}}class B{render(t,e,r){let{count:o,position:i}=t;const n=`<svg fill="${o>Math.max(10,e.clusters.markers.mean)?"#ff0000":"#0000ff"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240" width="50" height="50">\n<circle cx="120" cy="120" opacity=".6" r="70" />\n<circle cx="120" cy="120" opacity=".3" r="90" />\n<circle cx="120" cy="120" opacity=".2" r="110" />\n<text x="50%" y="50%" style="fill:#fff" text-anchor="middle" font-size="50" dominant-baseline="middle" font-family="roboto,arial,sans-serif">${o}</text>\n</svg>`,a=`Cluster of ${o} markers`,h=Number(google.maps.Marker.MAX_ZINDEX)+o;if(s.isAdvancedMarkerAvailable(r)){const t=(new DOMParser).parseFromString(n,"image/svg+xml").documentElement;t.setAttribute("transform","translate(0 25)");const e={map:r,position:i,zIndex:h,title:a,content:t};return new google.maps.marker.AdvancedMarkerElement(e)}const l={position:i,zIndex:h,title:a,icon:{url:`data:image/svg+xml;base64,${btoa(n)}`,anchor:new google.maps.Point(25,25)}};return new google.maps.Marker(l)}}class D{constructor(){!function(t,e){for(let s in e.prototype)t.prototype[s]=e.prototype[s]}(D,google.maps.OverlayView)}}var N;t.MarkerClustererEvents=void 0,(N=t.MarkerClustererEvents||(t.MarkerClustererEvents={})).CLUSTERING_BEGIN="clusteringbegin",N.CLUSTERING_END="clusteringend",N.CLUSTER_CLICK="click";const F=(t,e,s)=>{s.fitBounds(e.bounds)};return t.AbstractAlgorithm=u,t.AbstractViewportAlgorithm=p,t.Cluster=r,t.ClusterStats=U,t.DefaultRenderer=B,t.GridAlgorithm=class extends p{constructor(t){var{maxDistance:s=4e4,gridSize:r=40}=t;super(e(t,["maxDistance","gridSize"])),this.clusters=[],this.state={zoom:-1},this.maxDistance=s,this.gridSize=r}calculate(t){let{markers:e,map:s,mapCanvasProjection:r}=t;const i={zoom:s.getZoom()};let n=!1;return this.state.zoom>=this.maxZoom&&i.zoom>=this.maxZoom||(n=!f(this.state,i)),this.state=i,s.getZoom()>=this.maxZoom?{clusters:this.noop({markers:e}),changed:n}:{clusters:this.cluster({markers:o(s,r,e,this.viewportPadding),map:s,mapCanvasProjection:r})}}cluster(t){let{markers:e,map:s,mapCanvasProjection:r}=t;return this.clusters=[],e.forEach((t=>{this.addToClosestCluster(t,s,r)})),this.clusters}addToClosestCluster(t,e,o){let n=this.maxDistance,h=null;for(let e=0;e<this.clusters.length;e++){const r=this.clusters[e],o=a(r.bounds.getCenter().toJSON(),s.getPosition(t).toJSON());o<n&&(n=o,h=r)}if(h&&i(h.bounds,o,this.gridSize).contains(s.getPosition(t)))h.push(t);else{const e=new r({markers:[t]});this.clusters.push(e)}}},t.MarkerClusterer=class extends D{constructor(t){let{map:e,markers:s=[],algorithmOptions:r={},algorithm:o=new z(r),renderer:i=new B,onClusterClick:n=F}=t;super(),this.markers=[...s],this.clusters=[],this.algorithm=o,this.renderer=i,this.onClusterClick=n,e&&this.setMap(e)}addMarker(t,e){this.markers.includes(t)||(this.markers.push(t),e||this.render())}addMarkers(t,e){t.forEach((t=>{this.addMarker(t,!0)})),e||this.render()}removeMarker(t,e){const r=this.markers.indexOf(t);return-1!==r&&(s.setMap(t,null),this.markers.splice(r,1),e||this.render(),!0)}removeMarkers(t,e){let s=!1;return t.forEach((t=>{s=this.removeMarker(t,!0)||s})),s&&!e&&this.render(),s}clearMarkers(t){this.markers.length=0,t||this.render()}render(){const e=this.getMap();if(e instanceof google.maps.Map&&e.getProjection()){google.maps.event.trigger(this,t.MarkerClustererEvents.CLUSTERING_BEGIN,this);const{clusters:r,changed:o}=this.algorithm.calculate({markers:this.markers,map:e,mapCanvasProjection:this.getProjection()});if(o||null==o){const t=new Set;for(const e of r)1==e.markers.length&&t.add(e.markers[0]);const e=[];for(const r of this.clusters)null!=r.marker&&(1==r.markers.length?t.has(r.marker)||s.setMap(r.marker,null):e.push(r.marker));this.clusters=r,this.renderClusters(),requestAnimationFrame((()=>e.forEach((t=>s.setMap(t,null)))))}google.maps.event.trigger(this,t.MarkerClustererEvents.CLUSTERING_END,this)}}onAdd(){this.idleListener=this.getMap().addListener("idle",this.render.bind(this)),this.render()}onRemove(){google.maps.event.removeListener(this.idleListener),this.reset()}reset(){this.markers.forEach((t=>s.setMap(t,null))),this.clusters.forEach((t=>t.delete())),this.clusters=[]}renderClusters(){const e=new U(this.markers,this.clusters),r=this.getMap();this.clusters.forEach((o=>{1===o.markers.length?o.marker=o.markers[0]:(o.marker=this.renderer.render(o,e,r),o.markers.forEach((t=>s.setMap(t,null))),this.onClusterClick&&o.marker.addListener("click",(e=>{google.maps.event.trigger(this,t.MarkerClustererEvents.CLUSTER_CLICK,o),this.onClusterClick(e,o,r)}))),s.setMap(o.marker,r)}))}},t.MarkerUtils=s,t.NoopAlgorithm=class extends u{constructor(t){super(e(t,[]))}calculate(t){let{markers:e,map:s,mapCanvasProjection:r}=t;return{clusters:this.cluster({markers:e,map:s,mapCanvasProjection:r}),changed:!1}}cluster(t){return this.noop(t)}},t.SuperClusterAlgorithm=z,t.SuperClusterViewportAlgorithm=class extends p{constructor(t){var{maxZoom:s,radius:r=60,viewportPadding:o=60}=t,i=e(t,["maxZoom","radius","viewportPadding"]);super({maxZoom:s,viewportPadding:o}),this.superCluster=new O(Object.assign({maxZoom:this.maxZoom,radius:r},i)),this.state={zoom:-1,view:[0,0,0,0]}}calculate(t){const e={zoom:Math.round(t.map.getZoom()),view:n(t.map.getBounds(),t.mapCanvasProjection,this.viewportPadding)};let r=!f(this.state,e);if(!f(t.markers,this.markers)){r=!0,this.markers=[...t.markers];const e=this.markers.map((t=>{const e=s.getPosition(t);return{type:"Feature",geometry:{type:"Point",coordinates:[e.lng(),e.lat()]},properties:{marker:t}}}));this.superCluster.load(e)}return r&&(this.clusters=this.cluster(t),this.state=e),{clusters:this.clusters,changed:r}}cluster(t){let{map:e,mapCanvasProjection:s}=t;const r={zoom:Math.round(e.getZoom()),view:n(e.getBounds(),s,this.viewportPadding)};return this.superCluster.getClusters(r.view,r.zoom).map((t=>this.transformCluster(t)))}transformCluster(t){let{geometry:{coordinates:[e,o]},properties:i}=t;if(i.cluster)return new r({markers:this.superCluster.getLeaves(i.cluster_id,1/0).map((t=>t.properties.marker)),position:{lat:o,lng:e}});const n=i.marker;return new r({markers:[n],position:s.getPosition(n)})}},t.defaultOnClusterClickHandler=F,t.distanceBetweenPoints=a,t.extendBoundsToPaddedViewport=i,t.extendPixelBounds=l,t.filterMarkersToPaddedViewport=o,t.getPaddedViewport=n,t.noop=m,t.pixelBoundsToLatLngBounds=c,Object.defineProperty(t,"__esModule",{value:!0}),t}({});
19136
19385
  //# sourceMappingURL=index.min.js.map
19137
19386