diff options
Diffstat (limited to 'src/static/js')
-rw-r--r-- | src/static/js/client/additional-names-box.js | 31 | ||||
-rw-r--r-- | src/static/js/client/css-compatibility-assistant.js | 26 | ||||
-rw-r--r-- | src/static/js/client/hoverable-tooltip.js | 23 | ||||
-rw-r--r-- | src/static/js/client/sticky-heading.js | 24 |
4 files changed, 81 insertions, 23 deletions
diff --git a/src/static/js/client/additional-names-box.js b/src/static/js/client/additional-names-box.js index da1467ec..195ba25d 100644 --- a/src/static/js/client/additional-names-box.js +++ b/src/static/js/client/additional-names-box.js @@ -30,8 +30,10 @@ export function getPageReferences() { info.stickyHeadingLink = document.querySelector( - '.content-sticky-heading-container ' + - 'a[href="#additional-names-box"]'); + '.content-sticky-heading-container' + + ' ' + + 'a[href="#additional-names-box"]' + + ':not(:where([inert] *))'); info.contentContainer = document.querySelector('#content'); @@ -100,7 +102,30 @@ function handleAdditionalNamesBoxLinkClicked(domEvent) { ? info.box.getBoundingClientRect() : info.mainContentContainer.getBoundingClientRect()); - if (top + 20 < margin || top > 0.4 * window.innerHeight) { + const {bottom, height} = + (state.visible + ? info.box.getBoundingClientRect() + : {bottom: null}); + + const boxFitsInFrame = + (height + ? height < window.innerHeight - margin - 60 + : null); + + const worthScrolling = + top + 20 < margin || + + (height && boxFitsInFrame + ? top > 0.7 * window.innerHeight + : height && !boxFitsInFrame + ? top > 0.4 * window.innerHeight + : top > 0.5 * window.innerHeight) || + + (bottom && boxFitsInFrame + ? bottom > window.innerHeight - 20 + : false); + + if (worthScrolling) { if (!state.visible) { toggleAdditionalNamesBox(); } diff --git a/src/static/js/client/css-compatibility-assistant.js b/src/static/js/client/css-compatibility-assistant.js index 6e7b15b5..aa637cc4 100644 --- a/src/static/js/client/css-compatibility-assistant.js +++ b/src/static/js/client/css-compatibility-assistant.js @@ -1,22 +1,30 @@ /* eslint-env browser */ +import {stitchArrays} from '../../shared-util/sugar.js'; + export const info = { id: 'cssCompatibilityAssistantInfo', - coverArtContainer: null, - coverArtImageDetails: null, + coverArtworks: null, + coverArtworkImageDetails: null, }; export function getPageReferences() { - info.coverArtContainer = - document.getElementById('cover-art-container'); + info.coverArtworks = + Array.from(document.querySelectorAll('.cover-artwork')); - info.coverArtImageDetails = - info.coverArtContainer?.querySelector('.image-details'); + info.coverArtworkImageDetails = + info.coverArtworks + .map(artwork => artwork.querySelector('.image-details')); } export function mutatePageContent() { - if (info.coverArtImageDetails) { - info.coverArtContainer.classList.add('has-image-details'); - } + stitchArrays({ + coverArtwork: info.coverArtworks, + imageDetails: info.coverArtworkImageDetails, + }).forEach(({coverArtwork, imageDetails}) => { + if (imageDetails) { + coverArtwork.classList.add('has-image-details'); + } + }); } diff --git a/src/static/js/client/hoverable-tooltip.js b/src/static/js/client/hoverable-tooltip.js index 484f2ab0..9569de3e 100644 --- a/src/static/js/client/hoverable-tooltip.js +++ b/src/static/js/client/hoverable-tooltip.js @@ -576,6 +576,17 @@ export function showTooltipFromHoverable(hoverable) { hoverable.classList.add('has-visible-tooltip'); + const isolator = + hoverable.closest('.isolate-tooltip-z-indexing > *'); + + if (isolator) { + for (const child of isolator.parentElement.children) { + cssProp(child, 'z-index', null); + } + + cssProp(isolator, 'z-index', '1'); + } + positionTooltipFromHoverableWithBrains(hoverable); cssProp(tooltip, 'display', 'block'); @@ -667,12 +678,12 @@ export function positionTooltipFromHoverableWithBrains(hoverable) { for (let i = 0; i < numBaselineRects; i++) { for (const [dir1, dir2] of [ + ['down', 'right'], + ['down', 'left'], ['right', 'down'], ['left', 'down'], ['right', 'up'], ['left', 'up'], - ['down', 'right'], - ['down', 'left'], ['up', 'right'], ['up', 'left'], ]) { @@ -995,6 +1006,14 @@ export function getTooltipBaselineOpportunityAreas(tooltip) { return results; } +export function mutatePageContent() { + for (const isolatorRoot of document.querySelectorAll('.isolate-tooltip-z-indexing')) { + if (isolatorRoot.firstElementChild) { + cssProp(isolatorRoot.firstElementChild, 'z-index', '1'); + } + } +} + export function addPageListeners() { const {state} = info; diff --git a/src/static/js/client/sticky-heading.js b/src/static/js/client/sticky-heading.js index 1020cab3..fba05b84 100644 --- a/src/static/js/client/sticky-heading.js +++ b/src/static/js/client/sticky-heading.js @@ -7,7 +7,10 @@ import {cssProp, dispatchInternalEvent, templateContent} export const info = { id: 'stickyHeadingInfo', + stickyRoots: null, + stickyContainers: null, + staticContainers: null, stickyHeadingRows: null, stickyHeadings: null, @@ -23,7 +26,6 @@ export const info = { contentCovers: null, contentCoversReveal: null, - imaginaryStaticHeadings: null, referenceCollapsedHeading: null, state: { @@ -37,8 +39,16 @@ export const info = { }; export function getPageReferences() { + info.stickyRoots = + Array.from(document.querySelectorAll('.content-sticky-heading-root:not([inert])')); + info.stickyContainers = - Array.from(document.getElementsByClassName('content-sticky-heading-container')); + info.stickyRoots + .map(el => el.querySelector('.content-sticky-heading-container')); + + info.staticContainers = + info.stickyRoots + .map(el => el.nextElementSibling); info.stickyCoverContainers = info.stickyContainers @@ -84,10 +94,6 @@ export function getPageReferences() { info.contentContainers .map(el => Array.from(el.querySelectorAll('.content-heading'))); - info.imaginaryStaticHeadings = - info.contentContainers - .map(el => el.querySelector('.imaginary-static-heading-root')); - info.referenceCollapsedHeading = info.stickyHeadings .map(el => el.querySelector('.reference-collapsed-heading')); @@ -182,16 +188,16 @@ function updateStuckStatus(index) { function updateCollapseStatus(index) { const stickyContainer = info.stickyContainers[index]; + const staticContainer = info.staticContainers[index]; const stickyHeading = info.stickyHeadings[index]; - const imaginaryStaticHeading = info.imaginaryStaticHeadings[index]; const referenceCollapsedHeading = info.referenceCollapsedHeading[index]; const {height: uncollapsedHeight} = stickyHeading.getBoundingClientRect(); const {height: collapsedHeight} = referenceCollapsedHeading.getBoundingClientRect(); if ( - imaginaryStaticHeading.getBoundingClientRect().bottom < 4 || - imaginaryStaticHeading.getBoundingClientRect().top < -80 + staticContainer.getBoundingClientRect().bottom < 4 || + staticContainer.getBoundingClientRect().top < -80 ) { if (!stickyContainer.classList.contains('collapse')) { stickyContainer.classList.add('collapse'); |