{"version":3,"sources":["dbs.search.ts"],"names":["DBS","_super","mapElement","listElement","searchPageNav","sortingOptions","map","infoWindow","initialZoom","MarkerWithPopup","placeMarkers","toggleToMap","ev","preventDefault","classList","remove","add","links","document","getElementById","getElementsByTagName","i","length","href","indexOf","id","parentElement","google","maps","event","trigger","findMapCenterAndZoom","toggleToListing","toggleToSearchPage","targetLink","currentTarget","targetId","substring","lastIndexOf","pages","getElementsByClassName","bounds","LatLngBounds","forEach","value","extend","getPosition","addListener","zoomChangeBoundsListener","this","getZoom","setZoom","removeListener","fitBounds","updateSorting","cookie","location","reload","PropertySearch","Marker","__extends","Array","Initialize","mapId","listId","addEventListener","Map","zoom","mapTypeId","MapTypeId","ROADMAP","searchPages","createElement","className","pageListItem","pageLink","innerText","toFixed","appendChild","listItems","listItem","point","LatLng","parseFloat","dataset","title","desc","outerHTML","link","marker","position","html","close","InfoWindow","content","open","push"],"mappings":"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","file":"dbs.search.js","sourcesContent":["/// \r\n\r\n\"use strict\";\r\n\r\nmodule DBS.PropertySearch\r\n{\r\n class MarkerWithPopup extends google.maps.Marker\r\n {\r\n html: string;\r\n }\r\n\r\n let mapElement: HTMLElement;\r\n let listElement: HTMLElement;\r\n let searchPageNav: HTMLUListElement;\r\n let sortingOptions: HTMLSelectElement;\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 placeMarkers = new Array();\r\n\r\n function toggleToMap(ev: Event)\r\n {\r\n ev.preventDefault();\r\n listElement.classList.remove(\"in\");\r\n mapElement.classList.add(\"in\");\r\n\r\n const links = document.getElementById(\"search-navigation\").getElementsByTagName(\"a\");\r\n for (let i = 0; i < links.length; i++)\r\n {\r\n if (links[i].href.indexOf(`#${mapElement.id}`) !== -1)\r\n {\r\n links[i].parentElement.classList.add(\"active\");\r\n }\r\n else\r\n {\r\n links[i].parentElement.classList.remove(\"active\");\r\n }\r\n }\r\n\r\n // trigger a redraw which is necessary for a map which was loaded invisibly\r\n google.maps.event.trigger(map, \"resize\");\r\n findMapCenterAndZoom();\r\n }\r\n\r\n function toggleToListing(ev: Event)\r\n {\r\n ev.preventDefault();\r\n mapElement.classList.remove(\"in\");\r\n listElement.classList.add(\"in\");\r\n\r\n const links = document.getElementById(\"search-navigation\").getElementsByTagName(\"a\");\r\n for (let i = 0; i < links.length; i++)\r\n {\r\n if (links[i].href.indexOf(`#${listElement.id}`) !== -1)\r\n {\r\n links[i].parentElement.classList.add(\"active\");\r\n }\r\n else\r\n {\r\n links[i].parentElement.classList.remove(\"active\");\r\n }\r\n }\r\n }\r\n\r\n function toggleToSearchPage(ev: Event)\r\n {\r\n ev.preventDefault();\r\n const targetLink = (ev.currentTarget as HTMLAnchorElement).href;\r\n const targetId = targetLink.substring(targetLink.lastIndexOf(\"#\") + 1);\r\n const pages = listElement.getElementsByClassName(\"search-list-page\");\r\n for (let i = 0; i < pages.length; i++)\r\n {\r\n if (pages[i].id === targetId)\r\n {\r\n pages[i].classList.add(\"active\");\r\n }\r\n else\r\n {\r\n pages[i].classList.remove(\"active\");\r\n }\r\n }\r\n\r\n const links = searchPageNav.getElementsByTagName(\"a\");\r\n for (let i = 0; i < links.length; i++)\r\n {\r\n if (links[i].href === targetLink)\r\n {\r\n links[i].parentElement.classList.add(\"active\");\r\n }\r\n else\r\n {\r\n links[i].parentElement.classList.remove(\"active\");\r\n }\r\n }\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 updateSorting()\r\n {\r\n document.cookie = `OrderOptions=${sortingOptions.value}; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/`;\r\n location.reload(true);\r\n }\r\n\r\n export function Initialize(mapId: string, listId: string)\r\n {\r\n sortingOptions = document.getElementById(\"sort_order\") as HTMLSelectElement;\r\n sortingOptions.addEventListener(\"change\", updateSorting);\r\n\r\n const listToggle = document.getElementById(\"toggle-list\") as HTMLAnchorElement;\r\n listToggle.addEventListener(\"click\", toggleToListing);\r\n\r\n const mapToggle = document.getElementById(\"toggle-map\") as HTMLAnchorElement;\r\n mapToggle.addEventListener(\"click\", toggleToMap);\r\n\r\n mapElement = document.getElementById(mapId);\r\n listElement = document.getElementById(listId);\r\n\r\n if (mapElement === null || listElement === null)\r\n {\r\n return;\r\n }\r\n\r\n map = new google.maps.Map(mapElement, {\r\n zoom: 16,\r\n mapTypeId: google.maps.MapTypeId.ROADMAP\r\n });\r\n\r\n const searchPages = listElement.getElementsByClassName(\"search-list-page\");\r\n searchPageNav = document.createElement(\"ul\");\r\n searchPageNav.className = \"pagination\";\r\n for (let i = 0; i < searchPages.length; i++)\r\n {\r\n const pageListItem = document.createElement(\"li\");\r\n if (i === 0)\r\n {\r\n pageListItem.className = \"active\";\r\n }\r\n\r\n const pageLink = document.createElement(\"a\");\r\n pageLink.href = `#${searchPages[i].id}`;\r\n pageLink.innerText = (i + 1).toFixed(0);\r\n pageLink.addEventListener(\"click\", toggleToSearchPage);\r\n\r\n pageListItem.appendChild(pageLink);\r\n searchPageNav.appendChild(pageListItem);\r\n }\r\n\r\n listElement.appendChild(searchPageNav);\r\n\r\n const listItems = document.getElementsByClassName(\"property-item\");\r\n for (let i = 0; i < listItems.length; i++)\r\n {\r\n const listItem = listItems[i] as HTMLAnchorElement;\r\n\r\n const point = new google.maps.LatLng(parseFloat(listItem.dataset[\"lat\"]), parseFloat(listItem.dataset[\"lng\"]));\r\n const title = (listItem.getElementsByTagName(\"h3\")[0] as HTMLHeadingElement).innerText;\r\n const desc = (listItem.getElementsByClassName(\"item-attributes\")[0] as HTMLDivElement).outerHTML;\r\n const link = listItem.href;\r\n\r\n const marker = new MarkerWithPopup({\r\n map: map,\r\n position: point,\r\n title: title\r\n });\r\n marker.html = `${title}
${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 }\r\n}"]}