diff options
-rw-r--r-- | main.js | 37 |
1 files changed, 28 insertions, 9 deletions
@@ -1993,6 +1993,15 @@ map.addLayer(vectorLayer2); pageNode.appendChild(document.createTextNode(' av ')); pageNode.appendChild(pageCount); + const refreshPopover = function() { + const x = features[featureNum]; + featureOverlaySource.clear(true); + featureOverlaySource.addFeature(x.feature); + + pageNum.innerHTML = (featureNum + 1).toString(); + popover.tip.getElementsByClassName('popover-body')[0]. + replaceChildren(x.formattedContent); + }; const onClickPageChange = function(event, offset) { const btn = event.target; if (btn.classList.contains('disabled') || popover === null || popover.tip === null) { @@ -2014,13 +2023,7 @@ map.addLayer(vectorLayer2); btnNext.classList.add('disabled'); } - const x = features[featureNum]; - featureOverlaySource.clear(true); - featureOverlaySource.addFeature(x.feature); - - pageNum.innerHTML = (featureNum + 1).toString(); - popover.tip.getElementsByClassName('popover-body')[0]. - replaceChildren(x.formattedContent); + refreshPopover(); setTimeout(function() { btn.blur() }, 100); }; @@ -2065,10 +2068,13 @@ map.addLayer(vectorLayer2); features.length = 0; featureNum = 0; - /* dispose any pre-existing popover */ + /* dispose any pre-existing popover if not in detached mode */ popover = Popover.getInstance(popup); if (popover !== null) { - popover.dispose(); + const popoverTip = popover.tip; + if (popoverTip !== null && !popoverTip.classList.contains('popover-detached')) { + popover.dispose(); + } } const size = map.getSize(); @@ -2149,6 +2155,11 @@ map.addLayer(vectorLayer2); pageNode.classList.remove('d-none'); } + if (features.length > 1) { + /* we're already showing the first feature */ + return; + } + if (popover === null || popover.tip === null) { /* create a new popover if we're not already showing one */ pageNum.innerHTML = (featureNum + 1).toString(); @@ -2167,10 +2178,18 @@ map.addLayer(vectorLayer2); popover.show(); featureOverlaySource.addFeature(feature); } + else if (popover.tip.classList.contains('popover-detached')) { + refreshPopover(); + } }, { hitTolerance: 5, checkWrapped: false, layerFilter: (l) => l === vectorLayer || l === vectorLayer2, }); + + if (features.length === 0 && popover !== null && popover.tip !== null) { + /* dispose pre-detached popover */ + popover.dispose(); + } }); }()); |