{"id":1756,"date":"2026-11-05T04:59:20","date_gmt":"2026-11-05T01:29:20","guid":{"rendered":"https:\/\/honargardi.com\/en\/?page_id=1756"},"modified":"2026-11-05T14:01:21","modified_gmt":"2026-11-05T10:31:21","slug":"map","status":"publish","type":"page","link":"https:\/\/honargardi.com\/en\/map\/","title":{"rendered":"Gallery Map"},"content":{"rendered":"\n<p>Explore the exhibitions and events Honargardi has covered on an interactive map. Each pin is a venue \u2014 gallery, museum or institution \u2014 with a verified address.<\/p>\n<div id=\"honargardi-gallery-map\" style=\"width:100%;height:600px;border-radius:8px;margin:0 0 10px;\"><\/div>\n<p id=\"honargardi-gallery-map-status\" style=\"font-size:0.9em;color:#777;text-align:center;\">Loading the map\u2026<\/p>\n<p style=\"text-align:center;margin:0 0 20px;\">\n  <label style=\"font-size:0.9em;color:#555;cursor:pointer;\">\n    <input type=\"checkbox\" id=\"honargardi-map-archive-toggle\"> Also show the archive (past events)\n  <\/label>\n<\/p>\n<div id=\"honargardi-today-panel\" style=\"display:none;max-width:720px;margin:0 auto 28px;padding:20px 24px;border:1px solid rgba(212,0,0,0.25);border-radius:8px;background:rgba(212,0,0,0.04);\">\n  <h3 style=\"margin:0 0 4px;font-size:22px;color:#D40000;\">Opening Today<\/h3>\n  <p id=\"honargardi-today-sub\" style=\"margin:0 0 14px;font-size:14px;color:#777;\">Galleries and museums with a vernissage today<\/p>\n  <div id=\"honargardi-today-list\"><\/div>\n<\/div>\n<div id=\"honargardi-week-panel\" style=\"display:none;max-width:720px;margin:0 auto 20px;padding:20px 24px;border:1px solid #e3e0da;border-radius:8px;background:#fafaf8;\">\n  <h3 style=\"margin:0 0 4px;font-size:22px;color:#141210;\">Openings This Week<\/h3>\n  <p style=\"margin:0 0 14px;font-size:14px;color:#777;\">New exhibitions opening in the next 7 days \u2014 follow Honargardi for the full calendar.<\/p>\n  <div id=\"honargardi-week-list\"><\/div>\n<\/div>\n<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\">\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\n<style>\n.hg-pin-dot{display:block;border-radius:50%;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.4)}\n.hg-pulse-ring{position:absolute;top:50%;left:50%;border-radius:50%;opacity:.55;transform:translate(-50%,-50%) scale(1);animation:hgPulse 1.6s ease-out infinite;pointer-events:none}\n@keyframes hgPulse{0%{transform:translate(-50%,-50%) scale(1);opacity:.55}100%{transform:translate(-50%,-50%) scale(2.6);opacity:0}}\n.hg-list-row{display:block;padding:10px 0;border-top:1px solid rgba(20,18,16,.1);text-decoration:none;color:inherit;cursor:pointer}\n.hg-list-row:first-child{border-top:none}\n.hg-list-row:hover .hg-list-title{color:#D40000}\n.hg-list-meta{font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:#D40000;margin:0 0 2px}\n.hg-list-meta.hg-muted{color:#8a8378}\n.hg-list-title{font-size:16px;font-weight:600;color:#141210;margin:0}\n.hg-list-venue{font-size:13px;color:#5E574E;margin:2px 0 0}\n<\/style>\n<script>\n(function(){\n  function AND(){\n    for(var i=0;i<arguments.length;i++){ if(!arguments[i]) return false; }\n    return true;\n  }\n  var AMP = String.fromCharCode(38);\n  function pad(n){ return n < 10 ? \"0\" + n : \"\" + n; }\n  function ymd(d){ return \"\" + d.getFullYear() + pad(d.getMonth()+1) + pad(d.getDate()); }\n  function fmtDate(s){ if(!s||s.length!==8) return s||\"\"; return s.slice(6,8) + \"\/\" + s.slice(4,6) + \"\/\" + s.slice(0,4); }\n  function humanDate(s){\n    if(!s||s.length!==8) return \"\";\n    var d = new Date(parseInt(s.slice(0,4),10), parseInt(s.slice(4,6),10)-1, parseInt(s.slice(6,8),10));\n    var days = [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];\n    var months = [\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];\n    return days[d.getDay()] + \" \" + d.getDate() + \" \" + months[d.getMonth()];\n  }\n\n  var today = new Date();\n  var todayStr = ymd(today);\n  var weekEnd = new Date(today); weekEnd.setDate(weekEnd.getDate()+6);\n  var weekEndStr = ymd(weekEnd);\n\n  var todaySub = document.getElementById(\"honargardi-today-sub\");\n  if(todaySub){ todaySub.textContent = humanDate(todayStr) + \" \u2014 galleries and museums with a vernissage today\"; }\n  var statusEl = document.getElementById(\"honargardi-gallery-map-status\");\n  var mapDiv = document.getElementById(\"honargardi-gallery-map\");\n  var archiveToggle = document.getElementById(\"honargardi-map-archive-toggle\");\n  var todayPanel = document.getElementById(\"honargardi-today-panel\");\n  var todayList = document.getElementById(\"honargardi-today-list\");\n  var weekPanel = document.getElementById(\"honargardi-week-panel\");\n  var weekList = document.getElementById(\"honargardi-week-list\");\n\n  var map = L.map(mapDiv).setView([48.8566, 2.3522], 12);\n  L.tileLayer(\"https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png\", {\n    attribution: '\u00a9 OpenStreetMap contributors',\n    maxZoom: 19\n  }).addTo(map);\n\n  var currentLayer = L.layerGroup().addTo(map);\n  var archiveLayer = L.layerGroup();\n  var markerByPostId = {};\n\n  function dotIcon(color, size, pulse){\n    var html = '<span class=\"hg-pin-dot\" style=\"background:'+color+';width:'+size+'px;height:'+size+'px;\"><\/span>';\n    if(pulse){ html += '<span class=\"hg-pulse-ring\" style=\"width:'+size+'px;height:'+size+'px;background:'+color+';\"><\/span>'; }\n    return L.divIcon({ className:'', html: html, iconSize:[size,size], iconAnchor:[size\/2,size\/2], popupAnchor:[0,-size\/2] });\n  }\n\n  function buildPopup(post, badge){\n    var a = post.acf || {};\n    var html = '';\n    if(badge){ html += '<div style=\"font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#D40000;margin-bottom:4px;\">'+badge+'<\/div>'; }\n    html += '<strong>' + (a.venue_name || post.title.rendered) + '<\/strong><br>';\n    if(a.exhibition_title){ html += a.exhibition_title + '<br>'; }\n    if(a.artists){ html += '<em>' + a.artists + '<\/em><br>'; }\n    var dates = '';\n    if(a.start_date){ dates += 'From ' + fmtDate(a.start_date); }\n    if(a.end_date){ dates += (dates?' ':'') + 'to ' + fmtDate(a.end_date); }\n    if(dates){ html += dates + '<br>'; }\n    if(a.address){ html += a.address + '<br>'; }\n    if(a.source_link){ html += '<a href=\"'+a.source_link+'\" target=\"_blank\" rel=\"noopener\">View source<\/a> \u00b7 '; }\n    html += '<a href=\"'+post.link+'\" target=\"_blank\" rel=\"noopener\">Honargardi listing<\/a>';\n    return html;\n  }\n\n  function flyTo(postId){\n    var m = markerByPostId[postId];\n    if(!m) return;\n    map.flyTo(m.getLatLng(), 15, {duration:0.6});\n    setTimeout(function(){ m.openPopup(); }, 650);\n  }\n\n  var mapFeedUrl = \"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/posts?categories=232\" + AMP + \"per_page=100\" + AMP + \"_fields=id,title,link,acf\";\n  fetch(mapFeedUrl)\n    .then(function(r){ return r.json(); })\n    .then(function(posts){\n      var currentCount = 0, archiveCount = 0;\n      var todayItems = [], weekItems = [];\n\n      posts.forEach(function(post){\n        var a = post.acf;\n        if(!a || !a.lat || !a.lng) return;\n        var lat = parseFloat(a.lat), lng = parseFloat(a.lng);\n        if(isNaN(lat) || isNaN(lng)) return;\n\n        var isPast = AND(a.end_date, a.end_date.length===8, a.end_date < todayStr);\n        var isToday = AND(a.start_date, a.start_date === todayStr);\n        var isThisWeek = AND(!isToday, a.start_date, a.start_date.length===8, a.start_date > todayStr, a.start_date <= weekEndStr);\n\n        var icon, badge, layer;\n        if(isPast){\n          icon = dotIcon('#9a9690', 16, false);\n          layer = archiveLayer;\n          archiveCount++;\n        } else if(isToday){\n          icon = dotIcon('#D40000', 30, true);\n          badge = 'Opening Today';\n          layer = currentLayer;\n          currentCount++;\n          todayItems.push(post);\n        } else if(isThisWeek){\n          icon = dotIcon('#E08A00', 24, false);\n          badge = 'Opens This Week';\n          layer = currentLayer;\n          currentCount++;\n          weekItems.push(post);\n        } else {\n          icon = dotIcon('#3A6B7A', 20, false);\n          layer = currentLayer;\n          currentCount++;\n        }\n\n        var marker = L.marker([lat, lng], {icon: icon, opacity: isPast ? 0.55 : 1});\n        marker.bindPopup(buildPopup(post, badge));\n        marker.addTo(layer);\n        markerByPostId[post.id] = marker;\n      });\n\n      if(archiveToggle){\n        archiveToggle.addEventListener('change', function(){\n          if(this.checked){ map.addLayer(archiveLayer); } else { map.removeLayer(archiveLayer); }\n          statusEl.textContent = this.checked\n            ? currentCount + ' current + ' + archiveCount + ' archived locations on the map'\n            : currentCount + ' current locations on the map';\n        });\n      }\n\n      statusEl.textContent = currentCount + ' current locations on the map';\n\n      function rowHtml(post, metaText, muted){\n        var a = post.acf;\n        return '<div class=\"hg-list-row\" data-post-id=\"'+post.id+'\">' +\n          '<div class=\"hg-list-meta'+(muted?' hg-muted':'')+'\">'+metaText+'<\/div>' +\n          '<div class=\"hg-list-title\">'+(a.exhibition_title || post.title.rendered)+'<\/div>' +\n          '<div class=\"hg-list-venue\">'+(a.venue_name||'')+(a.city?(' \u00b7 '+a.city):'')+'<\/div>' +\n          '<\/div>';\n      }\n\n      if(todayItems.length){\n        todayPanel.style.display = 'block';\n        todayList.innerHTML = todayItems.map(function(p){ return rowHtml(p, 'Opens today'); }).join('');\n      }\n\n      if(weekItems.length){\n        weekItems.sort(function(x,y){ return x.acf.start_date.localeCompare(y.acf.start_date); });\n        weekPanel.style.display = 'block';\n        weekList.innerHTML = weekItems.map(function(p){ return rowHtml(p, humanDate(p.acf.start_date)); }).join('');\n      }\n\n      Array.prototype.forEach.call(document.querySelectorAll('.hg-list-row'), function(row){\n        row.addEventListener('click', function(){ flyTo(parseInt(row.getAttribute('data-post-id'),10)); });\n      });\n    })\n    .catch(function(err){\n      statusEl.textContent = \"Could not load the map data.\";\n      console.error(err);\n    });\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Explore the exhibitions and events Honargardi has covered on an interactive map. Each pin is a venue \u2014 gallery, museum or institution \u2014 with a verified address. Loading the map\u2026 Also show the archive (past events) Opening Today Galleries and museums with a vernissage today Openings This Week New exhibitions opening in the next 7 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-1756","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gallery Map - Honargardi<\/title>\n<meta name=\"description\" content=\"Explore the exhibitions and events Honargardi has covered on an interactive map. Each pin is a venue \u2014 gallery, museum or institution \u2014 with a verified\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/honargardi.com\/en\/map\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gallery Map - Honargardi\" \/>\n<meta property=\"og:description\" content=\"Explore the exhibitions and events Honargardi has covered on an interactive map. Each pin is a venue \u2014 gallery, museum or institution \u2014 with a verified\" \/>\n<meta property=\"og:url\" content=\"https:\/\/honargardi.com\/en\/map\/\" \/>\n<meta property=\"og:site_name\" content=\"Honargardi\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-05T10:31:21+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/honargardi.com\\\/en\\\/map\\\/\",\"url\":\"https:\\\/\\\/honargardi.com\\\/en\\\/map\\\/\",\"name\":\"Gallery Map - Honargardi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/honargardi.com\\\/en\\\/#website\"},\"datePublished\":\"2026-11-05T01:29:20+00:00\",\"dateModified\":\"2026-11-05T10:31:21+00:00\",\"description\":\"Explore the exhibitions and events Honargardi has covered on an interactive map. Each pin is a venue \u2014 gallery, museum or institution \u2014 with a verified\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/honargardi.com\\\/en\\\/map\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/honargardi.com\\\/en\\\/map\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/honargardi.com\\\/en\\\/map\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u062e\u0627\u0646\u0647\",\"item\":\"https:\\\/\\\/honargardi.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gallery Map\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/honargardi.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/honargardi.com\\\/en\\\/\",\"name\":\"Honargardi\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/honargardi.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Gallery Map - Honargardi","description":"Explore the exhibitions and events Honargardi has covered on an interactive map. Each pin is a venue \u2014 gallery, museum or institution \u2014 with a verified","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/honargardi.com\/en\/map\/","og_locale":"en_US","og_type":"article","og_title":"Gallery Map - Honargardi","og_description":"Explore the exhibitions and events Honargardi has covered on an interactive map. Each pin is a venue \u2014 gallery, museum or institution \u2014 with a verified","og_url":"https:\/\/honargardi.com\/en\/map\/","og_site_name":"Honargardi","article_modified_time":"2026-11-05T10:31:21+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/honargardi.com\/en\/map\/","url":"https:\/\/honargardi.com\/en\/map\/","name":"Gallery Map - Honargardi","isPartOf":{"@id":"https:\/\/honargardi.com\/en\/#website"},"datePublished":"2026-11-05T01:29:20+00:00","dateModified":"2026-11-05T10:31:21+00:00","description":"Explore the exhibitions and events Honargardi has covered on an interactive map. Each pin is a venue \u2014 gallery, museum or institution \u2014 with a verified","breadcrumb":{"@id":"https:\/\/honargardi.com\/en\/map\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/honargardi.com\/en\/map\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/honargardi.com\/en\/map\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u062e\u0627\u0646\u0647","item":"https:\/\/honargardi.com\/en\/"},{"@type":"ListItem","position":2,"name":"Gallery Map"}]},{"@type":"WebSite","@id":"https:\/\/honargardi.com\/en\/#website","url":"https:\/\/honargardi.com\/en\/","name":"Honargardi","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/honargardi.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/pages\/1756","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/comments?post=1756"}],"version-history":[{"count":5,"href":"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/pages\/1756\/revisions"}],"predecessor-version":[{"id":1775,"href":"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/pages\/1756\/revisions\/1775"}],"wp:attachment":[{"href":"https:\/\/honargardi.com\/en\/wp-json\/wp\/v2\/media?parent=1756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}