{"version":3,"sources":["dbs.gmaps.ts"],"names":["DBS","MarkerWithPopup","_super","__extends","google","maps","Marker","GoogleMap","xmlPath","mapId","map","infoWindow","initialZoom","directionsDisplay","DirectionsRenderer","directionsService","DirectionsService","placeMarkers","Array","loadXmlDocument","xml","placemarks","responseXML","documentElement","getElementsByTagName","Map","document","getElementById","zoom","center","LatLng","mapTypeId","MapTypeId","ROADMAP","i","length","placemark","name_1","firstChild","nodeValue","desc","childNodes","icon","coords","split","point","parseFloat","marker","position","title","html","event","addListener","close","InfoWindow","content","this","open","push","bounds","LatLngBounds","forEach","value","extend","getPosition","zoomChangeBoundsListener","getZoom","setZoom","removeListener","fitBounds","findMapCenterAndZoom","half","$","parent","appendTo","hide","attr","text","getTitle","setupDirectionsBranchList","element","branchList","createElement","getIcon","toString","indexOf","link","href","addEventListener","ev","preventDefault","trigger","window","scrollTop","offset","top","innerText","listItem","appendChild","setupHtmlBranchList","fetchDirections","fromAddress","destinationObj","setMap","setPanel","route","origin","destination","travelMode","TravelMode","DRIVING","unitSystem","UnitSystem","IMPERIAL","provideRouteAlternatives","presentDirections","result","status","directions","errorMsg","DirectionsStatus","OK","style","display","setDirections","Initialize","XmlPath","MapId","ajax","url","complete"],"mappings":"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","file":"dbs.gmaps.js","sourcesContent":["/// \r\n/// \r\n\r\nclass MarkerWithPopup extends google.maps.Marker\r\n{\r\n html: string;\r\n}\r\n\r\nmodule DBS.GoogleMap\r\n{\r\n let xmlPath: string;\r\n let mapId: string;\r\n\r\n let map: google.maps.Map;\r\n let infoWindow: google.maps.InfoWindow;\r\n let initialZoom: boolean;\r\n\r\n let directionsDisplay = new google.maps.DirectionsRenderer();\r\n let directionsService = new google.maps.DirectionsService();\r\n let placeMarkers = new Array();\r\n\r\n function loadXmlDocument(xml: JQueryXHR): void\r\n {\r\n const placemarks = (xml.responseXML as XMLDocument).documentElement.getElementsByTagName(\"Placemark\");\r\n\r\n map = new google.maps.Map(document.getElementById(mapId), {\r\n zoom: 16,\r\n center: new google.maps.LatLng(0, 0),\r\n mapTypeId: google.maps.MapTypeId.ROADMAP\r\n });\r\n\r\n for (let i = 0; i < placemarks.length; i++)\r\n {\r\n const placemark = placemarks[i];\r\n\r\n const name = placemarks[i].getElementsByTagName(\"name\")[0].firstChild.nodeValue;\r\n const desc = placemarks[i].getElementsByTagName(\"description\")[0].childNodes[1].nodeValue;\r\n const icon = placemarks[i].getElementsByTagName(\"iconHref\")[0].childNodes[1].nodeValue;\r\n\r\n const coords = placemark.getElementsByTagName(\"coordinates\")[0].firstChild.nodeValue.split(\",\");\r\n const point = new google.maps.LatLng(parseFloat(coords[1]), parseFloat(coords[0]));\r\n\r\n const marker = new MarkerWithPopup({\r\n map: map,\r\n position: point,\r\n title: name,\r\n icon: icon\r\n });\r\n marker.html = `${name}
${desc}`;\r\n\r\n google.maps.event.addListener(marker, \"click\", function()\r\n {\r\n if (infoWindow != null)\r\n {\r\n infoWindow.close();\r\n }\r\n\r\n infoWindow = new google.maps.InfoWindow({\r\n content: (this as MarkerWithPopup).html\r\n });\r\n\r\n infoWindow.open(map, this);\r\n });\r\n\r\n placeMarkers.push(marker);\r\n }\r\n\r\n findMapCenterAndZoom();\r\n setupDirectionsBranchList();\r\n setupHtmlBranchList();\r\n }\r\n\r\n function findMapCenterAndZoom(): void\r\n {\r\n if (map == null)\r\n {\r\n return;\r\n }\r\n\r\n const bounds = new google.maps.LatLngBounds();\r\n placeMarkers.forEach((value: google.maps.Marker) =>\r\n {\r\n bounds.extend(value.getPosition());\r\n });\r\n\r\n google.maps.event.addListener(map, \"zoom_changed\", () =>\r\n {\r\n const zoomChangeBoundsListener = google.maps.event.addListener(map, \"bounds_changed\", function()\r\n {\r\n if (this.getZoom() > 12 && initialZoom)\r\n {\r\n // Change max/min zoom here\r\n this.setZoom(12);\r\n initialZoom = false;\r\n }\r\n google.maps.event.removeListener(zoomChangeBoundsListener);\r\n });\r\n });\r\n\r\n initialZoom = true;\r\n map.fitBounds(bounds);\r\n }\r\n\r\n function setupDirectionsBranchList(): void\r\n {\r\n if (placeMarkers.length === 1)\r\n {\r\n const half = $(\"#google-map-to\").parent();\r\n $(\"#google-map-from\").appendTo(half);\r\n $(\"#google-map-to\").hide();\r\n $(\"label[for=google-map-to]\").hide();\r\n }\r\n\r\n for (let i = 0; i < placeMarkers.length; i++)\r\n {\r\n $(\"\")\r\n .attr(\"value\", i)\r\n .text(placeMarkers[i].getTitle())\r\n .appendTo(\"select#google-map-to\");\r\n }\r\n }\r\n\r\n function setupHtmlBranchList(): void\r\n {\r\n const element = document.getElementById(`${mapId}-branch-list`) as HTMLDivElement;\r\n if (element == null)\r\n {\r\n return;\r\n }\r\n\r\n const branchList = document.createElement(\"ul\") as HTMLUListElement;\r\n\r\n for (let i = 0; i < placeMarkers.length; i++)\r\n {\r\n const icon = placeMarkers[i].getIcon();\r\n if (icon.toString().indexOf(\"spotlight-waypoint-a.png\") > -1)\r\n {\r\n continue;\r\n }\r\n\r\n const link = document.createElement(\"a\") as HTMLAnchorElement;\r\n link.href = \"#\";\r\n link.addEventListener(\"click\", (ev: Event) => (ev.preventDefault(), triggerMarkerClick(i)));\r\n link.innerText = placeMarkers[i].getTitle();\r\n\r\n const listItem = document.createElement(\"li\") as HTMLLIElement;\r\n listItem.appendChild(link);\r\n\r\n branchList.appendChild(listItem);\r\n }\r\n\r\n element.appendChild(branchList);\r\n }\r\n\r\n function fetchDirections(ev: MouseEvent): void\r\n {\r\n ev.preventDefault();\r\n\r\n const fromAddress = (document.getElementById(`${mapId}-from`) as HTMLInputElement).value;\r\n const destinationObj = (placeMarkers.length === 1\r\n ? placeMarkers[0]\r\n : placeMarkers[(document.getElementById(`${mapId}-to`) as HTMLSelectElement).value]) as google.maps.Marker;\r\n\r\n directionsDisplay.setMap(map);\r\n directionsDisplay.setPanel(document.getElementById(`${mapId}-directions`));\r\n\r\n directionsService.route({\r\n origin: fromAddress,\r\n destination: destinationObj.getPosition(),\r\n travelMode: google.maps.TravelMode.DRIVING,\r\n unitSystem: google.maps.UnitSystem.IMPERIAL,\r\n provideRouteAlternatives: true\r\n }, presentDirections);\r\n }\r\n\r\n function presentDirections(result: google.maps.DirectionsResult, status: google.maps.DirectionsStatus): void\r\n {\r\n const directions = document.getElementById(`${mapId}-directions`) as HTMLDivElement;\r\n const errorMsg = document.getElementById(`${mapId}-error`) as HTMLDivElement;\r\n\r\n if (status === google.maps.DirectionsStatus.OK)\r\n {\r\n directions.style.display = \"block\";\r\n errorMsg.style.display = \"none\";\r\n directionsDisplay.setDirections(result);\r\n }\r\n else\r\n {\r\n directions.style.display = \"none\";\r\n errorMsg.style.display = \"block\";\r\n }\r\n }\r\n\r\n function triggerMarkerClick(i: number): void {\r\n google.maps.event.trigger(placeMarkers[i], \"click\");\r\n $(window).scrollTop($(`#${mapId}`).offset().top);\r\n }\r\n\r\n export function Initialize(XmlPath: string, MapId: string): void\r\n {\r\n xmlPath = XmlPath;\r\n mapId = MapId;\r\n\r\n $.ajax({\r\n url: xmlPath,\r\n complete: loadXmlDocument\r\n });\r\n\r\n const submitBtn = document.getElementById(`${mapId}-submit`);\r\n submitBtn.addEventListener(\"click\", fetchDirections);\r\n }\r\n}"]}