y_camp-1.2.2/assets/js/header.js

assets/js/header.js
(function ($, Drupal) {

  'use strict';

  /**
   * Handle open mobile menu.
   */
  Drupal.behaviors.mobile_camp_menu_toggle = {
    attach: function (context) {
      const header = $('.ws-header', context);
      const body = $('body', context);
      const btn = $(this, context);
      const submenu = $('.header-nav__submenu', context);
      const headerNavToggle = $('.header-navbar-toggler', context);
      headerNavToggle.unbind('click');
      headerNavToggle.click(function () {
        if (header.hasClass('open')) {
          header.removeClass('open');
          btn.attr('aria-expanded', false);
          body.css('overflow', 'auto');
          submenu.removeClass('open');
          $('.header--bottom').css('position', 'relative');
          header.css('overflow-y', 'revert');
        } else {
          header.addClass('open');
          btn.attr('aria-expanded', true);
          body.css('overflow', 'hidden');
          $('.header--bottom').css('position', 'absolute');
          header.css('overflow-y', 'auto');
        }
      });

      switchMainMenuType();

      $(window).resize(function () {
        if (header.hasClass('desktop')) {
          header.removeClass('open');
          btn.attr('aria-expanded', false);
          body.css('overflow', 'auto');
        }
        switchMainMenuType();
      });
      // A fix for a small mobile screen.
      header.scroll(() => {
        if (header.scrollTop() > 0) {
          header.addClass('scrolled');
        } else {
          header.removeClass('scrolled');
        }
      });

      // Hide main menu items until page is ready.
      header.find('nav').css('visibility', 'visible');
      header.find('.block-ws-search-bar').css('visibility', 'visible');
      header.find('.block-ws-site-logo').css('visibility', 'visible');

      function switchMainMenuType() {
        const header = $('.ws-header');
        // This size is can be fixed.
        const logo =  200;
        var camp_menu = document.querySelector('.block-inline-blockcamp-menu-lb');
        var max_available_width = $(window).width() - logo;

        if (max_available_width < camp_menu.offsetWidth) {
          if (header.hasClass('desktop')) {
            header.removeClass('desktop');
          }
          header.addClass('mobile');
        }
        else {
          if (header.hasClass('mobile')) {
            header.removeClass('mobile');
          }
          header.addClass('desktop');
        }
      }
    }
  };

  /**
   * Handle dropdown for the 2nd level of the menu.
   */
  Drupal.behaviors.camp_header_dropdown_menu = {
    attach: function (context) {
      const header = $('.ws-header', context);

      $('.dropdown-submenu a.menu-link-item').click(function (e) {
        if ($(this).parent().hasClass('children')) {
          e.stopPropagation();
          e.preventDefault();
        }
        const subMenuTarget = $(this).attr('data-submenu-target');
        const subMenu = $('#' + subMenuTarget);

        const secondLevelDropdownLink = $('.header-nav__submenu.level-3');
        secondLevelDropdownLink.each(function () {
          $(this).removeClass('open');
          if ($(this).attr('data-submenu-target') !== subMenuTarget) {
            $(this).removeClass('active');
          }
        });
        $(this).parent().addClass('active');
        if (header.hasClass('mobile')) {
          $(this).parent().parent().toggleClass('open');
          $(this).parent().parent().parent().toggleClass('open');
        }
        subMenu.addClass('open');
      });

      const firstLevelItem = $('.header-nav__links .dropdown', context);
      const firstLevelItemLink = $(firstLevelItem, context).children('a');
      $(firstLevelItemLink, context).click(function (e) {
        if (header.hasClass('mobile')) {
          if ($(this).parent().hasClass('children')) {
            e.preventDefault();
          }

          const subMenu = $(this).siblings('.header-nav__submenu');
          if (subMenu.hasClass('open')) {
            subMenu.removeClass('open');
          } else {
            subMenu.addClass('open');
          }
          if (header.hasClass('scrolled')) {
            $('.header--bottom').css('position', 'fixed');
          }
          header.css('overflow-y', 'hidden');
        }
      });

      $('.back', context).click(function () {
        const back_1_level = $(this, context).parent().parent().parent().parent().parent();
        if (back_1_level.hasClass('open')) {
          back_1_level.removeClass('open');
          $('.header--bottom').css('position', 'absolute');
          if (header.hasClass('open')) {
            header.css('overflow-y', 'auto');
          }
        }
        if (back_1_level.hasClass('show')) {
          back_1_level.removeClass('show');
        }
      });

      $(window).resize(function () {
        if (header.hasClass('desktop')) {
          const headerSubMenu = $('.header-nav__submenu');
          headerSubMenu.removeClass('open');
          headerSubMenu.removeClass('show');
          $('.dropdown').removeClass('show');
        }
      });
      // Set top position for submenus in mobile screen.
      const mobileHeaderHeight = $('.header--bottom').outerHeight();
      $('.header-nav__submenu').css('top', mobileHeaderHeight + 'px');
    }
  };
})(jQuery, Drupal);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc