1jQuery(function($) { 2 3 // Fixed nav 4 $.fn.checkElementPositioning = function($el, $offsetHeightEl, scrollClass) { 5 if (!this.length) { 6 return; 7 } 8 9 if(((this.offset().top - $(window).scrollTop()) <= $offsetHeightEl.outerHeight()) && !$el.hasClass(scrollClass)) { 10 $el.addClass(scrollClass); 11 } else if(((this.offset().top - $(window).scrollTop()) >= $offsetHeightEl.outerHeight()) && $el.hasClass(scrollClass)) { 12 $el.removeClass(scrollClass); 13 } 14 } 15 16 // Fade banner 17 $.fn.fadeBanner = function($el, scrollClass, offset) { 18 if (!this.length) { 19 return; 20 } 21 22 if((this.offset().top < ($(window).scrollTop() + offset)) && !$el.hasClass(scrollClass)) { 23 $el.addClass(scrollClass); 24 } else if((this.offset().top >= ($(window).scrollTop() + offset)) && $el.hasClass(scrollClass)) { 25 $el.removeClass(scrollClass); 26 } 27 } 28 29 // Mobile sidebars 30 $.fn.expandableSidebar = function(expandedClass) { 31 var $me = this; 32 33 $me.on('click', function() { 34 if(!$me.hasClass(expandedClass)) { 35 $me.addClass(expandedClass); 36 } else { 37 $me.removeClass(expandedClass); 38 } 39 }); 40 } 41 42 // Interval loop 43 $.fn.intervalLoop = function(condition, action, duration, limit) { 44 var counter = 0; 45 var looper = setInterval(function(){ 46 if (counter >= limit || $.fn.checkIfElementExists(condition)) { 47 clearInterval(looper); 48 } else { 49 action(); 50 counter++; 51 } 52 }, duration); 53 } 54 55 // Check if element exists 56 $.fn.checkIfElementExists = function(selector) { 57 return $(selector).length; 58 } 59 60 var duskController = { 61 62 init: function(opts) { 63 var base = this; 64 65 // Check content positioning 66 if ($('.desktop-nav .wsite-menu-default').text().length > 1) { 67 $('.main-wrap').checkElementPositioning($('body.page-has-banner'), $('.dusk-header'), 'affix'); 68 } 69 70 // Add classes to elements 71 base._addClasses(); 72 73 setTimeout(function(){ 74 base._checkCartItems(); 75 base._attachEvents(); 76 }, 1000); 77 }, 78 79 _addClasses: function() { 80 var base = this; 81
82 // Add class to nav items with subnav 83 $('.wsite-menu-default').find('li.wsite-menu-item-wrap').each(function(){ 84 var $me = $(this); 85 86 if($me.children('.wsite-menu-wrap').length > 0) { 87 88 $me.addClass('has-submenu'); 89 $('<span class="icon-caret"></span>').insertAfter($me.children('a.wsite-menu-item')); 90 } 91 }); 92 93 // Add class to subnav items with subnav 94 $('.wsite-menu').find('li.wsite-menu-subitem-wrap').each(function(){ 95 var $me = $(this); 96 97 if($me.children('.wsite-menu-wrap').length > 0) { 98 99 $me.addClass('has-submenu'); 100 $('<span class="icon-caret"></span>').insertAfter($me.children('a.wsite-menu-subitem')); 101 } 102 }); 103 104 // Keep subnav open if submenu item is active 105 $('li.wsite-menu-subitem-wrap.wsite-nav-current').parents('.wsite-menu-wrap').addClass('open'); 106 107 // Add placeholder text to inputs 108 $('.wsite-form-sublabel').each(function(){ 109 var sublabel = $(this).text(); 110 $(this).prev('.wsite-form-input').attr('placeholder', sublabel); 111 }); 112 113 // Add fullwidth class to gallery thumbs if less than 6 114 $('.imageGallery').each(function(){ 115 if ($(this).children('div').length <= 6) { 116 $(this).children('div').addClass('fullwidth-mobile'); 117 } 118 }); 119 }, 120 121 _checkCartItems: function() { 122 var base = this; 123 124 if($('#wsite-mini-cart').find('li.wsite-product-item').length > 0) { 125 $('body').addClass('cart-full'); 126 } else { 127 $('body').removeClass('cart-full'); 128 } 129 }, 130 131 _moveLogin: function() { 132 var loginDetach = $('#member-login').detach(); 133 $('.mobile-nav .wsite-menu-default > li:last-child').after(loginDetach); 134 }, 135 136 _attachEvents: function() { 137 var base = this; 138 139 // Nav toggle 140 $('label.hamburger').on('click', function() { 141 if(!$('body').hasClass('nav-open')) { 142 $('body').addClass('nav-open'); 143 } else { 144 $('body').removeClass('nav-open'); 145 } 146 }); 147 148 149 // Move cart + login 150 if ($(window).width() <= 992) { 151 $.fn.intervalLoop('.mobile-nav #member-login', base._moveLogin, 800, 5); 152 } 153 154 // Window scroll 155 if($('body').hasClass('page-has-banner')) { 156 var offset; 157 var headerHeight = $('.dusk-header').outerHeight(); 158 159 $(window).on('scroll', function(){ 160 161 // Set offset 162 if($(window).width() <= 767) { 163 offset = headerHeight; 164 } else { 165 offset = 0; 166 } 167 168 // Affix nav 169 if ($('.desktop-nav .wsite-menu-default').text().length > 1) { 170 $('.main-wrap').checkElementPositioning($('body.page-has-banner'), $('.dusk-header'), 'affix'); 171 } 172 173 // Fade out banner header 174 $('body:not(.header-animation-off) .banner h2').fadeBanner($('body.page-has-banner'), 'fade-on-scroll', offset); 175 }); 176 } 177 178 // Subnav toggle 179 $('li.has-submenu span.icon-caret').on('click', function() { 180 var $me = $(this); 181 182 if($me.siblings('.wsite-menu-wrap').hasClass('open')) { 183 $me.siblings('.wsite-menu-wrap').removeClass('open'); 184 } else { 185 $me.siblings('.wsite-menu-wrap').addClass('open'); 186 } 187 }); 188 189 // Store category dropdown 190 $('.wsite-com-sidebar').expandableSidebar('sidebar-expanded'); 191 192 // Search filters dropdown 193 $('#wsite-search-sidebar').expandableSidebar('sidebar-expanded'); 194 195 // Init fancybox swipe on mobile 196 if ('ontouchstart' in window) { 197 $('body').on('click', 'a.w-fancybox', function() { 198 base._initSwipeGallery(); 199 }); 200 } 201 }, 202 203 _initSwipeGallery: function() { 204 var base = this; 205 206 setTimeout(function(){ 207 var touchGallery = document.getElementsByClassName('fancybox-wrap')[0]; 208 var mc = new Hammer(touchGallery); 209 mc.on("panleft panright", function(ev) { 210 if (ev.type == "panleft") { 211 $("a.fancybox-next").trigger("click"); 212 } else if (ev.type == "panright") { 213 $("a.fancybox-prev").trigger("click"); 214 } 215 base._initSwipeGallery(); 216 }); 217 }, 500); 218 } 219 } 220 221 $(document).ready(function(){ 222 duskController.init(); 223 }); 224});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.