1'use strict'; 2 3(function($, window) { 4 var gettext = window.gettext || function(s) {return s;}; 5 var $doc = $(document); 6 var win = $(window); 7 var SITE = (window.Modernizr, SITE || {}); 8 9 SITE = { 10 init: function() { 11 var obj; 12 var self = this; 13 14 for (obj in self) if (self.hasOwnProperty(obj)) { 15 var _method = self[obj]; 16 void 0 !== _method.selector && void 0 !== _method.init && $(_method.selector).length > 0 && _method.init(); 17 } 18 19 // Initiate Bootstrap tabs 20 var _tabs = $('#tabs').tab(); 21 22 // Initiate Product slider 23 $('.image-carousel').slick({ 24 mobileFirst: true, 25 slidesToShow: 1, 26 slidesToScroll: 1, 27 fade: false, // Must be false for zoom 28 swipe: false, // Must be false for zoom 29 accessibility: true, 30 arrows: true, 31 imageCrossfade: true, 32 prevArrow: '<i class="fa fa-angle-left slick-prev"></i>', 33 nextArrow: '<i class="fa fa-angle-right slick-next"></i>' 34 }); 35 36 var zoomOptions = { 37 zoomType : "inner", 38 scrollZoom : false, 39 responsive : true, 40 cursor: "crosshair", 41 easing : true, 42 zoomWindowFadeIn: 500, 43 zoomWindowFadeOut: 500, 44 containLensZoom: true 45 }; 46 47 // Initiate zoom based on active slide 48 $('.image-carousel') 49 .on('beforeChange', function(event, slick, currentSlide, nextSlide){ 50 $('.zoomContainer').remove(); 51 zoomImage.removeData('elevateZoom'); 52 zoomImage.removeData('zoomImage'); 53 54 }) 55 .on('afterChange', function(event, slick, currentSlide, nextSlide){ 56 zoomImage = $('.slick-current .zoom'); 57 zoomImage.elevateZoom(zoomOptions); 58 }); 59 60 // Initiate Product Slider zoom 61 var zoomImage = $('.slick-current .zoom'); 62 zoomImage.elevateZoom(zoomOptions); 63 64 // NOTE: Hack for making the zoom work along side the mmenu mm-page object. 65 var mm_page = $('.mm-page'); 66 67 setInterval(function() { 68 var zoomContainer = $('body > .zoomContainer'); 69 70 if(zoomContainer) { 71 mm_page.append(zoomContainer.detach()); 72 } 73 }, 500); 74 }, 75 headRoom: { 76 selector: ".mainheader", 77 init: function() { 78 var base = this, container = $(base.selector); 79 win.scroll(function() { 80 base.scroll(container); 81 }); 82 }, 83 scroll: function(container) { 84 var animationOffset = container.data("offset"); 85 var wOffset = win.scrollTop(); 86 var stick = container.data("stick-class"); 87 var unstick = container.data("unstick-class"); 88 89 wOffset > animationOffset ? (container.removeClass(unstick), container.hasClass(stick) || setTimeout(function() { 90 container.addClass(stick); 91 }, 10)) : animationOffset > wOffset && wOffset > 0 ? container.hasClass(stick) && (container.removeClass(stick), 92 container.addClass(unstick)) : (container.removeClass(stick), container.removeClass(unstick)); 93 } 94 }, 95 fullHeightContent: { 96 selector: ".full-height-content", 97 init: function() { 98 var base = this; 99 var container = $(base.selector); 100 101 base.resize(container); 102 win.resize(function() { 103 base.resize(container); 104 }); 105 }, 106 resize: function(container) { 107 container.height(win.outerHeight()); 108 } 109 } 110 }; 111 112 win.resize(function() { 113 // Resize Zoom boks based on responsive size
114 setTimeout(function(){ // wait for fading 115 var zoom = $(".zoom"); 116 var zoomContainer = $(".zoomContainer"); 117 var zoomWindow = zoomContainer.find('.zoomWindow'); 118 119 var height = zoom.css("height"); 120 var width = zoom.css("width"); 121 122 zoomContainer.css("height", height); 123 zoomContainer.css("width", width); 124 zoomWindow.css("height", height); 125 zoomWindow.css("width", width); 126 }, 100); 127 }); 128 129 $(function() { 130 SITE.init(); 131 132 var header = $('#header'); 133 var nav = $('.container-sidebar .onepage-menu'); 134 var footer = $('#footer'); 135 var filter = $('#content-filter'); 136 var mainheader = header.find('.mainheader'); 137 138 // Header - .subheader 139 mainheader.toggleClass('has-no-hero', header.find('.subheader .subheader-inner').length == 0); 140 141 $('#header .subheader #subheader-inner .background-block-skip-button').click(function() { 142 var header_offset = header.offset(); 143 144 if(header_offset) { 145 $('html,body').stop().animate({ 146 scrollTop: header_offset.top + header.height() - mainheader.height() 147 }, 500); 148 } 149 }); 150 151 // Stick the #nav to the top of the window 152 var nav_offset = nav.offset(); 153 var footer_offset = footer.offset(); 154 var filter_offset = filter.offset(); 155 156 var nav_offset_Y = nav_offset ? nav_offset.top : 0; 157 var footer_offset_Y = footer_offset ? footer_offset.top : 0; 158 var filter_offset_Y = filter_offset ? filter_offset.top : 0; 159 160 var nav_height = nav.outerHeight(); 161 var header_height = header.outerHeight(); 162 var mainheader_height = mainheader.outerHeight(); 163 164 win.on('resize load', function() { 165 footer_offset = footer.offset(); 166 nav_offset = nav.offset(); 167 168 footer_offset_Y = footer_offset ? footer_offset.top : 0; 169 nav_offset_Y = nav_offset ? nav_offset.top : 0; 170 171 header_height = header.outerHeight(); 172 mainheader_height = mainheader.outerHeight(); 173 }); 174 175 win.scroll(function() { 176 var scroll_top_limit = win.scrollTop(); 177 178 var nav_limit_top_reached = scroll_top_limit + header_height > nav_offset_Y; 179 var nav_limit_bottom_reached = scroll_top_limit + header_height + nav_height > footer_offset_Y; 180 181 var filter_limit_top_reached = scroll_top_limit + mainheader_height > filter_offset_Y; 182 183 nav.toggleClass('menu-fixed', nav_limit_top_reached && !nav_limit_bottom_reached); 184 filter.toggleClass('filter-fixed', filter_limit_top_reached); 185 }); 186 187 $('#nav-top-scroll').click(function() { 188 $('html,body').stop().animate({ 189 scrollTop: 0 190 }) 191 }); 192 }); 193 194 // Smooth onepage navigation 195 function scrollNav() { 196 $('.onepage-menu a').click(function(){ 197 //Animate 198 $('html,body').stop().animate({ 199 scrollTop: $( $(this).attr('href') ).offset().top - 70 200 }, 500); 201 return false; 202 }); 203 $('.scrollTop a').scrollTop(); 204 } 205 scrollNav(); 206 207 // Offset scroll to match fixed navigation 208 $(document.body).scrollspy({target: ".container-sidebar .onepage-menu > nav", offset:90}); 209 210 // Trigger Bootstrap tooltip 211 $('[data-toggle="tooltip"]').tooltip(); 212 213 // Title switching for bootstrap dropdown 214 // $(".dropdown-menu li a").click(function(){ 215 // $(this).parents(".bte").find('.btn').html($(this).text() + ' <i class="fa fa-angle-down"></i>'); 216 // $(this).parents(".bte").find('.btn').val($(this).data('value')); 217 // }); 218 219 $('.page-wrapper').on('boutique.favorite.change', '[ng-controller="FavoriteCtrl"]', function(e) { 220 var title = e.favorite.is_favorite ? $(this).attr('data-is-favorite') : $(this).attr('data-favorite'); 221 var tooltip = $(this).find("[data-toggle='tooltip']").attr('data-original-title', title); 222 223 tooltip.tooltip('show'); 224 }); 225 226 /* Modal triggers */ 227 $('.loginmodal').click(function() { 228 $('.modal').toggleClass('mlogin'); 229 //return false;
230 }); 231 $('.searchmodal').click(function() { 232 $('.modal').toggleClass('msearch'); 233 }); 234 235 /* Bootstrap modal*/ 236 // var modal_cart = $('#modal-cart-updated'); 237 var modal_cart = null; 238 var modal_alert = $('#modal-alert'); 239 240 var modal_reservation_message = $('#reservation-message'); 241 modal_reservation_message.modal('show'); 242 243 function alert(message) { 244 var msg = modal_alert.find('#modal-alert-message'); 245 246 msg.empty(); 247 msg.html(message); 248 249 modal_alert.modal('show'); 250 } 251 252 /* Reset after modal close */ 253 $('body').on('hidden.bs.modal', '.modal', function () { 254 $(document.documentElement).removeClass('modal-open'); 255 256 $(this).removeData('bs.modal'); 257 $('.modal').removeClass('msearch'); 258 $('.modal').removeClass('mlogin'); 259 $('.modal').removeClass('maddtocart'); 260 $('.modal').removeClass('mcart'); 261 }); 262 263 $('.modal').on('shown.bs.modal', function() { 264 $(document.documentElement).addClass('modal-open'); 265 266 if(window._mmenu) { 267 window._mmenu.close(); 268 } 269 270 $(this).find('[data-toggle="tabajax"]').click(function(e) { 271 var $this = $(this), 272 loadurl = $this.attr('data-href'), 273 targ = $this.attr('data-target'); 274 275 if(!loadurl) { 276 loadurl = $this.attr('href'); 277 } 278 279 $.get(loadurl, function(data) { 280 $(targ).html(data); 281 }); 282 283 $this.tab('show'); 284 return false; 285 }); 286 }); 287 288 $('.search-trigger').click(function() { 289 $('#myModalSearch').modal({ 290 backdrop: false 291 }); 292 293 return false; 294 }); 295 296 /* Set focus in first input after modal load */ 297 $('#myModalSearch').on('shown.bs.modal', function () { 298 $('#boutique-search-form input[name=q]').focus(); 299 }); 300 301 var _I; 302 303})(jQuery, window);
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.