HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux srv1.dlabib.net 6.8.0-94-generic #96-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 9 20:36:55 UTC 2026 x86_64
User: hbkconsultan_usr (1002)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /var/www/hbkconsultan_usr/data/www/hbkconsultancy.com/wp-content/themes/edubin/assets/global.js
/* global edubinScreenReaderText */
(function($) {
"use strict";

    // Variables and DOM Caching.
    var $body = $('body'),
        $customHeader = $body.find('.custom-header'),
        $branding = $customHeader.find('.site-branding'),
        $navigation = $body.find('.navigation-top'),
        $navWrap = $navigation.find('.wrap'),
        $navMenuItem = $navigation.find('.menu-item'),
        $menuToggle = $navigation.find('.menu-toggle'),
        $menuScrollDown = $body.find('.menu-scroll-down'),
        $sidebar = $body.find('#secondary'),
        $entryContent = $body.find('.entry-content'),
        $formatQuote = $body.find('.format-quote blockquote'),
        isFrontPage = $body.hasClass('edubin-front-page') || $body.hasClass('home blog'),
        navigationFixedClass = 'site-navigation-fixed',
        navigationHeight,
        navigationOuterHeight,
        navPadding,
        navMenuItemHeight,
        idealNavHeight,
        navIsNotTooTall,
        headerOffset,
        menuTop = 0,
        resizeTimer;
    // Ensure the sticky navigation doesn't cover current focused links.
    $('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], [contenteditable]', '.tpc-site-content-contain').filter(':visible').focus(function() {
        if ($navigation.hasClass('site-navigation-fixed')) {
            var windowScrollTop = $(window).scrollTop(),
                fixedNavHeight = $navigation.height(),
                itemScrollTop = $(this).offset().top,
                offsetDiff = itemScrollTop - windowScrollTop;
            // Account for Admin bar.
            if ($('#wpadminbar').length) {
                offsetDiff -= $('#wpadminbar').height();
            }
            if (offsetDiff < fixedNavHeight) {
                $(window).scrollTo(itemScrollTop - (fixedNavHeight + 50), 0);
            }
        }
    });
    // Set properties of navigation.
    function setNavProps() {
        navigationHeight = $navigation.height();
        navigationOuterHeight = $navigation.outerHeight();
        navPadding = parseFloat($navWrap.css('padding-top')) * 2;
        navMenuItemHeight = $navMenuItem.outerHeight() * 2;
        idealNavHeight = navPadding + navMenuItemHeight;
        navIsNotTooTall = navigationHeight <= idealNavHeight;
    }
    // Make navigation 'stick'.
    function adjustScrollClass() {
        // Make sure we're not on a mobile screen.
        if ('none' === $menuToggle.css('display')) {
            // Make sure the nav isn't taller than two rows.
            if (navIsNotTooTall) {
                // When there's a custom header image or video, the header offset includes the height of the navigation.
                if (isFrontPage && ($body.hasClass('has-header-image') || $body.hasClass('has-header-video'))) {
                    headerOffset = $customHeader.innerHeight() - navigationOuterHeight;
                } else {
                    headerOffset = $customHeader.innerHeight();
                }
                // If the scroll is more than the custom header, set the fixed class.
                if ($(window).scrollTop() >= headerOffset) {
                    $navigation.addClass(navigationFixedClass);
                } else {
                    $navigation.removeClass(navigationFixedClass);
                }
            } else {
                // Remove 'fixed' class if nav is taller than two rows.
                $navigation.removeClass(navigationFixedClass);
            }
        }
    }
    // Set margins of branding in header.
    function adjustHeaderHeight() {
        if ('none' === $menuToggle.css('display')) {
            // The margin should be applied to different elements on front-page or home vs interior pages.
            if (isFrontPage) {
                $branding.css('margin-bottom', navigationOuterHeight);
            } else {
                $customHeader.css('margin-bottom', navigationOuterHeight);
            }
        } else {
            $customHeader.css('margin-bottom', '0');
            $branding.css('margin-bottom', '0');
        }
    }
    // Set icon for quotes.
    function setQuotesIcon() {
        $(edubinScreenReaderText.quote).prependTo($formatQuote);
    }
    // Add 'below-entry-meta' class to elements.
    function belowEntryMetaClass(param) {
        var sidebarPos /*, sidebarPosBottom*/ ;
        if (!$body.hasClass('has-sidebar') || ($body.hasClass('search') || $body.hasClass('single-attachment') || $body.hasClass('error404') || $body.hasClass('edubin-front-page'))) {
            return;
        }
        sidebarPos = $sidebar.offset();
        $entryContent.find(param).each(function() {
            var $element = $(this),
                elementPos = $element.offset(),
                elementPosTop = elementPos.top;
        });
    }
    /*
     * Test if inline SVGs are supported.
     * @link https://github.com/Modernizr/Modernizr/
     */
    function supportsInlineSVG() {
        var div = document.createElement('div');
        div.innerHTML = '<svg/>';
        return '//www.w3.org/2000/svg' === ('undefined' !== typeof SVGRect && div.firstChild && div.firstChild.namespaceURI);
    }
    /**
     * Test if an iOS device.
     */
    function checkiOS() {
        return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
    }
    /*
     * Test if background-attachment: fixed is supported.
     * @link https://stackoverflow.com/questions/14115080/detect-support-for-background-attachment-fixed
     */
    function supportsFixedBackground() {
        var el = document.createElement('div'),
            isSupported;
        try {
            if (!('backgroundAttachment' in el.style) || checkiOS()) {
                return false;
            }
            el.style.backgroundAttachment = 'fixed';
            isSupported = ('fixed' === el.style.backgroundAttachment);
            return isSupported;
        } catch (e) {
            return false;
        }
    }
    // Fire on document ready.
    $(document).ready(function() {
        // If navigation menu is present on page, setNavProps and adjustScrollClass.
        if ($navigation.length) {
            setNavProps();
            adjustScrollClass();
        }
        // If 'Scroll Down' arrow in present on page, calculate scroll offset and bind an event handler to the click event.
        if ($menuScrollDown.length) {
            if ($('body').hasClass('admin-bar')) {
                menuTop -= 32;
            }
            if ($('body').hasClass('blog')) {
                menuTop -= 30; // The div for latest posts has no space above content, add some to account for this.
            }
            if (!$navigation.length) {
                navigationOuterHeight = 0;
            }
            $menuScrollDown.on(function(e) {
                e.preventDefault();
                $(window).scrollTo('#primary', {
                    duration: 600,
                    offset: {
                        top: menuTop - navigationOuterHeight
                    }
                });
            });
        }
        adjustHeaderHeight();
        setQuotesIcon();
        if (true === supportsInlineSVG()) {
            document.documentElement.className = document.documentElement.className.replace(/(\s*)no-svg(\s*)/, '$1svg$2');
        }
        if (true === supportsFixedBackground()) {
            document.documentElement.className += ' background-fixed';
        }
        $(".navigation-section .mobile-menu-wrapper").append('<div class="mobile-menu"></div>');
        $(".main-menu").clone().appendTo(".navigation-section .mobile-menu");
        //Add toggle dropdown icon
        $(".mobile-menu .main-menu").find('.menu-item-has-children').append('<span class="zmm-dropdown-toggle fas fa-plus"></span>');
        $(".mobile-menu .main-menu").find('.sub-menu').slideToggle();
        $(".mobile-menu-icon").on("click", function() {
            $(".mobile-menu").slideToggle();
        });
        //dropdown toggle
        $(".zmm-dropdown-toggle").on("click", function() {
            var parent = $(this).parent('li').children('.sub-menu');
            $(this).parent('li').children('.sub-menu').slideToggle();
            $(this).toggleClass('fa-minus');
            if ($(parent).find('.sub-menu').length) {
                $(parent).find('.sub-menu').slideUp();
                $(parent).find('.zmm-dropdown-toggle').removeClass('fa-minus');
            }
        });
    });
    var $scroll_obj = $('#back-to-top');
    $(window).scroll(function() {
        if ($(this).scrollTop() > 100) {
            $scroll_obj.fadeIn();
        } else {
            $scroll_obj.fadeOut();
        }
    });
    $scroll_obj.on(function() {
        $('html, body').animate({
            scrollTop: 0
        }, 600);
        return false;
    });
    // If navigation menu is present on page, adjust it on scroll and screen resize.
    if ($navigation.length) {
        // On scroll, we want to stick/unstick the navigation.
        $(window).on('scroll', function() {
            adjustScrollClass();
            adjustHeaderHeight();
        });
        // Also want to make sure the navigation is where it should be on resize.
        $(window).resize(function() {
            setNavProps();
            setTimeout(adjustScrollClass, 500);
        });
    }
    $(window).resize(function() {
        clearTimeout(resizeTimer);
        resizeTimer = setTimeout(function() {
            belowEntryMetaClass('blockquote.alignleft, blockquote.alignright');
        }, 300);
        setTimeout(adjustHeaderHeight, 1000);
    });
    // Add header video class after the video is loaded.
    $(document).on('wp-custom-header-video-loaded', function() {
        $body.addClass('has-header-video');
    });
})(jQuery);