Guest User

Untitled

a guest
Jun 23rd, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.77 KB | None | 0 0
  1. /* global $, CRD: {}, serialize */
  2.  
  3. // =require _crd.js
  4. // =require _serialize.js
  5.  
  6. CRD.ready(function () {
  7. /*
  8. * Header Main Menu
  9. */
  10. var mainMenuTitles = $('.js-head-depts > .js-head-dept'),
  11. mainMenuContentHolder = $('.js-head-dd-cont-holder'),
  12. mainMenuContentCurrentHolderId,
  13. mainContent = $('.main-content'),
  14. overlayClass = '-overlay',
  15. mainMenuMore = $('.js-head-more'),
  16. calcMoreLimit = function () {
  17. var offsetTop = mainMenuTitles.eq(1).offset().top,
  18. hiddenLi = 0;
  19.  
  20. mainMenuTitles.not('.-js-more-ignore').each(function () {
  21. if ($(this).offset().top > offsetTop) {
  22. ++hiddenLi;
  23. }
  24. });
  25.  
  26. return hiddenLi;
  27. },
  28. mainMenuReset = function () {
  29. if (mainMenuTitles.hasClass('active')) {
  30. $('.fixed-sidebar').css('display', '');
  31. mainMenuTitles.removeClass('active');
  32. mainMenuContentHolder.stop(true, true).slideUp(300);
  33. mainContent.removeClass(overlayClass);
  34. }
  35. };
  36. mainMenuTitles.on({
  37. click: function (e) {
  38. if ($(this).hasClass('-separator')) {
  39. return false;
  40. }
  41.  
  42. e.stopPropagation();
  43.  
  44. $('.fixed-sidebar').hide();
  45.  
  46. var li = $(this),
  47. id = li.data('id'),
  48. vehicleId = li.data('vehicle-id'),
  49. storeId = li.data('store-id'),
  50. hide_holder = function () {
  51. mainMenuContentHolder.slideUp(300);
  52. mainContent.removeClass(overlayClass);
  53. },
  54. show_menu_content = function () {
  55. mainMenuContentHolder.find('.head_dd_cont_h').hide().filter('[data-id=' + id + ']').show();
  56. mainMenuContentHolder.stop(true, true).slideDown(300);
  57.  
  58. if (mainMenuContentCurrentHolderId === id) { /* Prevent holder hide if there were many requests and one of them comes after last */
  59. li.siblings().removeClass('active');
  60. li.addClass('active');
  61. }
  62.  
  63. mainContent.addClass(overlayClass);
  64. };
  65.  
  66. mainMenuContentCurrentHolderId = id;
  67.  
  68. if (li.hasClass('active')) {
  69. hide_holder();
  70. li.removeClass('active');
  71. $('.fixed-sidebar').css('display', '');
  72. } else {
  73. if (!li.data('requested') || id == 999) {
  74. li.data('requested', true);
  75. li.addClass('loading');
  76.  
  77. var loading_error = function () {
  78. li.data('requested', false).removeClass('loading');
  79. },
  80. ajaxData = {
  81. 'aafunction': 'get_main_menu_content',
  82. 'groupid': id,
  83. 'vehicleId': vehicleId,
  84. 'storeId': storeId
  85. },
  86. limit = id == 999 ? calcMoreLimit() : 0;
  87.  
  88. if (limit) {
  89. ajaxData.limit = limit;
  90. mainMenuContentHolder.find('.head_dd_cont_h').filter('[data-id=' + id + ']').remove();
  91. }
  92.  
  93. $.ajax({
  94. type: 'POST',
  95. url: '/ajax/ajax.php',
  96. data: 'q=' + encodeURIComponent(serialize(ajaxData)),
  97. dataType: 'html',
  98. success: function (data) {
  99. if (data) {
  100. li.removeClass('loading');
  101.  
  102. /* append loaded data */
  103. mainMenuContentHolder.find('.wrap').append(data);
  104. if (mainMenuContentCurrentHolderId !== id) {
  105. /* The string below hides inserted holder if there were many requests and it's ID isn't equal to last. We have to hide it because only last one should be shown */
  106. mainMenuContentHolder.find('.head_dd_cont_h').filter('[data-id=' + id + ']').hide();
  107. } else {
  108. hide_holder();
  109. show_menu_content();
  110. }
  111. } else {
  112. loading_error();
  113. }
  114. },
  115. error: function () {
  116. loading_error();
  117. }
  118. });
  119. } else {
  120. hide_holder();
  121. show_menu_content();
  122. }
  123. }
  124. }
  125. });
  126.  
  127. $('.js-head-dd-cont-holder-close').on('click', function () {
  128. mainMenuReset();
  129. });
  130. $('body').on('click', function () {
  131. mainMenuReset();
  132. });
  133. mainMenuTitles.find('a').on('click', function (e) {
  134. e.preventDefault();
  135. /* Main Links should not be clickable */
  136. });
  137. mainMenuContentHolder.on('click', function (e) {
  138. e.stopPropagation();
  139. /* holder shouldn't close if 'click' event fired in its area */
  140. });
  141.  
  142. /*
  143. Header top departments row. Show/Hide departments dropdown on click
  144. */
  145. var headStoreItem = $('.js-head-stores .-active'),
  146. headStoresDropDown = $('.head-stores-dd');
  147.  
  148. headStoreItem.on('click', function () {
  149. if (CRD.device.media['mobile-small'] || CRD.device.media['mobile-medium']) {
  150. headStoresDropDown.toggleClass('-enabled');
  151. }
  152. });
  153.  
  154. if (mainMenuMore.length) {
  155. var showHideResizeTimer = 0,
  156. showHideMore = function () {
  157. var offsetTop = mainMenuTitles.not('.-js-more-ignore').first().offset().top,
  158. offsetTopLast = mainMenuTitles.not('.-js-more-ignore').last().offset().top;
  159.  
  160. if (offsetTopLast > offsetTop) {
  161. mainMenuMore.show();
  162. } else {
  163. mainMenuMore.hide();
  164. }
  165. };
  166.  
  167. showHideMore();
  168.  
  169. $(window).resize(function () {
  170. clearTimeout(showHideResizeTimer);
  171.  
  172. showHideResizeTimer = setTimeout(function () {
  173. showHideMore();
  174. }, 100);
  175. });
  176. }
  177.  
  178. CRD.device.mediaChange(function () {
  179. headStoresDropDown.removeClass('-enabled');
  180. });
  181. });
Add Comment
Please, Sign In to add comment