"use strict"; import Events from "../_events"; import Consts from "js/_consts"; const MapAPI = ((window) => { // Constants const NAME = "js-mapapi"; const MAP_DRIVER = Consts["MAP_DRIVER"]; class MapAPI { // Constructor constructor(el) { const ui = this; const Drv = new MAP_DRIVER(); const BODY = document.querySelector("body"); const config = el.dataset; config["center"] = [ config["lng"] ? config["lng"] : BODY.dataset["default-lng"], config["lat"] ? config["lat"] : BODY.dataset["default-lat"], ]; /*config['style'] = config['style'] ? jQuery.parseJSON(config['style']) : null; config['font-family'] = $BODY.css('font-family');*/ if (!config["icon"]) { config["icon"] = ''; } console.log(`${NAME}: init ${Drv.getName()}...`); ui.drv = Drv; ui.el = el; ui.config = config; Drv.init(el, config); el.addEventListener(Events.MAPAPILOADED, () => { ui.addMarkers(); }); } // Public methods getMap() { return ui.map; } dispose() { const ui = this; ui.el = null; ui.el.classList.remove(`${NAME}-active`); } addMarkers() { console.log(`${NAME}: addMarkers`); const ui = this; const el = ui.el; const Drv = ui.drv; const config = ui.config; ui.map = Drv.getMap(); if (config["geojson"]) { console.log(`${NAME}: setting up geocode data`); Drv.addGeoJson(config); } else if (config["address"]) { console.log(config["address"]); console.log(`${NAME}: setting up address marker`); Drv.geocode(config["address"], (results) => { console.log(results); const lat = results[0].geometry.location.lat(); const lng = results[0].geometry.location.lng(); console.log( `${NAME}: setting up single lat/lng marker lat: ${lat} lng: ${lng}` ); Drv.addMarker([lng, lat], config); ui.map.setCenter({ lat, lng, }); }); } else if (config["lat"] && config["lng"]) { const lat = config["lat"]; const lng = config["lng"]; console.log( `${NAME}: setting up single lat/lng marker lat: ${lat} lng: ${lng}` ); Drv.addMarker([lng, lat], config); } el.classList.add(`${NAME}-active`); el.dispatchEvent(new Event(Events.MAPLOADED)); console.log(`${NAME}: Map is loaded`); } } const init = () => { console.log(`${NAME}: init`); document.querySelectorAll(`.${NAME}`).forEach((el, i) => { const map = new MapAPI(el); }); }; // auto-apply window.addEventListener(`${Events.LODEDANDREADY}`, init); window.addEventListener(`${Events.AJAX}`, init); return MapAPI; })(window); export default MapAPI;