mirror of https://github.com/searx/searx
41 lines
1.5 KiB
JavaScript
41 lines
1.5 KiB
JavaScript
/*
|
|
When showing the sticky version warning, the warning will cover the
|
|
scroll target when navigating to #id hash locations. Take over scrolling
|
|
to adjust the position to account for the height of the warning.
|
|
*/
|
|
$(() => {
|
|
const versionWarning = $('.version-warning')
|
|
|
|
// Skip if there is no version warning, regular browser behavior is
|
|
// fine in that case.
|
|
if (versionWarning.length) {
|
|
const height = versionWarning.outerHeight(true)
|
|
const target = $(':target')
|
|
|
|
// Adjust position when the initial link has a hash.
|
|
if (target.length) {
|
|
// Use absolute scrollTo instead of relative scrollBy to avoid
|
|
// scrolling when the viewport is already at the bottom of the
|
|
// document and has space.
|
|
const y = target.offset().top - height
|
|
// Delayed because the initial browser scroll doesn't seem to
|
|
// happen until after the document ready event, so scrolling
|
|
// immediately will be overridden.
|
|
setTimeout(() => scrollTo(0, y), 100)
|
|
}
|
|
|
|
// Listen to clicks on hash anchors.
|
|
$('a[href^="#"]').on('click', e => {
|
|
// Stop default scroll. Also stops the automatic URL hash update.
|
|
e.preventDefault()
|
|
// Get the id to scroll to and set the URL hash manually.
|
|
const id = $(e.currentTarget).attr('href').substring(1)
|
|
location.hash = id
|
|
// Use getElementById since the hash may have dots in it.
|
|
const target = $(document.getElementById(id))
|
|
// Scroll to top of target with space for the version warning.
|
|
scrollTo(0, target.offset().top - height)
|
|
})
|
|
}
|
|
})
|