diff --git a/code/websites/pokedex.online/src/views/GamemasterExplorer.vue b/code/websites/pokedex.online/src/views/GamemasterExplorer.vue index dc18f2b..b8cf825 100644 --- a/code/websites/pokedex.online/src/views/GamemasterExplorer.vue +++ b/code/websites/pokedex.online/src/views/GamemasterExplorer.vue @@ -615,8 +615,30 @@ function goToPrevResult() { function scrollToResult() { const lineIndex = searchResults.value[currentResultIndex.value]; - const lineElement = document.querySelector(`[data-line="${lineIndex + 1}"]`); - lineElement?.scrollIntoView({ behavior: 'smooth', block: 'center' }); + if (lineIndex === undefined) return; + + const lineNumber = lineIndex + 1; // Convert to 1-based line number + const lineElement = document.querySelector(`[data-line="${lineNumber}"]`); + + if (lineElement) { + // Scroll to element + lineElement.scrollIntoView({ behavior: 'smooth', block: 'center' }); + + // For virtual scroller, ensure it's rendered by waiting a tick + if (!lineElement.textContent) { + setTimeout(() => { + const retryElement = document.querySelector(`[data-line="${lineNumber}"]`); + retryElement?.scrollIntoView({ behavior: 'smooth', block: 'center' }); + }, 100); + } + } else { + // Fallback: scroll container to approximate position + const container = document.querySelector('.scroller, .lines-container'); + if (container) { + const estimatedScroll = (lineIndex / displayLines.value.length) * (container.scrollHeight - container.clientHeight); + container.scrollTop = estimatedScroll; + } + } } function applyHistoryItem(item) {