diff --git a/_includes/base.njk b/_includes/base.njk index 48777f0..81e30ae 100644 --- a/_includes/base.njk +++ b/_includes/base.njk @@ -14,10 +14,10 @@ Adrian Victor{% if pageTitle or postTitle %} - {{pageTitle or postTitle}}{% endif %} - - - - + + + + diff --git a/static/main.css b/static/main.css index 7ea86c0..09f0cb9 100644 --- a/static/main.css +++ b/static/main.css @@ -618,6 +618,16 @@ div.hs.selected { opacity: 0.6; } +#fixedHint { + position: fixed; + top: 0; + left: 0; + background-color: black; + z-index: 10; + padding: .2em; + outline: thin solid var(--theme-color); +} + #sound { filter: invert(); } diff --git a/static/scripts/tips.js b/static/scripts/tips.js index fa46554..eb108de 100644 --- a/static/scripts/tips.js +++ b/static/scripts/tips.js @@ -1,15 +1,49 @@ -/* This script provides functionality similar to FL Studio's hint panel. */ - +const body = document.querySelector('body'); const elements = document.querySelectorAll('[data-tip]'); const hint = document.querySelector("#headerSubtitle"); const hintPanelDefaultText = hint.innerHTML; +let fixedHint; +let currentObserver; elements.forEach(el => { - el.addEventListener('mouseenter', function() { - hint.innerHTML = `${this.dataset.tip}`; + el.addEventListener('mouseenter', function() { + cleanup(); + + if (currentObserver) { + currentObserver.disconnect(); + } + + currentObserver = new IntersectionObserver((entries) => { + entries.forEach(entry => { + if (!entry.isIntersecting) { + fixedHint = document.createElement('p'); + fixedHint.id = "fixedHint"; + fixedHint.innerHTML = el.dataset.tip; + fixedHint.setAttribute('aria-hidden', 'true'); + body.appendChild(fixedHint); + } else { + hint.innerHTML = el.dataset.tip; + } + }) }); - el.addEventListener('mouseleave', function() { - hint.innerHTML = hintPanelDefaultText; - }); + hint.innerHTML = el.dataset.tip; + currentObserver.observe(hint); + }); + + el.addEventListener('mouseleave', function() { + cleanup(); + }); }) + +function cleanup() { + hint.innerHTML = hintPanelDefaultText; + hint.classList.remove('fixed'); + if (fixedHint) { + fixedHint.remove(); + } + if (currentObserver) { + currentObserver.disconnect(); + currentObserver = null; + } +}