2025-07-27 19:55:19 +02:00
/ * *
2026-03-31 11:30:59 +02:00
* File style . js
2025-07-27 19:55:19 +02:00
*
* Handles toggling the navigation menu for small screens and enables tab
* support for dropdown menus .
*
* @ package Astra
* /
/ * *
* Get all of an element ' s parent elements up the DOM tree
*
* @ param { Node } elem The element .
* @ param { String } selector Selector to match against [ optional ] .
* @ return { Array } The parent elements .
* /
var astraGetParents = function ( elem , selector ) {
// Setup parents array.
var parents = [ ] ;
// Get matching parent elements.
for ( ; elem && elem !== document ; elem = elem . parentNode ) {
// Add matching parents to array.
if ( selector ) {
if ( elem . matches ( selector ) ) {
parents . push ( elem ) ;
}
} else {
parents . push ( elem ) ;
}
}
return parents ;
} ;
/ * *
* Toggle Class funtion
*
* @ param { Node } elem The element .
* @ param { String } selector Selector to match against [ optional ] .
* @ return { Array } The parent elements .
* /
var astraToggleClass = function ( el , className ) {
if ( el . classList . contains ( className ) ) {
el . classList . remove ( className ) ;
} else {
el . classList . add ( className ) ;
}
} ;
/ * *
* Trigget custom JS Event .
*
* @ since 1.4 . 6
*
* @ link https : //developer.mozilla.org/en-US/docs/Web/API/CustomEvent
* @ param { Node } el Dom Node element on which the event is to be triggered .
* @ param { Node } typeArg A DOMString representing the name of the event .
* @ param { String } A CustomEventInit dictionary , having the following fields :
* "detail" , optional and defaulting to null , of type any , that is an event - dependent value associated with the event .
* /
var astraTriggerEvent = function astraTriggerEvent ( el , typeArg ) {
var customEventInit =
arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : { } ;
var event = new CustomEvent ( typeArg , customEventInit ) ;
el . dispatchEvent ( event ) ;
} ;
/ * *
* Scroll to ID / Top with smooth scroll behavior .
*
* @ since x . x . x
*
* @ param { Event } e Event which is been fired .
* @ param { String } top offset from top .
* /
astraSmoothScroll = function astraSmoothScroll ( e , top ) {
e . preventDefault ( ) ;
window . scrollTo ( {
top : top ,
left : 0 ,
behavior : 'smooth'
} ) ;
} ;
/ * *
* Scroll to Top trigger visibility adjustments .
*
* @ since x . x . x
*
* @ param { Node } masthead Page header .
* @ param { Node } astScrollTop Scroll to Top selector .
* /
astScrollToTopHandler = function ( masthead , astScrollTop ) {
var content = getComputedStyle ( astScrollTop ) . content ,
device = astScrollTop . dataset . onDevices ;
content = content . replace ( /[^0-9]/g , '' ) ;
if ( 'both' == device || ( 'desktop' == device && '769' == content ) || ( 'mobile' == device && '' == content ) ) {
// Get current window / document scroll.
var scrollTop = window . pageYOffset || document . body . scrollTop ;
// If masthead found.
if ( masthead && masthead . length ) {
if ( scrollTop > masthead . offsetHeight + 100 ) {
astScrollTop . style . display = "block" ;
} else {
astScrollTop . style . display = "none" ;
}
} else {
// If there is no masthead set default start scroll
if ( window . pageYOffset > 300 ) {
astScrollTop . style . display = "block" ;
} else {
astScrollTop . style . display = "none" ;
}
}
} else {
astScrollTop . style . display = "none" ;
}
} ;
( function ( ) {
var menu _toggle _all = document . querySelectorAll ( '.main-header-menu-toggle' ) ;
var menu _click _listeners _nav = { } ;
/* Add break point Class and related trigger */
var updateHeaderBreakPoint = function ( ) {
// Content overrflowing out of screen can give incorrect window.innerWidth.
// Adding overflow hidden and then calculating the window.innerWidth fixes the problem.
var originalOverflow = document . querySelector ( 'body' ) . style . overflow ;
document . querySelector ( 'body' ) . style . overflow = 'hidden' ;
var ww = window . innerWidth ;
document . querySelector ( 'body' ) . style . overflow = originalOverflow ;
var break _point = astra . break _point ,
headerWrap = document . querySelectorAll ( '.main-header-bar-wrap' ) ;
if ( headerWrap . length > 0 ) {
for ( var i = 0 ; i < headerWrap . length ; i ++ ) {
if ( headerWrap [ i ] . tagName == 'DIV' && headerWrap [ i ] . classList . contains ( 'main-header-bar-wrap' ) ) {
if ( ww > break _point ) {
//remove menu toggled class.
if ( null != menu _toggle _all [ i ] ) {
menu _toggle _all [ i ] . classList . remove ( 'toggled' ) ;
}
document . body . classList . remove ( "ast-header-break-point" ) ;
document . body . classList . add ( "ast-desktop" ) ;
astraTriggerEvent ( document . body , "astra-header-responsive-enabled" ) ;
} else {
document . body . classList . add ( "ast-header-break-point" ) ;
document . body . classList . remove ( "ast-desktop" ) ;
astraTriggerEvent ( document . body , "astra-header-responsive-disabled" )
}
}
}
}
}
updateHeaderBreakPoint ( ) ;
AstraToggleSubMenu = function ( ) {
var parent _li = this . parentNode ;
if ( parent _li . classList . contains ( 'ast-submenu-expanded' ) && document . querySelector ( "header.site-header" ) . classList . contains ( "ast-menu-toggle-link" ) ) {
if ( ! this . classList . contains ( 'ast-menu-toggle' ) ) {
var link = parent _li . querySelector ( 'a' ) . getAttribute ( 'href' ) ;
if ( '' !== link || '#' !== link ) {
window . location = link ;
}
}
}
var parent _li _child = parent _li . querySelectorAll ( '.menu-item-has-children' ) ;
for ( var j = 0 ; j < parent _li _child . length ; j ++ ) {
parent _li _child [ j ] . classList . remove ( 'ast-submenu-expanded' ) ;
var parent _li _child _sub _menu = parent _li _child [ j ] . querySelector ( '.sub-menu, .children' ) ;
if ( null !== parent _li _child _sub _menu ) {
parent _li _child _sub _menu . style . display = 'none' ;
}
}
var parent _li _sibling = parent _li . parentNode . querySelectorAll ( '.menu-item-has-children' ) ;
for ( var j = 0 ; j < parent _li _sibling . length ; j ++ ) {
if ( parent _li _sibling [ j ] != parent _li ) {
parent _li _sibling [ j ] . classList . remove ( 'ast-submenu-expanded' ) ;
var all _sub _menu = parent _li _sibling [ j ] . querySelectorAll ( '.sub-menu' ) ;
for ( var k = 0 ; k < all _sub _menu . length ; k ++ ) {
all _sub _menu [ k ] . style . display = 'none' ;
}
}
}
if ( parent _li . classList . contains ( 'menu-item-has-children' ) ) {
astraToggleClass ( parent _li , 'ast-submenu-expanded' ) ;
if ( parent _li . classList . contains ( 'ast-submenu-expanded' ) ) {
parent _li . querySelector ( '.sub-menu' ) . style . display = 'block' ;
} else {
parent _li . querySelector ( '.sub-menu' ) . style . display = 'none' ;
}
}
} ;
AstraNavigationMenu = function ( parentList ) {
console . warn ( 'AstraNavigationMenu() function has been deprecated since version 1.6.5 or above of Astra Theme and will be removed in the future.' ) ;
} ;
AstraToggleMenu = function ( astra _menu _toggle ) {
console . warn ( 'AstraToggleMenu() function has been deprecated since version 1.6.5 or above of Astra Theme and will be removed in the future. Use AstraToggleSubMenu() instead.' ) ;
// Add Eventlisteners for Submenu.
if ( astra _menu _toggle . length > 0 ) {
for ( var i = 0 ; i < astra _menu _toggle . length ; i ++ ) {
astra _menu _toggle [ i ] . removeEventListener ( 'click' , AstraToggleSubMenu ) ;
astra _menu _toggle [ i ] . addEventListener ( 'click' , AstraToggleSubMenu , false ) ;
}
}
} ;
AstraToggleSetup = function ( ) {
var _ _main _header _all = document . querySelectorAll ( '.main-header-bar-navigation' ) ;
if ( menu _toggle _all . length > 0 ) {
for ( var i = 0 ; i < menu _toggle _all . length ; i ++ ) {
menu _toggle _all [ i ] . setAttribute ( 'data-index' , i ) ;
if ( ! menu _click _listeners _nav [ i ] ) {
menu _click _listeners _nav [ i ] = menu _toggle _all [ i ] ;
menu _toggle _all [ i ] . removeEventListener ( 'click' , astraNavMenuToggle ) ;
menu _toggle _all [ i ] . addEventListener ( 'click' , astraNavMenuToggle , false ) ;
}
if ( 'undefined' !== typeof _ _main _header _all [ i ] ) {
if ( document . querySelector ( "header.site-header" ) . classList . contains ( "ast-menu-toggle-link" ) ) {
var astra _menu _toggle = _ _main _header _all [ i ] . querySelectorAll ( '.ast-header-break-point .main-header-menu .menu-item-has-children > .menu-link, .ast-header-break-point ul.main-header-menu .ast-menu-toggle' ) ;
} else {
var astra _menu _toggle = _ _main _header _all [ i ] . querySelectorAll ( 'ul.main-header-menu .ast-menu-toggle' ) ;
}
// Add Eventlisteners for Submenu.
if ( astra _menu _toggle . length > 0 ) {
for ( var j = 0 ; j < astra _menu _toggle . length ; j ++ ) {
astra _menu _toggle [ j ] . removeEventListener ( 'click' , AstraToggleSubMenu ) ;
astra _menu _toggle [ j ] . addEventListener ( 'click' , AstraToggleSubMenu , false ) ;
}
}
}
}
}
} ;
astraNavMenuToggle = function ( event ) {
event . preventDefault ( ) ;
var _ _main _header _all = document . querySelectorAll ( '.main-header-bar-navigation' ) ;
var event _index = this . getAttribute ( 'data-index' ) ;
if ( 'undefined' === typeof _ _main _header _all [ event _index ] ) {
return false ;
}
var menuHasChildren = _ _main _header _all [ event _index ] . querySelectorAll ( '.menu-item-has-children' ) ;
for ( var i = 0 ; i < menuHasChildren . length ; i ++ ) {
menuHasChildren [ i ] . classList . remove ( 'ast-submenu-expanded' ) ;
var menuHasChildrenSubMenu = menuHasChildren [ i ] . querySelectorAll ( '.sub-menu' ) ;
for ( var j = 0 ; j < menuHasChildrenSubMenu . length ; j ++ ) {
menuHasChildrenSubMenu [ j ] . style . display = 'none' ;
}
}
var menu _class = this . getAttribute ( 'class' ) || '' ;
if ( menu _class . indexOf ( 'main-header-menu-toggle' ) !== - 1 ) {
astraToggleClass ( _ _main _header _all [ event _index ] , 'toggle-on' ) ;
astraToggleClass ( menu _toggle _all [ event _index ] , 'toggled' ) ;
if ( _ _main _header _all [ event _index ] . classList . contains ( 'toggle-on' ) ) {
_ _main _header _all [ event _index ] . style . display = 'block' ;
document . body . classList . add ( "ast-main-header-nav-open" ) ;
} else {
_ _main _header _all [ event _index ] . style . display = '' ;
document . body . classList . remove ( "ast-main-header-nav-open" ) ;
}
}
} ;
document . body . addEventListener ( "astra-header-responsive-enabled" , function ( ) {
var _ _main _header _all = document . querySelectorAll ( '.main-header-bar-navigation' ) ;
if ( _ _main _header _all . length > 0 ) {
for ( var i = 0 ; i < _ _main _header _all . length ; i ++ ) {
if ( null != _ _main _header _all [ i ] ) {
_ _main _header _all [ i ] . classList . remove ( 'toggle-on' ) ;
_ _main _header _all [ i ] . style . display = '' ;
}
var sub _menu = _ _main _header _all [ i ] . getElementsByClassName ( 'sub-menu' ) ;
for ( var j = 0 ; j < sub _menu . length ; j ++ ) {
sub _menu [ j ] . style . display = '' ;
}
var child _menu = _ _main _header _all [ i ] . getElementsByClassName ( 'children' ) ;
for ( var k = 0 ; k < child _menu . length ; k ++ ) {
child _menu [ k ] . style . display = '' ;
}
var searchIcons = _ _main _header _all [ i ] . getElementsByClassName ( 'ast-search-menu-icon' ) ;
for ( var l = 0 ; l < searchIcons . length ; l ++ ) {
searchIcons [ l ] . classList . remove ( 'ast-dropdown-active' ) ;
searchIcons [ l ] . style . display = '' ;
}
}
}
} , false ) ;
window . addEventListener ( 'resize' , function ( ) {
// Skip resize event when keyboard display event triggers on devices.
if ( 'INPUT' !== document . activeElement . tagName ) {
updateHeaderBreakPoint ( ) ;
AstraToggleSetup ( ) ;
}
} ) ;
document . addEventListener ( 'DOMContentLoaded' , function ( ) {
AstraToggleSetup ( ) ;
/ * *
* Navigation Keyboard Navigation .
* /
var container , count ;
container = document . querySelectorAll ( '.navigation-accessibility' ) ;
for ( count = 0 ; count <= container . length - 1 ; count ++ ) {
if ( container [ count ] ) {
navigation _accessibility ( container [ count ] ) ;
}
}
} ) ;
/* Search Script */
var SearchIcons = document . getElementsByClassName ( 'astra-search-icon' ) ;
for ( var i = 0 ; i < SearchIcons . length ; i ++ ) {
SearchIcons [ i ] . onclick = function ( event ) {
if ( this . classList . contains ( 'slide-search' ) ) {
event . preventDefault ( ) ;
var sibling = this . parentNode . parentNode . parentNode . querySelector ( '.ast-search-menu-icon' ) ;
if ( ! sibling . classList . contains ( 'ast-dropdown-active' ) ) {
sibling . classList . add ( 'ast-dropdown-active' ) ;
sibling . querySelector ( '.search-field' ) . setAttribute ( 'autocomplete' , 'off' ) ;
setTimeout ( function ( ) {
sibling . querySelector ( '.search-field' ) . focus ( ) ;
} , 200 ) ;
} else {
var searchTerm = sibling . querySelector ( '.search-field' ) . value || '' ;
if ( '' !== searchTerm ) {
sibling . querySelector ( '.search-form' ) . submit ( ) ;
}
sibling . classList . remove ( 'ast-dropdown-active' ) ;
}
}
}
}
var SearchInputs = document . querySelectorAll ( '.search-field' ) ;
SearchInputs . forEach ( input => {
input . addEventListener ( 'focus' , function ( e ) {
var sibling = this . parentNode . parentNode . parentNode . querySelector ( '.ast-search-menu-icon' ) ;
astraToggleClass ( sibling , 'ast-dropdown-active' ) ;
} ) ;
input . addEventListener ( 'blur' , function ( e ) {
var sibling = this . parentNode . parentNode . parentNode . querySelector ( '.ast-search-menu-icon' ) ;
sibling . classList . remove ( 'ast-dropdown-active' ) ;
astraToggleClass ( sibling , 'ast-dropdown-active' ) ;
} ) ;
} ) ;
/* Hide Dropdown on body click*/
document . body . onclick = function ( event ) {
if ( typeof event . target . classList !== 'undefined' ) {
2026-03-31 11:30:59 +02:00
if ( ! event . target . classList . contains ( 'ast-search-menu-icon' ) && ! event . target . closest ( '.ast-search-menu-icon' ) && ! event . target . closest ( '.ast-search-icon' ) ) {
2025-07-27 19:55:19 +02:00
var dropdownSearchWrap = document . getElementsByClassName ( 'ast-search-menu-icon' ) ;
for ( var i = 0 ; i < dropdownSearchWrap . length ; i ++ ) {
dropdownSearchWrap [ i ] . classList . remove ( 'ast-dropdown-active' ) ;
}
}
}
}
/ * *
* Navigation Keyboard Navigation .
* /
function navigation _accessibility ( container ) {
if ( ! container ) {
return ;
}
var button = container . getElementsByTagName ( 'button' ) [ 0 ] ;
if ( 'undefined' === typeof button ) {
button = container . getElementsByTagName ( 'a' ) [ 0 ] ;
if ( 'undefined' === typeof button ) {
return ;
}
}
var menu = container . getElementsByTagName ( 'ul' ) [ 0 ] ;
// Hide menu toggle button if menu is empty and return early.
if ( 'undefined' === typeof menu ) {
button . style . display = 'none' ;
return ;
}
menu . setAttribute ( 'aria-expanded' , 'false' ) ;
if ( - 1 === menu . className . indexOf ( 'nav-menu' ) ) {
menu . className += ' nav-menu' ;
}
button . onclick = function ( ) {
if ( - 1 !== container . className . indexOf ( 'toggled' ) ) {
container . className = container . className . replace ( ' toggled' , '' ) ;
button . setAttribute ( 'aria-expanded' , 'false' ) ;
menu . setAttribute ( 'aria-expanded' , 'false' ) ;
} else {
container . className += ' toggled' ;
button . setAttribute ( 'aria-expanded' , 'true' ) ;
menu . setAttribute ( 'aria-expanded' , 'true' ) ;
}
} ;
// Get all the link elements within the menu.
var links = menu . getElementsByTagName ( 'a' ) ;
var subMenus = menu . getElementsByTagName ( 'ul' ) ;
// Set menu items with submenus to aria-haspopup="true".
for ( var i = 0 , len = subMenus . length ; i < len ; i ++ ) {
subMenus [ i ] . parentNode . setAttribute ( 'aria-haspopup' , 'true' ) ;
}
// Each time a menu link is focused or blurred, toggle focus.
for ( i = 0 , len = links . length ; i < len ; i ++ ) {
links [ i ] . addEventListener ( 'focus' , toggleFocus , true ) ;
links [ i ] . addEventListener ( 'blur' , toggleBlurFocus , true ) ;
links [ i ] . addEventListener ( 'click' , toggleClose , true ) ;
}
}
/ * *
* Close the Toggle Menu on Click on hash ( # ) link .
*
* @ since 1.3 . 2
* @ return void
* /
function toggleClose ( )
{
var self = this || '' ,
hash = '#' ;
if ( self && ! self . classList . contains ( 'astra-search-icon' ) ) {
var link = String ( self ) ;
if ( link . indexOf ( hash ) !== - 1 ) {
var link _parent = self . parentNode ;
if ( document . body . classList . contains ( 'ast-header-break-point' ) && ! ( document . querySelector ( "header.site-header" ) . classList . contains ( "ast-menu-toggle-link" ) && link _parent . classList . contains ( "menu-item-has-children" ) ) ) {
/* Close Main Header Menu */
var main _header _menu _toggle = document . querySelector ( '.main-header-menu-toggle' ) ;
main _header _menu _toggle . classList . remove ( 'toggled' ) ;
var main _header _bar _navigation = document . querySelector ( '.main-header-bar-navigation' ) ;
main _header _bar _navigation . classList . remove ( 'toggle-on' ) ;
main _header _bar _navigation . style . display = 'none' ;
/* Close Below Header Menu */
var before _header _menu _toggle = document . querySelector ( '.menu-below-header-toggle' ) ;
var before _header _bar _navigation = document . querySelector ( '.ast-below-header' ) ;
var before _header _bar = document . querySelector ( '.ast-below-header-actual-nav' ) ;
if ( before _header _menu _toggle && before _header _bar _navigation && before _header _bar ) {
before _header _menu _toggle . classList . remove ( 'toggled' ) ;
before _header _bar _navigation . classList . remove ( 'toggle-on' ) ;
before _header _bar . style . display = 'none' ;
}
/* Close After Header Menu */
var after _header _menu _toggle = document . querySelector ( '.menu-above-header-toggle' ) ;
var after _header _bar _navigation = document . querySelector ( '.ast-above-header' ) ;
var after _header _bar = document . querySelector ( '.ast-above-header-navigation' ) ;
if ( after _header _menu _toggle && after _header _bar _navigation && after _header _bar ) {
after _header _menu _toggle . classList . remove ( 'toggled' ) ;
after _header _bar _navigation . classList . remove ( 'toggle-on' ) ;
after _header _bar . style . display = 'none' ;
}
astraTriggerEvent ( document . querySelector ( 'body' ) , 'astraMenuHashLinkClicked' ) ;
} else {
while ( - 1 === self . className . indexOf ( 'nav-menu' ) ) {
// On li elements toggle the class .focus.
if ( 'li' === self . tagName . toLowerCase ( ) ) {
if ( - 1 !== self . className . indexOf ( 'focus' ) ) {
self . className = self . className . replace ( ' focus' , '' ) ;
}
}
self = self . parentElement ;
}
}
}
}
}
/ * *
* Sets or removes . focus class on an element and its ancestors until a specific class is found .
* @ param { Element } element - The element to apply the . focus class and traverse its ancestors .
* @ param { string } targetClass - The class name to search for in the ancestors .
* /
function toggleFocusAndAncestors ( element , targetClass ) {
while ( - 1 === element . className . indexOf ( targetClass ) ) {
if ( 'li' === element . tagName . toLowerCase ( ) ) {
if ( element . classList . contains ( 'focus' ) ) {
element . classList . remove ( 'focus' ) ;
} else {
element . classList . add ( 'focus' ) ;
}
}
element = element . parentElement ;
}
}
/ * *
* Sets or removes . focus class on an element on focus .
* /
function toggleFocus ( ) {
var self = this ;
toggleFocusAndAncestors ( self , 'nav-menu' ) ;
}
/ * *
* Sets or removes . focus class on an element on blur .
* /
function toggleBlurFocus ( ) {
var self = this || '' ,
hash = '#' ;
var link = String ( self ) ;
if ( link . includes ( hash ) && document . body . classList . contains ( 'ast-mouse-clicked' ) ) {
return ;
}
toggleFocusAndAncestors ( self , 'nav-menu' ) ;
}
/* Add class if mouse clicked and remove if tab pressed */
if ( 'querySelector' in document && 'addEventListener' in window ) {
var body = document . body ;
body . addEventListener ( 'mousedown' , function ( ) {
body . classList . add ( 'ast-mouse-clicked' ) ;
} ) ;
body . addEventListener ( 'keydown' , function ( ) {
body . classList . remove ( 'ast-mouse-clicked' ) ;
} ) ;
}
/ * *
* Scroll to specific hash link .
*
* @ since x . x . x
* /
if ( astra . is _scroll _to _id ) {
// Calculate the offset top of an element, accounting for nested elements.
const getOffsetTop = ( element ) => {
let offsetTop = 0 ;
while ( element ) {
offsetTop += element . offsetTop ;
element = element . offsetParent ;
}
return offsetTop ;
}
const scrollToIDHandler = ( e , hash = null ) => {
let offset = 0 ;
const siteHeader = document . querySelector ( '.site-header' ) ;
if ( siteHeader ) {
// Check and add offset to scroll top if header is sticky.
const stickyHeaders = siteHeader . querySelectorAll (
'div[data-stick-support]'
) ;
if ( stickyHeaders . length > 0 ) {
stickyHeaders . forEach ( ( header ) => ( offset += header . clientHeight ) ) ;
} else if ( typeof astraAddon !== 'undefined' && ! ( Number ( astraAddon . sticky _hide _on _scroll ) && ! document ? . querySelector ( '.ast-header-sticked' ) ) ) {
const fixedHeader = document . querySelector ( '#ast-fixed-header' ) ;
if ( fixedHeader ) {
offset = fixedHeader ? . clientHeight ;
if ( Number ( astraAddon ? . header _main _shrink ) ) {
const headers = fixedHeader ? . querySelectorAll (
'.ast-above-header-wrap, .ast-below-header-wrap'
) ;
headers ? . forEach ( ( ) => ( offset -= 10 ) ) ;
}
}
}
const href = hash ? hash : e . target ? . closest ( 'a' ) . hash ;
if ( href ) {
const scrollId = document . querySelector ( href ) ;
if ( scrollId ) {
const elementOffsetTop = getOffsetTop ( scrollId ) ;
if ( typeof astraAddon !== 'undefined' && Number ( astraAddon . sticky _hide _on _scroll ) && window ? . scrollY < elementOffsetTop ) {
offset = 0 ;
}
const scrollOffsetTop = elementOffsetTop - offset ;
if ( scrollOffsetTop ) {
astraSmoothScroll ( e , scrollOffsetTop ) ;
}
}
}
}
}
let hashLinks = [ ] ;
const links = document . querySelectorAll (
'a[href*="#"]:not([href="#"]):not([href="#0"]):not([href*="uagb-tab"]):not(.uagb-toc-link__trigger):not(.skip-link):not(.nav-links a):not([href*="tab-"])'
) ;
if ( links ) {
for ( const link of links ) {
if ( link . href . split ( "#" ) [ 0 ] !== location . href . split ( "#" ) [ 0 ] ) {
// Store the hash
hashLinks . push ( {
hash : link . hash ,
url : link . href . split ( "#" ) [ 0 ] ,
} ) ;
} else if ( link . hash !== "" ) {
link . addEventListener ( "click" , scrollToIDHandler ) ;
}
}
}
window . addEventListener ( 'DOMContentLoaded' , ( event ) => {
for ( let link of hashLinks ) {
if ( window . location . href . split ( '#' ) [ 0 ] === link . url ) {
const siteHeader = document . querySelector ( '.site-header' ) ;
let offset = 0 ;
// Check and add offset to scroll top if header is sticky.
const headerHeight = siteHeader . querySelectorAll ( 'div[data-stick-support]' ) ;
if ( headerHeight ) {
headerHeight . forEach ( single => {
offset += single . clientHeight ;
} ) ;
}
const scrollId = document . querySelector ( link . hash ) ;
if ( scrollId ) {
const scrollOffsetTop = getOffsetTop ( scrollId ) - offset ;
if ( scrollOffsetTop ) {
astraSmoothScroll ( event , scrollOffsetTop ) ;
}
}
}
}
// If there is a hash in the URL when the page loads, scroll to that element after a short delay.
if ( location . hash ) {
setTimeout ( ( ) => scrollToIDHandler ( new Event ( 'click' ) , location . hash ) , 750 ) ;
}
} ) ;
}
/ * *
* Scroll to top .
*
* @ since x . x . x
* /
if ( astra . is _scroll _to _top ) {
var masthead = document . querySelector ( '#page header' ) ;
var astScrollTop = document . getElementById ( 'ast-scroll-top' ) ;
astScrollToTopHandler ( masthead , astScrollTop ) ;
window . addEventListener ( 'scroll' , function ( ) {
astScrollToTopHandler ( masthead , astScrollTop ) ;
} ) ;
astScrollTop . onclick = function ( e ) {
astraSmoothScroll ( e , 0 ) ;
} ;
}
} ) ( ) ;