{"version":3,"sources":["dbs.gmaps.ts"],"names":["DBS","MarkerWithPopup","_super","_this","apply","this","arguments","html","__extends","google","maps","Marker","mapId","map","infoWindow","initialZoom","directionsDisplay","directionsService","placeMarkers","loadXmlDocument","xml","bounds","placemarks","responseXML","documentElement","getElementsByTagName","i","Map","document","getElementById","zoom","center","LatLng","mapTypeId","MapTypeId","ROADMAP","length","coords","childNodes","nodeValue","name_1","desc","icon","coordValues","split","point","parseFloat","marker","position","title","event","addListener","close","InfoWindow","content","open","push","LatLngBounds","forEach","value","extend","getPosition","zoomChangeBoundsListener","getZoom","setZoom","removeListener","fitBounds","half","$","parent","appendTo","hide","attr","text","getTitle","element","branchList","createElement","getIcon","toString","indexOf","link","listItem","href","addEventListener","ev","preventDefault","trigger","panelOffset","offset","window","scrollTop","top","innerText","appendChild","fetchDirections","fromAddress","toAddress","destinationObj","parseInt","panel","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","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 bounds.extend(value.getPosition());\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 $(\"\")\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 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 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 },\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 {\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}"]}