{"version":3,"sources":["dbs.gmaps.ts"],"names":["DBS","MarkerWithPopup","_super","_this","apply","this","arguments","html","__extends","google","maps","Marker","GoogleMap","xmlPath","mapId","map","infoWindow","initialZoom","directionsDisplay","directionsService","placeMarkers","loadXmlDocument","xml","placemarks","responseXML","documentElement","getElementsByTagName","Map","document","getElementById","zoom","center","LatLng","mapTypeId","MapTypeId","ROADMAP","i","coords","childNodes","nodeValue","name_1","desc","icon","coordValues","split","point","parseFloat","marker","position","title","event","addListener","close","InfoWindow","content","open","push","length","bounds","LatLngBounds","forEach","value","markerPos","getPosition","extend","zoomChangeBoundsListener","getZoom","setZoom","removeListener","fitBounds","findMapCenterAndZoom","half","$","parent","appendTo","hide","getTitle","attr","text","setupDirectionsBranchList","element","branchList","createElement","getIcon","toString","indexOf","link","href","addEventListener","ev","preventDefault","TriggerMarkerClick","innerText","listItem","appendChild","setupHtmlBranchList","fetchDirections","fromAddress","toAddress","destinationObj","parseInt","setMap","panel","setPanel","destinationPos","route","origin","destination","travelMode","TravelMode","DRIVING","unitSystem","UnitSystem","IMPERIAL","provideRouteAlternatives","presentDirections","result","status","directions","errorMsg","DirectionsStatus","OK","style","display","setDirections","trigger","panelOffset","offset","window","scrollTop","top","DirectionsRenderer","DirectionsService","Array","Initialize","XmlPath","MapId","ajax","url","complete","submitBtn"],"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 public 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 {\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 coords = placemark.getElementsByTagName(\"coordinates\")[0].childNodes[0].nodeValue;\r\n if (coords == null)\r\n {\r\n continue;\r\n }\r\n\r\n const name = placemarks[i].getElementsByTagName(\"name\")[0].childNodes[0].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 coordValues = coords.split(\",\");\r\n const point = new google.maps.LatLng(parseFloat(coordValues[1]), parseFloat(coordValues[0]));\r\n\r\n const marker = new MarkerWithPopup({\r\n map: map,\r\n position: point,\r\n title: (name as string),\r\n icon: (icon as string)\r\n } as google.maps.MarkerOptions);\r\n marker.html = `${name}
${desc}`;\r\n\r\n google.maps.event.addListener(marker,\r\n \"click\",\r\n function (this: MarkerWithPopup)\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.html\r\n });\r\n infoWindow.open(map, marker);\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 const markerPos = value.getPosition();\r\n if (markerPos != null)\r\n {\r\n bounds.extend(markerPos);\r\n }\r\n });\r\n\r\n google.maps.event.addListener(map,\r\n \"zoom_changed\",\r\n () =>\r\n {\r\n const zoomChangeBoundsListener = google.maps.event.addListener(map,\r\n \"bounds_changed\",\r\n function (this: google.maps.Map)\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 const title = placeMarkers[i].getTitle();\r\n if (title == null)\r\n {\r\n continue;\r\n }\r\n\r\n $(\"\")\r\n .attr(\"value\", i)\r\n .text(title)\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 == null || 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\r\n const title = placeMarkers[i].getTitle();\r\n if (title != null)\r\n {\r\n link.innerText = title;\r\n }\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 toAddress = (document.getElementById(`${mapId}-to`) as HTMLSelectElement).value;\r\n const destinationObj = (placeMarkers.length === 1\r\n ? placeMarkers[0]\r\n : placeMarkers[parseInt(toAddress)]) as google.maps.Marker;\r\n\r\n directionsDisplay.setMap(map);\r\n\r\n const panel = document.getElementById(`${mapId}-directions`);\r\n if (panel != null)\r\n {\r\n directionsDisplay.setPanel(panel);\r\n }\r\n\r\n const destinationPos = destinationObj.getPosition();\r\n if (destinationPos == null)\r\n {\r\n return;\r\n }\r\n\r\n directionsService.route({\r\n origin: fromAddress,\r\n destination: destinationPos,\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 export function TriggerMarkerClick(i: number): void\r\n {\r\n google.maps.event.trigger(placeMarkers[i], \"click\");\r\n\r\n const panelOffset = $(`#${mapId}`).offset();\r\n if (panelOffset != null)\r\n {\r\n $(window).scrollTop(panelOffset.top);\r\n }\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 if (submitBtn != null)\r\n {\r\n submitBtn.addEventListener(\"click\", fetchDirections);\r\n }\r\n }\r\n}"]}