UNPKG

location-picker

Version:

An open source location picker plugin using Google Maps v3 that works with all JavaScript flavors!

3 lines (2 loc) 2.3 kB
class e{constructor(e,t={},n={}){if(this.markerNode=null,this.advancedMarker=null,this.idleListener=null,this.options={setCurrentPosition:!0,useAdvancedMarker:!1,...t},e instanceof HTMLElement?this.element=e:this.element=document.getElementById(e),!this.element)throw new Error(`LocationPicker: element "${String(e)}" was not found.`);const i={center:{lat:this.options.lat??34.4346,lng:this.options.lng??35.8362},zoom:15,...n};this.map=new google.maps.Map(this.element,i),this.element.classList.add("location-picker"),this.initMarker(),this.idleListener=this.map.addListener("idle",()=>{const e=this.getMarkerPosition();this.options.onLocationChange?.(e)}),this.options.setCurrentPosition&&null==this.options.lat&&null==this.options.lng&&this.setCurrentPosition().catch(()=>{})}getMarkerPosition(){const e=this.map.getCenter();return e?{lat:e.lat(),lng:e.lng()}:{lat:0,lng:0}}setLocation(e,t){this.map.setCenter({lat:e,lng:t})}setCurrentPosition(){return new Promise((e,t)=>{"undefined"!=typeof navigator&&navigator.geolocation?navigator.geolocation.getCurrentPosition(t=>{const n={lat:t.coords.latitude,lng:t.coords.longitude};this.map.setCenter(n),e(n)},e=>{t(e instanceof Error?e:new Error("Could not determine your location."))}):t(new Error("Geolocation is not supported by this browser."))})}destroy(){this.idleListener&&(this.idleListener.remove(),this.idleListener=null),this.markerNode&&this.markerNode.parentNode&&this.markerNode.parentNode.removeChild(this.markerNode),this.markerNode=null,this.advancedMarker&&(this.advancedMarker.map=null,this.advancedMarker=null),this.element&&this.element.classList.remove("location-picker")}initMarker(){if(this.options.useAdvancedMarker&&"undefined"!=typeof google&&!!google.maps?.marker?.AdvancedMarkerElement){const e=google.maps.marker.AdvancedMarkerElement;return this.advancedMarker=new e({map:this.map,position:this.map.getCenter()??void 0}),void this.map.addListener("center_changed",()=>{const e=this.map.getCenter();this.advancedMarker&&e&&(this.advancedMarker.position=e)})}const e=document.createElement("div");e.classList.add("centerMarker"),this.markerNode=e;const t=this.element?.children[0];t?t.appendChild(e):this.element&&this.element.appendChild(e)}}export{e as LocationPicker,e as default}; //# sourceMappingURL=index.mjs.map