PluginProbe
AI Builder – Generate pages, blocks, images & translate with AI / 2.1.2
AI Builder – Generate pages, blocks, images & translate with AI v2.1.2
2.7.10 2.7.9 2.7.8 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.3.10 All 122 releases
ai-builder / assets / js / map-frontend.js

map-frontend.js in AI Builder – Generate pages, blocks, images & translate with AI 2.1.2, at assets/js/map-frontend.js

84 lines 3.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 (function(){
2 function parseMarkers(root){
3 var el = root.querySelector('.aibui-map-markers');
4 if(!el) return [];
5 try{ return JSON.parse(el.textContent || '[]') || []; }catch(e){ return []; }
6 }
7
8 function initOSM(root){
9 // lazy-load Leaflet from CDN if not already present
10 var ensure = function(cb){
11 if(window.L && window.L.map){ cb(); return; }
12 var css = document.createElement('link');
13 css.rel = 'stylesheet';
14 css.href = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css';
15 document.head.appendChild(css);
16 var s = document.createElement('script');
17 s.src = 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js';
18 s.onload = cb; document.head.appendChild(s);
19 };
20 ensure(function(){
21 var lat = parseFloat(root.getAttribute('data-center-lat')||'0');
22 var lng = parseFloat(root.getAttribute('data-center-lng')||'0');
23 var zoom = parseInt(root.getAttribute('data-zoom')||'12',10);
24 var zoomCtl = root.getAttribute('data-zoom-control')==='1';
25 var draggable = root.getAttribute('data-draggable')==='1';
26 var canvas = root.querySelector('.aibui-map-canvas');
27 if(!canvas) return;
28 var map = L.map(canvas, { zoomControl: zoomCtl, dragging: draggable }).setView([lat,lng], zoom);
29 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap' }).addTo(map);
30 var markers = parseMarkers(root);
31 markers.forEach(function(m){
32 var marker = L.marker([parseFloat(m.lat)||0, parseFloat(m.lng)||0]).addTo(map);
33 if(m.title){ marker.bindPopup(m.title); }
34 });
35 });
36 }
37
38 function initGoogle(root){
39 var apiKey = root.getAttribute('data-api-key')||'';
40 var ensure = function(cb){
41 if(window.google && window.google.maps){ cb(); return; }
42 var cbName = '__aibui_gmaps_cb_'+Math.random().toString(36).slice(2);
43 window[cbName] = function(){ cb(); delete window[cbName]; };
44 var s = document.createElement('script');
45 var base = 'https://maps.googleapis.com/maps/api/js';
46 var qs = (apiKey ? ('key='+encodeURIComponent(apiKey)+'&') : '') + 'callback='+cbName;
47 s.src = base + '?' + qs;
48 s.async = true; s.defer = true; document.head.appendChild(s);
49 };
50 ensure(function(){
51 var lat = parseFloat(root.getAttribute('data-center-lat')||'0');
52 var lng = parseFloat(root.getAttribute('data-center-lng')||'0');
53 var zoom = parseInt(root.getAttribute('data-zoom')||'12',10);
54 var zoomCtl = root.getAttribute('data-zoom-control')==='1';
55 var draggable = root.getAttribute('data-draggable')==='1';
56 var canvas = root.querySelector('.aibui-map-canvas');
57 if(!canvas) return;
58 var map = new google.maps.Map(canvas, { center:{lat:lat, lng:lng}, zoom: zoom, zoomControl: zoomCtl, draggable: draggable });
59 var markers = parseMarkers(root);
60 markers.forEach(function(m){
61 var mk = new google.maps.Marker({ position: {lat: parseFloat(m.lat)||0, lng: parseFloat(m.lng)||0}, map: map, title: m.title||'' });
62 if(m.title){
63 var infowindow = new google.maps.InfoWindow({ content: m.title });
64 mk.addListener('click', function(){ infowindow.open({ anchor: mk, map }); });
65 }
66 });
67 });
68 }
69
70 function boot(){
71 var roots = document.querySelectorAll('.wp-block-ai-builder-aibui-map');
72 for(var i=0;i<roots.length;i++){
73 var r = roots[i];
74 var provider = r.getAttribute('data-provider')||'osm';
75 if(provider==='google') initGoogle(r); else initOSM(r);
76 }
77 }
78 if(document.readyState==='loading'){
79 document.addEventListener('DOMContentLoaded', boot);
80 }else{ boot(); }
81 })();
82
83
84