{"version":3,"sources":["dbs.gmaps.ts"],"names":["DBS","MarkerWithPopup","_super","__extends","google","maps","Marker","mapId","map","infoWindow","initialZoom","directionsDisplay","directionsService","placeMarkers","loadXmlDocument","xml","placemarks","responseXML","documentElement","getElementsByTagName","Map","document","getElementById","zoom","center","LatLng","mapTypeId","MapTypeId","ROADMAP","bounds","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","LatLngBounds","forEach","value","extend","getPosition","zoomChangeBoundsListener","getZoom","setZoom","removeListener","fitBounds","half","$","parent","appendTo","hide","attr","text","getTitle","setupDirectionsBranchList","element","getIcon","toString","indexOf","link","createElement","href","addEventListener","ev","preventDefault","trigger","window","scrollTop","offset","top","innerText","listItem","appendChild","branchList","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","GoogleMap","DirectionsRenderer","DirectionsService","Array","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}"]}