{"id":86,"date":"2026-09-21T15:13:04","date_gmt":"2026-09-21T13:13:04","guid":{"rendered":"http:\/\/localhost:8888\/foiredesaintours\/?page_id=86"},"modified":"2026-10-27T11:13:55","modified_gmt":"2026-10-27T10:13:55","slug":"gli-espositori","status":"publish","type":"page","link":"https:\/\/lasaintours.it\/fr\/gli-espositori\/","title":{"rendered":"Trova gli espositori"},"content":{"rendered":"\n<div id=\"so-esp\" class=\"so-esp\" aria-busy=\"true\">\n  <div class=\"so-esp__filters\" role=\"search\">\n    <div class=\"so-esp__field so-esp__field--q\">\n      <label for=\"so-q\">Cerca<\/label>\n      <input id=\"so-q\" type=\"search\" placeholder=\"Nome, categoria, via o n\u00b0 banco\" autocomplete=\"off\">\n    <\/div>\n    <div class=\"so-esp__field\">\n      <label for=\"so-settore\">Settore<\/label>\n      <select id=\"so-settore\"><option value=\"\">Tutti<\/option><\/select>\n    <\/div>\n    <div class=\"so-esp__field\">\n      <label for=\"so-cat\">Categoria<\/label>\n      <select id=\"so-cat\"><option value=\"\">Tutte<\/option><\/select>\n    <\/div>\n    <div class=\"so-esp__field\">\n      <label for=\"so-via\">Via<\/label>\n      <select id=\"so-via\"><option value=\"\">Tutte<\/option><\/select>\n    <\/div>\n    <div class=\"so-esp__field\">\n      <label for=\"so-sort\">Ordina per<\/label>\n      <select id=\"so-sort\">\n        <option value=\"banco\">N\u00b0 banco<\/option>\n        <option value=\"nome\">Nome A\u2013Z<\/option>\n      <\/select>\n    <\/div>\n    <button type=\"button\" class=\"so-esp__reset\" id=\"so-reset\">Azzera filtri<\/button>\n  <\/div>\n\n  <p class=\"so-esp__count\" id=\"so-count\" aria-live=\"polite\">Caricamento espositori\u2026<\/p>\n\n  <div class=\"so-esp__tabs\" role=\"tablist\" aria-label=\"Visualizzazione\">\n    <button type=\"button\" role=\"tab\" aria-selected=\"true\" data-view=\"list\">Lista<\/button>\n    <button type=\"button\" role=\"tab\" aria-selected=\"false\" data-view=\"map\">Mappa<\/button>\n  <\/div>\n\n  <div class=\"so-esp__layout\" data-view=\"list\">\n    <div class=\"so-esp__list-wrap\">\n      <ul class=\"so-esp__list\" id=\"so-list\"><\/ul>\n      <button type=\"button\" class=\"so-esp__more\" id=\"so-more\" hidden>Mostra altri espositori<\/button>\n    <\/div>\n    <div class=\"so-esp__map-wrap\">\n      <div class=\"so-esp__map\" id=\"so-map\" role=\"region\" aria-label=\"Mappa degli espositori\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n.so-esp{--so-brand:#9d2c39;--so-brand-dark:#472d2f;--so-ink:#222;--so-muted:#666;--so-line:#e3dcd6;--so-bg:#faf7f4;--so-card:#fff;\n  color:var(--so-ink);font-size:16px;line-height:1.45;width:100%;max-width:1320px!important;margin:48px auto 64px!important;padding:0 16px;font-family:Inter,Helvetica,Arial,sans-serif;box-sizing:border-box}\n.so-esp *,.so-esp *::before,.so-esp *::after{box-sizing:border-box}\n.so-esp__filters{display:grid;grid-template-columns:2fr repeat(4,1fr) auto;gap:12px;align-items:end;\n  background:var(--so-bg);border:1px solid var(--so-line);border-radius:10px;padding:16px;margin-bottom:12px}\n.so-esp__field{display:flex;flex-direction:column;gap:4px;min-width:0}\n.so-esp__field label{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--so-muted)}\n.so-esp input,.so-esp select{width:100%;height:44px;padding:0 12px;border:1px solid #cfc6bf;border-radius:8px;background:#fff;\n  font:inherit;color:inherit;min-width:0}\n.so-esp input:focus,.so-esp select:focus,.so-esp button:focus-visible,.so-esp a:focus-visible{outline:2px solid var(--so-brand);outline-offset:2px}\n.so-esp__reset{height:44px;padding:0 16px;border:1px solid var(--so-brand);background:#fff;color:var(--so-brand);border-radius:8px;\n  font:inherit;font-weight:600;cursor:pointer;white-space:nowrap}\n.so-esp__reset:hover{background:var(--so-brand);color:#fff}\n.so-esp__notice{margin:0 0 12px;padding:10px 14px;border-radius:8px;background:#fff6e0;border:1px solid #f0d58c;color:#5a4500;font-size:14px}\n.so-esp__count{margin:4px 0 12px;font-weight:600;color:var(--so-muted)}\n.so-esp__tabs{display:none}\n.so-esp__layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);gap:20px;align-items:start}\n.so-esp__map-wrap{position:sticky;top:116px}\n.so-esp__map{height:calc(100vh - 140px);min-height:420px;max-height:760px;border-radius:10px;border:1px solid var(--so-line);background:#eee;z-index:0}\n.so-esp__list{list-style:none;margin:0;padding:0;display:grid;gap:12px}\n.so-esp__card{background:var(--so-card);border:1px solid var(--so-line);border-left:4px solid var(--so-brand);border-radius:8px;padding:14px 16px;\n  transition:box-shadow .15s}\n.so-esp__card.is-active{box-shadow:0 0 0 2px var(--so-brand)}\n.so-esp__top{display:flex;gap:12px;align-items:flex-start;justify-content:space-between}\n.so-esp__name{margin:0;font-size:18px;line-height:1.25;font-weight:700;color:var(--so-brand-dark);word-break:break-word}\n.so-esp__badge{flex:none;background:var(--so-brand);color:#fff;font-weight:700;font-size:13px;border-radius:6px;padding:4px 8px;white-space:nowrap}\n.so-esp__meta{margin:6px 0 0;color:var(--so-muted);font-size:14px}\n.so-esp__meta strong{color:var(--so-ink);font-weight:600}\n.so-esp__tag{display:inline-block;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;background:#f6e9ea;color:var(--so-brand-dark);\n  border-radius:4px;padding:2px 6px;margin:8px 6px 0 0}\n.so-esp__actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}\n.so-esp__btn{display:inline-flex;align-items:center;gap:6px;min-height:38px;padding:6px 12px;border-radius:6px;border:1px solid var(--so-line);\n  background:#fff;color:var(--so-ink);font:inherit;font-size:14px;font-weight:600;text-decoration:none;cursor:pointer;line-height:1.2}\n.so-esp__btn:hover{border-color:var(--so-brand);color:var(--so-brand)}\n.so-esp__btn--primary{background:var(--so-brand);border-color:var(--so-brand);color:#fff}\n.so-esp__btn--primary:hover{background:var(--so-brand-dark);color:#fff}\n.so-esp__btn svg{width:16px;height:16px;flex:none}\n.so-esp__contacts{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:10px;font-size:14px}\n.so-esp__contacts a{color:var(--so-brand);text-decoration:underline;word-break:break-all}\n.so-esp__more{display:block;margin:16px auto 0;height:46px;padding:0 24px;border:0;border-radius:8px;background:var(--so-brand);color:#fff;font:inherit;font-weight:700;cursor:pointer}\n.so-esp__empty{padding:28px 16px;text-align:center;background:var(--so-bg);border:1px dashed var(--so-line);border-radius:10px;color:var(--so-muted)}\n.so-esp .leaflet-popup-content{font-size:14px;margin:12px 14px}\n.so-esp__pop h4{margin:0 0 4px;font-size:15px;color:var(--so-brand-dark)}\n.so-esp__pop p{margin:0 0 8px;color:var(--so-muted)}\n.so-esp__pop a{color:var(--so-brand);font-weight:600;margin-right:10px}\n.so-esp__pin{background:var(--so-brand);border:2px solid #fff;border-radius:50%;box-shadow:0 1px 4px rgba(0,0,0,.4)}\n.so-esp .marker-cluster div{background:var(--so-brand)!important;color:#fff;font-weight:700}\n.so-esp .marker-cluster{background:rgba(157,44,57,.3)!important}\n@media (max-width:1100px){.so-esp__filters{grid-template-columns:1fr 1fr 1fr}.so-esp__field--q{grid-column:1\/-1}}\n@media (max-width:900px){\n  .so-esp__tabs{display:flex;position:sticky;top:72px;scroll-margin-top:84px;z-index:5;background:#fff;margin:0 0 12px;border:1px solid var(--so-brand);border-radius:8px;overflow:hidden}\n  .so-esp__tabs button{flex:1;height:44px;border:0;background:#fff;color:var(--so-brand);font:inherit;font-weight:700;cursor:pointer}\n  .so-esp__tabs button[aria-selected=\"true\"]{background:var(--so-brand);color:#fff}\n  .so-esp__layout{display:block}\n  .so-esp__layout[data-view=\"list\"] .so-esp__map-wrap{display:none}\n  .so-esp__layout[data-view=\"map\"] .so-esp__list-wrap{display:none}\n  .so-esp__map-wrap{position:static}\n  .so-esp__map{height:70vh;min-height:360px}\n}\n@media (max-width:600px){\n  .so-esp{padding:0 12px}\n  .so-esp__filters{grid-template-columns:1fr 1fr;padding:12px;gap:10px}\n  .so-esp__reset{grid-column:1\/-1}\n  .so-esp__name{font-size:17px}\n  .so-esp__btn{flex:1 1 auto;justify-content:center}\n}\n<\/style>\n\n<script>\n(function(){\n  'use strict';\n  var DATA_URL = '\/wp-json\/saintours\/v1\/espositori';\n  var GEO_URL  = 'https:\/\/mappe.regione.vda.it\/MOBILE\/LaFoire.asp?tavolo=';\n  var CENTER = [45.7375, 7.3195];\n  var PAGE = 30;\n  var LEAFLET = 'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/';\n  var CLUSTER = 'https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/';\n\n  var root = document.getElementById('so-esp');\n  if (!root || root.dataset.ready) return;\n  root.dataset.ready = '1';\n  var $ = function(id){ return document.getElementById(id); };\n  var els = { q:$('so-q'), settore:$('so-settore'), cat:$('so-cat'), via:$('so-via'), sort:$('so-sort'),\n              reset:$('so-reset'), count:$('so-count'), list:$('so-list'), more:$('so-more'), map:$('so-map'),\n              layout: root.querySelector('.so-esp__layout') };\n\n  var all = [], filtered = [], shown = 0, map = null, cluster = null, markers = {}, mapReady = null;\n\n  function clean(v){ return (v == null ? '' : String(v)).replace(\/\\s+\/g,' ').trim(); }\n  function esc(s){ return String(s).replace(\/[&<>\"']\/g, function(c){ return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]; }); }\n  function nice(s){\n    s = clean(s); if (!s) return '';\n    if (s === s.toUpperCase() && \/[A-Z]\/.test(s)) s = s.charAt(0) + s.slice(1).toLowerCase();\n    return s;\n  }\n  function norm(s){ return clean(s).toLowerCase().normalize('NFD').replace(\/[\u0300-\u036f]\/g,''); }\n  function url(u){ u = clean(u); if (!u) return ''; return \/^https?:\\\/\\\/\/i.test(u) ? u : 'https:\/\/' + u.replace(\/^\\\/+\/, ''); }\n  function num(v){ var n = parseFloat(String(v == null ? '' : v).replace(',', '.')); return isFinite(n) ? n : null; }\n  function natCmp(a,b){ return a.localeCompare(b, 'it', {numeric:true, sensitivity:'base'}); }\n\n  function parse(geo){\n    var out = [];\n    (geo && geo.features || []).forEach(function(f, i){\n      var p = f.properties || {};\n      var name = clean(p.denominazione);\n      if (!name) return;\n      var lat = null, lon = null;\n      if (f.geometry && f.geometry.type === 'Point' && f.geometry.coordinates) {\n        lon = num(f.geometry.coordinates[0]); lat = num(f.geometry.coordinates[1]);\n      }\n      if (lat == null || lon == null) { lat = num(p.lat); lon = num(p.lon); }\n      if (lat == null || lon == null || Math.abs(lat) > 90 || Math.abs(lon) > 180) { lat = lon = null; }\n      var banco = clean(p.banco_num);\n      var item = {\n        id: 'e' + (p.objectid != null ? p.objectid : i),\n        name: name, banco: banco, via: nice(p.via), ubic: clean(p.ubicazione),\n        settore: nice(p.settore), cat: nice(p.categoria_prevalente),\n        web: url(p.sito_web), social: url(p.social), tel: clean(p.telefono), email: clean(p.email),\n        lat: lat, lon: lon,\n        geo: clean(p.mappa) || (banco ? GEO_URL + encodeURIComponent(banco) : '')\n      };\n      var am = banco.match(\/^(\\d+)\\s*ate(lier)?$\/i);\n      item.label = banco ? (am ? 'Atelier ' + am[1] : 'Banco ' + banco) : '';\n      item.gmaps = lat != null ? 'https:\/\/www.google.com\/maps\/search\/?api=1&query=' + lat.toFixed(6) + ',' + lon.toFixed(6) : '';\n      item.search = norm([item.name, item.banco, item.label, item.via, item.ubic, item.settore, item.cat].join(' '));\n      out.push(item);\n    });\n    return out;\n  }\n\n  function fillSelect(sel, key){\n    var seen = {}, vals = [];\n    all.forEach(function(e){ var v = e[key]; if (v && !seen[norm(v)]) { seen[norm(v)] = 1; vals.push(v); } });\n    vals.sort(natCmp).forEach(function(v){ var o = document.createElement('option'); o.value = v; o.textContent = v; sel.appendChild(o); });\n    sel.closest('.so-esp__field').hidden = vals.length === 0;\n  }\n\n  function readUrl(){\n    var u = new URLSearchParams(location.search);\n    els.q.value = u.get('cerca') || '';\n    [['settore','settore'],['cat','categoria'],['via','via'],['sort','ordina']].forEach(function(p){\n      var v = u.get(p[1]); if (v) els[p[0]].value = v;\n    });\n  }\n  function writeUrl(){\n    try {\n      var u = new URL(location.href);\n      [['cerca',els.q.value],['settore',els.settore.value],['categoria',els.cat.value],['via',els.via.value],\n       ['ordina', els.sort.value === 'banco' ? '' : els.sort.value]].forEach(function(p){\n        if (clean(p[1])) u.searchParams.set(p[0], clean(p[1])); else u.searchParams.delete(p[0]);\n      });\n      history.replaceState(null, '', u);\n    } catch(e){}\n  }\n\n  function apply(){\n    var q = norm(els.q.value).split(' ').filter(Boolean);\n    var s = norm(els.settore.value), c = norm(els.cat.value), v = norm(els.via.value);\n    filtered = all.filter(function(e){\n      if (s && norm(e.settore) !== s) return false;\n      if (c && norm(e.cat) !== c) return false;\n      if (v && norm(e.via) !== v) return false;\n      for (var i = 0; i < q.length; i++) if (e.search.indexOf(q[i]) < 0) return false;\n      return true;\n    });\n    filtered.sort(els.sort.value === 'nome'\n      ? function(a,b){ return natCmp(a.name,b.name); }\n      : function(a,b){ return (!a.banco - !b.banco) || natCmp(a.label, b.label) || natCmp(a.name,b.name); });\n    shown = 0; els.list.innerHTML = '';\n    renderMore();\n    var n = filtered.length;\n    els.count.textContent = n === all.length\n      ? n + ' espositori'\n      : n + (n === 1 ? ' espositore trovato' : ' espositori trovati') + ' su ' + all.length;\n    if (!n) els.list.innerHTML = '<li class=\"so-esp__empty\">Nessun espositore corrisponde ai filtri selezionati.<\/li>';\n    updateMap();\n    writeUrl();\n  }\n\n  var ICON_PIN = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 21s-7-6.2-7-11.5A7 7 0 0 1 19 9.5C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg>';\n  var ICON_EXT = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M14 4h6v6M20 4l-9 9M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5\"\/><\/svg>';\n\n  function card(e){\n    var where = [e.via, e.ubic && norm(e.ubic) !== norm(e.via) ? e.ubic : ''].filter(Boolean).join(' \u2013 ');\n    var h = '<li class=\"so-esp__card\" id=\"so-' + e.id + '\"><div class=\"so-esp__top\"><h3 class=\"so-esp__name\">' + esc(e.name) + '<\/h3>' +\n      (e.banco ? '<span class=\"so-esp__badge\">' + esc(e.label) + '<\/span>' : '') + '<\/div>';\n    if (where) h += '<p class=\"so-esp__meta\"><strong>' + esc(where) + '<\/strong><\/p>';\n    if (e.cat) h += '<span class=\"so-esp__tag\">' + esc(e.cat) + '<\/span>';\n    if (e.settore) h += '<span class=\"so-esp__tag\">' + esc(e.settore) + '<\/span>';\n    h += '<div class=\"so-esp__actions\">';\n    if (e.lat != null) h += '<button type=\"button\" class=\"so-esp__btn so-esp__btn--primary\" data-show=\"' + e.id + '\">' + ICON_PIN + 'Vedi sulla mappa<\/button>';\n    if (e.geo) h += '<a class=\"so-esp__btn\" href=\"' + esc(e.geo) + '\" target=\"_blank\" rel=\"noopener\">' + ICON_EXT + 'Geoportale<\/a>';\n    if (e.gmaps) h += '<a class=\"so-esp__btn\" href=\"' + esc(e.gmaps) + '\" target=\"_blank\" rel=\"noopener\">' + ICON_EXT + 'Google Maps<\/a>';\n    h += '<\/div>';\n    var c = [];\n    if (e.web) c.push('<a href=\"' + esc(e.web) + '\" target=\"_blank\" rel=\"noopener\">Sito web<\/a>');\n    if (e.social) c.push('<a href=\"' + esc(e.social) + '\" target=\"_blank\" rel=\"noopener\">Social<\/a>');\n    if (e.tel) c.push('<a href=\"tel:' + esc(e.tel.replace(\/[^\\d+]\/g,'')) + '\">' + esc(e.tel) + '<\/a>');\n    if (e.email) c.push('<a href=\"mailto:' + esc(e.email) + '\">' + esc(e.email) + '<\/a>');\n    if (c.length) h += '<div class=\"so-esp__contacts\">' + c.join('') + '<\/div>';\n    return h + '<\/li>';\n  }\n  function renderMore(){\n    var next = filtered.slice(shown, shown + PAGE);\n    els.list.insertAdjacentHTML('beforeend', next.map(card).join(''));\n    shown += next.length;\n    els.more.hidden = shown >= filtered.length;\n  }\n\n  function load(tag, attrs){\n    return new Promise(function(res, rej){\n      var el = document.createElement(tag);\n      for (var k in attrs) el[k] = attrs[k];\n      el.onload = res; el.onerror = rej;\n      document.head.appendChild(el);\n    });\n  }\n  function initMap(){\n    if (mapReady) return mapReady;\n    mapReady = Promise.all([\n      load('link', {rel:'stylesheet', href: LEAFLET + 'leaflet.css'}),\n      load('link', {rel:'stylesheet', href: CLUSTER + 'MarkerCluster.css'}),\n      load('link', {rel:'stylesheet', href: CLUSTER + 'MarkerCluster.Default.css'}),\n      window.L ? Promise.resolve() : load('script', {src: LEAFLET + 'leaflet.js'})\n    ]).then(function(){\n      return window.L.markerClusterGroup ? null : load('script', {src: CLUSTER + 'leaflet.markercluster.js'});\n    }).then(function(){\n      var L = window.L;\n      map = L.map(els.map, {scrollWheelZoom:false, tap:true}).setView(CENTER, 16);\n      L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\n        maxZoom: 20, maxNativeZoom: 19,\n        attribution: '&copy; <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a>'\n      }).addTo(map);\n      map.on('focus', function(){ map.scrollWheelZoom.enable(); });\n      map.on('blur', function(){ map.scrollWheelZoom.disable(); });\n      cluster = L.markerClusterGroup({showCoverageOnHover:false, maxClusterRadius:40, disableClusteringAtZoom:19});\n      var icon = L.divIcon({className:'so-esp__pin', iconSize:[16,16]});\n      all.forEach(function(e){\n        if (e.lat == null) return;\n        var pop = '<div class=\"so-esp__pop\"><h4>' + esc(e.name) + '<\/h4><p>' +\n          esc([e.label, e.via, e.cat].filter(Boolean).join(' \u00b7 ')) + '<\/p>' +\n          (e.geo ? '<a href=\"' + esc(e.geo) + '\" target=\"_blank\" rel=\"noopener\">Geoportale<\/a>' : '') +\n          (e.gmaps ? '<a href=\"' + esc(e.gmaps) + '\" target=\"_blank\" rel=\"noopener\">Google Maps<\/a>' : '') + '<\/div>';\n        markers[e.id] = L.marker([e.lat, e.lon], {icon: icon, title: e.name, keyboard: true}).bindPopup(pop);\n      });\n      map.addLayer(cluster);\n      updateMap(true);\n    }).catch(function(){\n      els.map.innerHTML = '<div class=\"so-esp__empty\">Impossibile caricare la mappa. Usa i link Geoportale o Google Maps nella lista.<\/div>';\n    });\n    return mapReady;\n  }\n  function updateMap(fit){\n    if (!cluster) return;\n    cluster.clearLayers();\n    var ls = filtered.map(function(e){ return markers[e.id]; }).filter(Boolean);\n    cluster.addLayers(ls);\n    if (ls.length) {\n      var b = window.L.featureGroup(ls).getBounds();\n      if (b.isValid()) map.fitBounds(b.pad(0.08), {maxZoom: 18, animate: !fit});\n    }\n  }\n  function showOnMap(id){\n    setView('map');\n    initMap().then(function(){\n      var m = markers[id]; if (!m) return;\n      map.invalidateSize();\n      cluster.zoomToShowLayer(m, function(){ m.openPopup(); });\n      if (window.matchMedia('(min-width:901px)').matches) {\n        var r = els.map.getBoundingClientRect();\n        if (r.top < 0 || r.bottom > innerHeight) els.map.scrollIntoView({behavior:'smooth', block:'center'});\n      } else {\n        root.querySelector('.so-esp__tabs').scrollIntoView({behavior:'smooth', block:'start'});\n      }\n    });\n    root.querySelectorAll('.so-esp__card.is-active').forEach(function(c){ c.classList.remove('is-active'); });\n    var c = document.getElementById('so-' + id); if (c) c.classList.add('is-active');\n  }\n\n  function setView(v){\n    els.layout.dataset.view = v;\n    root.querySelectorAll('.so-esp__tabs button').forEach(function(b){ b.setAttribute('aria-selected', b.dataset.view === v ? 'true' : 'false'); });\n    if (v === 'map') initMap().then(function(){ map && map.invalidateSize(); });\n  }\n\n  var t;\n  els.q.addEventListener('input', function(){ clearTimeout(t); t = setTimeout(apply, 180); });\n  ['settore','cat','via','sort'].forEach(function(k){ els[k].addEventListener('change', apply); });\n  els.reset.addEventListener('click', function(){ els.q.value = ''; els.settore.value = els.cat.value = els.via.value = ''; els.sort.value = 'banco'; apply(); });\n  els.more.addEventListener('click', renderMore);\n  els.list.addEventListener('click', function(ev){ var b = ev.target.closest('[data-show]'); if (b) showOnMap(b.dataset.show); });\n  root.querySelectorAll('.so-esp__tabs button').forEach(function(b){ b.addEventListener('click', function(){ setView(b.dataset.view); }); });\n\n  function start(geo){\n    all = parse(geo);\n    root.removeAttribute('aria-busy');\n    if (!all.length) {\n      els.count.textContent = '';\n      els.list.innerHTML = '<li class=\"so-esp__empty\">L\u2019elenco degli espositori sar\u00e0 disponibile a breve.<\/li>';\n      root.querySelector('.so-esp__filters').hidden = true;\n      return;\n    }\n    if (geo && geo.so_test) els.count.insertAdjacentHTML('beforebegin', '<p class=\"so-esp__notice\">Dati provvisori: l\u2019elenco definitivo degli espositori sar\u00e0 pubblicato a breve.<\/p>');\n    fillSelect(els.settore, 'settore'); fillSelect(els.cat, 'cat'); fillSelect(els.via, 'via');\n    readUrl(); apply();\n    if ('IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function(en){\n        if (en.some(function(x){ return x.isIntersecting; }) && getComputedStyle(els.map.parentNode).display !== 'none') { io.disconnect(); initMap(); }\n      }, {rootMargin:'300px'});\n      io.observe(els.map);\n    } else initMap();\n  }\n\n  if (window.SO_ESP_TEST_DATA) { start(window.SO_ESP_TEST_DATA); return; }\n  fetch(DATA_URL)\n    .then(function(r){ if (!r.ok) throw new Error(r.status); return r.json(); })\n    .then(start)\n    .catch(function(){\n      root.removeAttribute('aria-busy');\n      els.count.textContent = '';\n      els.list.innerHTML = '<li class=\"so-esp__empty\">Al momento non \u00e8 possibile caricare l\u2019elenco degli espositori. Riprova tra qualche minuto.<\/li>';\n    });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Cerca Settore Tutti Categoria Tutte Via Tutte Ordina per N\u00b0 bancoNome A\u2013Z Azzera filtri Caricamento espositori\u2026 Lista Mappa Mostra altri espositori<\/p>","protected":false},"author":1,"featured_media":389,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"full-width","meta":{"saved_in_kubio":true,"footnotes":""},"class_list":["post-86","page","type-page","status-publish","has-post-thumbnail","hentry"],"kubio_ai_page_context":{"short_desc":"","purpose":"general"},"_links":{"self":[{"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/pages\/86","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/comments?post=86"}],"version-history":[{"count":10,"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/pages\/86\/revisions"}],"predecessor-version":[{"id":741,"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/pages\/86\/revisions\/741"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/media\/389"}],"wp:attachment":[{"href":"https:\/\/lasaintours.it\/fr\/wp-json\/wp\/v2\/media?parent=86"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}