# ai-builder/2.1.6/assets/js/map-frontend.js

AI Builder – Generate pages, blocks, images &amp; translate with AI, version 2.1.6. 84 lines.

- Page: https://pluginprobe.com/plugins/ai-builder/2.1.6/code/assets/js/map-frontend.js
- Raw: https://pluginprobe.com/plugins/ai-builder/2.1.6/raw/assets/js/map-frontend.js
- Modified: 2025-10-17T09:45:10+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/ai-builder/2.1.6/code/assets/js/map-frontend.js#L10-L20`.

```javascript
(function(){
  function parseMarkers(root){
    var el = root.querySelector('.aibui-map-markers');
    if(!el) return [];
    try{ return JSON.parse(el.textContent || '[]') || []; }catch(e){ return []; }
  }

  function initOSM(root){
    // lazy-load Leaflet from CDN if not already present
    var ensure = function(cb){
      if(window.L && window.L.map){ cb(); return; }
      var css = document.createElement('link');
      css.rel = 'stylesheet';
      css.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';
      document.head.appendChild(css);
      var s = document.createElement('script');
      s.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js';
      s.onload = cb; document.head.appendChild(s);
    };
    ensure(function(){
      var lat = parseFloat(root.getAttribute('data-center-lat')||'0');
      var lng = parseFloat(root.getAttribute('data-center-lng')||'0');
      var zoom = parseInt(root.getAttribute('data-zoom')||'12',10);
      var zoomCtl = root.getAttribute('data-zoom-control')==='1';
      var draggable = root.getAttribute('data-draggable')==='1';
      var canvas = root.querySelector('.aibui-map-canvas');
      if(!canvas) return;
      var map = L.map(canvas, { zoomControl: zoomCtl, dragging: draggable }).setView([lat,lng], zoom);
      L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '&copy; OpenStreetMap' }).addTo(map);
      var markers = parseMarkers(root);
      markers.forEach(function(m){
        var marker = L.marker([parseFloat(m.lat)||0, parseFloat(m.lng)||0]).addTo(map);
        if(m.title){ marker.bindPopup(m.title); }
      });
    });
  }

  function initGoogle(root){
    var apiKey = root.getAttribute('data-api-key')||'';
    var ensure = function(cb){
      if(window.google && window.google.maps){ cb(); return; }
      var cbName = '__aibui_gmaps_cb_'+Math.random().toString(36).slice(2);
      window[cbName] = function(){ cb(); delete window[cbName]; };
      var s = document.createElement('script');
      var base = 'https://maps.googleapis.com/maps/api/js';
      var qs = (apiKey ? ('key='+encodeURIComponent(apiKey)+'&') : '') + 'callback='+cbName;
      s.src = base + '?' + qs;
      s.async = true; s.defer = true; document.head.appendChild(s);
    };
    ensure(function(){
      var lat = parseFloat(root.getAttribute('data-center-lat')||'0');
      var lng = parseFloat(root.getAttribute('data-center-lng')||'0');
      var zoom = parseInt(root.getAttribute('data-zoom')||'12',10);
      var zoomCtl = root.getAttribute('data-zoom-control')==='1';
      var draggable = root.getAttribute('data-draggable')==='1';
      var canvas = root.querySelector('.aibui-map-canvas');
      if(!canvas) return;
      var map = new google.maps.Map(canvas, { center:{lat:lat, lng:lng}, zoom: zoom, zoomControl: zoomCtl, draggable: draggable });
      var markers = parseMarkers(root);
      markers.forEach(function(m){
        var mk = new google.maps.Marker({ position: {lat: parseFloat(m.lat)||0, lng: parseFloat(m.lng)||0}, map: map, title: m.title||'' });
        if(m.title){
          var infowindow = new google.maps.InfoWindow({ content: m.title });
          mk.addListener('click', function(){ infowindow.open({ anchor: mk, map }); });
        }
      });
    });
  }

  function boot(){
    var roots = document.querySelectorAll('.wp-block-ai-builder-aibui-map');
    for(var i=0;i<roots.length;i++){
      var r = roots[i];
      var provider = r.getAttribute('data-provider')||'osm';
      if(provider==='google') initGoogle(r); else initOSM(r);
    }
  }
  if(document.readyState==='loading'){
    document.addEventListener('DOMContentLoaded', boot);
  }else{ boot(); }
})();



```
