diff --git a/kjvstudy_org/static/base.js b/kjvstudy_org/static/base.js
index e5c5900..8640503 100644
--- a/kjvstudy_org/static/base.js
+++ b/kjvstudy_org/static/base.js
@@ -1490,8 +1490,8 @@ function showKeyboardHelp() {
}
}
- // Show tooltip
- function showTooltip(verseData, mouseX, mouseY) {
+ // Show tooltip positioned relative to a link element
+ function showTooltip(verseData, linkElement) {
tooltip.innerHTML =
'' + verseData.reference + '' +
'' + verseData.text + '';
@@ -1505,13 +1505,17 @@ function showKeyboardHelp() {
var tooltipWidth = tooltip.offsetWidth;
var tooltipHeight = tooltip.offsetHeight;
- var padding = 10; // Minimum distance from viewport edge
- var x = mouseX + 15;
- var y = mouseY + 15;
+ // Get link position
+ var linkRect = linkElement.getBoundingClientRect();
+ var padding = 10;
+
+ // Position below the link, centered horizontally
+ var x = linkRect.left + (linkRect.width / 2) - (tooltipWidth / 2);
+ var y = linkRect.bottom + 8 + window.scrollY;
// Adjust if tooltip goes off right edge
if (x + tooltipWidth > window.innerWidth - padding) {
- x = mouseX - tooltipWidth - 15;
+ x = window.innerWidth - tooltipWidth - padding;
}
// Ensure tooltip doesn't go off left edge
@@ -1519,14 +1523,14 @@ function showKeyboardHelp() {
x = padding;
}
- // Adjust if tooltip goes off bottom edge
- if (y + tooltipHeight > window.innerHeight - padding) {
- y = mouseY - tooltipHeight - 15;
+ // If tooltip goes off bottom edge, show above the link instead
+ if (linkRect.bottom + 8 + tooltipHeight > window.innerHeight) {
+ y = linkRect.top - tooltipHeight - 8 + window.scrollY;
}
// Ensure tooltip doesn't go off top edge
- if (y < padding) {
- y = padding;
+ if (y < window.scrollY + padding) {
+ y = window.scrollY + padding;
}
tooltip.style.left = x + 'px';
@@ -1585,10 +1589,11 @@ function showKeyboardHelp() {
var verseInfo = parseVerseUrl(target.pathname + target.hash);
if (!verseInfo) return;
- // Show loading state
+ // Show loading state positioned relative to link
tooltip.innerHTML = 'Loading...';
- tooltip.style.left = (e.pageX + 15) + 'px';
- tooltip.style.top = (e.pageY + 15) + 'px';
+ var linkRect = target.getBoundingClientRect();
+ tooltip.style.left = linkRect.left + 'px';
+ tooltip.style.top = (linkRect.bottom + 8 + window.scrollY) + 'px';
tooltip.classList.add('show');
// Fetch and display verse
@@ -1596,26 +1601,13 @@ function showKeyboardHelp() {
.then(function(verseData) {
// Only show if still hovering
if (target.matches(':hover')) {
- showTooltip(verseData, e.pageX, e.pageY);
+ showTooltip(verseData, target);
}
});
- // Track mouse movement for tooltip positioning
- var mouseMoveHandler = function(e) {
- if (tooltip.classList.contains('show')) {
- var x = e.pageX + 15;
- var y = e.pageY + 15;
- tooltip.style.left = x + 'px';
- tooltip.style.top = y + 'px';
- }
- };
-
- target.addEventListener('mousemove', mouseMoveHandler);
-
// Hide tooltip on mouse leave
target.addEventListener('mouseleave', function() {
hideTooltip();
- target.removeEventListener('mousemove', mouseMoveHandler);
}, { once: true });
});