Advertisement
Dimalolzet

Untitled

May 16th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. bindCatalog = function() {
  2.     'use strict';
  3.     var $catalog, $catalogItem, $catalogOpener, $catalogSection, bind, bindCatalogShowing, bindOnClick, bindOnHover, catalogOpenerActiveClass, mobile, openItemClass, unbind;
  4.     $catalog = $('.catalog');
  5.     $catalogItem = $('.catalog__item');
  6.     $catalogOpener = $('.catalog-opener');
  7.     $catalogSection = $('.catalog-section');
  8.     openItemClass = 'catalog__item_open';
  9.     catalogOpenerActiveClass = 'catalog-opener_active';
  10.     mobile = windowWidth <= 992;
  11.     bindCatalogShowing = function() {
  12.         var SPACE, pullLeftClass;
  13.         pullLeftClass = 'catalog_pull-left';
  14.         SPACE = 50;
  15.         $catalogOpener.mouseenter(function() {
  16.             var $container, $currentCatalog, $subcatalog, catalogFullWidth, itemOffset;
  17.             $currentCatalog = $(this).find($catalog);
  18.             $subcatalog = $currentCatalog.find('.subcatalog').first();
  19.             $container = $(this).closest('.catalog-container');
  20.             if ($currentCatalog.length) {
  21.                 $(this).addClass(catalogOpenerActiveClass);
  22.                 itemOffset = $(this).position().left - $container.position().left;
  23.                 catalogFullWidth = itemOffset + ($currentCatalog.width() + $subcatalog.width());
  24.                 if ($container.width() - catalogFullWidth - SPACE < 0) {
  25.                     return $currentCatalog.addClass(pullLeftClass);
  26.                 }
  27.             }
  28.         });
  29.         return $catalogOpener.mouseleave(function() {
  30.             $(this).removeClass(catalogOpenerActiveClass);
  31.             return $catalog.removeClass(pullLeftClass);
  32.         });
  33.     };
  34.     unbind = function() {
  35.         $catalog.unbind();
  36.         $catalogItem.unbind();
  37.         $catalogOpener.unbind();
  38.         $catalogSection.find('a').unbind();
  39.         return $('.' + openItemClass).removeClass(openItemClass);
  40.     };
  41.     bindOnHover = function() {
  42.         bindCatalogShowing();
  43.         $($catalogSection).find('ul').css('display', '');
  44.         return $catalog.menuAim({
  45.             activate: function(item) {
  46.                 return $(item).addClass(openItemClass);
  47.             },
  48.             deactivate: function(item) {
  49.                 return $(item).removeClass(openItemClass);
  50.             },
  51.             exitMenu: function() {
  52.                 return $('.' + openItemClass).removeClass(openItemClass);
  53.             }
  54.         });
  55.     };
  56.     bindOnClick = function() {
  57.         $('.catalog-button').click(function() {
  58.             return $('.menu').slideToggle();
  59.         });
  60.         return $catalogSection.find('li').click(function(e) {
  61.             var $targetMenu;
  62.             if (!$(e.target).closest('.menu__link').length) {
  63.                 $targetMenu = $(this).find('> ul');
  64.                 if ($targetMenu.hasClass('subcatalog')) {
  65.                     e.stopPropagation();
  66.                 }
  67.                 if ($targetMenu.length) {
  68.                     return $targetMenu.slideToggle();
  69.                 }
  70.             }
  71.         });
  72.     };
  73.     bind = function() {
  74.         unbind();
  75.         if (mobile) {
  76.             return bindOnClick();
  77.         } else {
  78.             return bindOnHover();
  79.         }
  80.     };
  81.     bind();
  82.     return $(window).resize(function() {
  83.         if (mobile !== (windowWidth <= 992)) {
  84.             mobile = windowWidth <= 992;
  85.             return bind();
  86.         }
  87.     });
  88. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement