1( function ($) { 2 $(document).ready(function () { 3 asideScroll(); 4 collapsibleContent(); 5 doGallery(); 6 triggerqwEvent(); 7 scrollToRates(); 8 9 }); 10 11 $(window).scroll(function () { 12 asideScroll(); 13 }); 14 15 16 function asideScroll() { 17 var aside = $('.aside_wrapper.fixed_on_scroll'); 18 if (aside.length > 0) { 19 var bottomController = $('footer'); 20 var main = $('main'); 21 var afterContent = main.next('div'); 22 if (afterContent.length > 0 && !afterContent.is(bottomController)) { 23 bottomController = afterContent; 24 } 25 var windowHeight = $(window).height(); 26 var bottomControllerVisiblePart = $(window).scrollTop() - Math.floor(bottomController.offset().top - windowHeight); 27 var bottom = 0; 28 if (bottomControllerVisiblePart >= 0) { 29 bottom = bottomControllerVisiblePart; 30 } 31 32 if ($(window).scrollTop() > (main.offset().top - $('header').height()) && !is_mobile) { 33 aside.css({ 34 'bottom': bottom 35 }); 36 aside.addClass('fixed'); 37 } else { 38 aside.css({ 39 'bottom': '0' 40 }); 41 aside.removeClass('fixed'); 42 } 43 44 } 45 } 46 47 function collapsibleContent() { 48 var button = $('.main .collapsibleContent_btn'), 49 mClass = 'open', 50 mClass2 = 'content_is_visible'; 51 button.click(function () { 52 setTimeout(function () { 53 asideScroll(); 54 }, 200); 55 var btn = $(this); 56 var parent = $('.main .content_wrap'); 57 var wrap = parent.find('.collapsibleContent'); 58 if (!btn.hasClass(mClass)) { 59 var height = wrap.find('.the_content').outerHeight(true); 60 wrap.css({ 61 'height': height 62 }); 63 btn.addClass(mClass); 64 btn.html(read_less); 65 $(parent).addClass(mClass2); 66 wrap.attr('tabindex', 0); 67 wrap.focus(); 68 } else { 69 wrap.css({ 70 'height': 0 71 }); 72 btn.html(read_more); 73 btn.removeClass(mClass); 74 $(parent).removeClass(mClass2); 75 wrap.attr('tabindex', '-1'); 76 } 77 }); 78 } 79 80 function scrollToRates() { 81 var item = $('.main qw-price'); 82 item.click(function () { 83 var goTo = '#break_scroll', 84 top_part = item.outerHeight(), 85 top = $(goTo).offset().top - top_part; 86 87 $('html,body').stop().animate({scrollTop: top}, 500); 88 }); 89 } 90 function fixFancyboxSlick(innerElem) { 91 // Fix for mini gallery fancy box 92 var selector = '.slick-slide:not(.slick-cloned)'; 93 if(innerElem){ 94 selector = selector+' '+innerElem; 95 } 96 // Skip cloned elements 97 $().fancybox({ 98 selector: selector, 99 backFocus: false, 100 loop: true 101 102 }); 103 // Remove fancybox cloned elements 104 $(document).on('ready', function () { 105 if(innerElem){ 106 $('.slick-cloned '+innerElem).removeAttr('data-fancybox'); 107 }else { 108 $('.slick-cloned .thumb').removeAttr('data-fancybox'); 109 } 110 }); 111 112 // Attach custom click event on cloned elements, 113 // trigger click event on corresponding link 114 var clonedElement = '.slick-cloned'; 115 if(innerElem){ 116 clonedElement = '.slick-cloned '+innerElem; 117 } 118 $(document).on('click', clonedElement, function (e) { 119 $(selector) 120 .eq(( $(e.currentTarget).attr("data-slick-index") || 0) % $(selector).length) 121 .trigger("click.fb-start", { 122 $trigger: $(this) 123 }); 124 125 return false; 126 }); 127 } 128 function doGallery() { 129 var wrap = $('.aside_content:not(.single_image) .gallery'); 130 if (wrap.length > 0) { 131 132 //LAZY LOADING (before carousel is loaded) 133 wrap.on("init", function () {
134 lazyLoadInstance.update(); 135 }); 136 137 wrap.slick({ 138 autoplay: false, 139 arrows: true, 140 dots: false, 141 rtl: rtl, 142 infinite: true, 143 nextArrow: wrap.parent().find('.next'), 144 prevArrow: wrap.parent().find('.prev'), 145 slidesToShow: 1, 146 slidesToScroll: 1, 147 variableWidth: false, 148 centerMode: false, 149 }); 150 fixFancyboxSlick('.fix_fancybox'); 151 } 152 } 153 154 155 $(window).on('qw-room-rich-info--loaded', function () { 156 fusionAmeniteiesTab = $('.qw-room-rich-info__amenities-trigger'); 157 fusionAmeniteiesTab.on('click', function () { 158 $(this).toggleClass('active') 159 }); 160 if ($('qw-room-rich-info').hasClass('autoexpand')) { 161 fusionAmeniteiesTab.trigger('click'); 162 } 163 }); 164 165 //this event is trigged on cards component loaded 166 function triggerqwEvent() { 167 var component = $('qw-room-rich-info'); 168 counter = 0; 169 if (component.length > 0) { 170 setInterval(function () { 171 if ((component).hasClass('qw-room-rich-info--loaded') && counter === 0) { 172 $(window).trigger('qw-room-rich-info--loaded'); 173 174 counter++; 175 } 176 }, 500); 177 } 178 } 179 180 //HOURS SPENT TO MAKE THE OFFER CARDS LIKE A CAROUSEL: 36 181 //Please increase the counter above if you will work on it 182 183 window.deBounce = false; 184 //this event is triggered on every cards component mutation 185 $(document).on("DOMSubtreeModified", '#break_scroll .qw-room-rates__wrapper', function () { 186 if (deBounce) { 187 return; 188 } 189 deBounce = true; 190 191 setTimeout(function () { 192 deBounce = false; 193 }, 500); 194 195 setTimeout(function () { 196 var cards = $('.qw-room-rate--card'); 197 var widthCard = cards.outerWidth(true); 198 var theme = $('body').attr('id'); 199 var scrollTheme = theme === 'dark_theme' || theme === 'darken_theme' ? 'light' : 'dark'; 200 201 /*Here we cannot use a "true" carousel like slick. We used mCustomScrollbar api to mock a carousel behaviour. */ 202 $('#break_scroll qw-room-rates').each(function () { 203 var el = $(this); 204 el.mCustomScrollbar({ 205 axis: "x", 206 scrollInertia: 500, 207 theme: scrollTheme, 208 mouseWheel: {enable: false}, 209 advanced: { 210 autoExpandHorizontalScroll: true, 211 updateOnContentResize: true 212 }, 213 callbacks: { 214 onTotalScroll: function () { 215 var next = $(this).parent().find('.arrow.next'); 216 next.addClass('disabled'); 217 218 }, 219 onTotalScrollBack: function () { 220 var prev = $(this).parent().find('.arrow.prev'); 221 prev.addClass('disabled'); 222 223 }, 224 whileScrolling: function () { 225 var arrow = $(this).parent().find('.arrow'); 226 if (arrow.hasClass('disabled')) { 227 arrow.removeClass('disabled'); 228 } 229 }, 230 onUpdate: function () { 231 setTimeout(function () { 232 var arrow = el.parent().find('.arrow'); 233 var cards = el.find('qw-room-rate'); 234 if (cards.length > 1) { 235 arrow.fadeIn('slow'); 236 } else { 237 arrow.fadeOut('slow'); 238 } 239 }, 200 240 ) 241 } 242 243 }, 244 scrollButtons: { 245 enable: true, 246 scrollType: "stepped" 247 }, 248 snapAmount: widthCard 249 }); 250 }); 251 252 253 $('qw-room-rates').parent().each(function () { 254 var me = $(this); 255 if(!me.hasClass('qw-room-list-card__prices')) { 256 var arrows = me.find('.arrow'); 257 var hasScrollBar = !me.find('.mCSB_container').hasClass('mCS_no_scrollbar_x'); 258 if (arrows.length === 0 && hasScrollBar) { 259 me.append(' <a href="javascript:;" class="arrow next hidden-sm hidden-xs "></a> <a href="javascript:;" class="arrow prev hidden-sm hidden-xs disabled"></a>'); 260 } 261 262 me.find('.arrow.next').on('click', function () { 263 me.find('.mCSB_buttonRight').trigger('click'); 264 }); 265 266 me.find('.arrow.prev').on('click', function () { 267 me.find('.mCSB_buttonLeft').trigger('click'); 268 }); 269 } 270 }) 271 272 }, 300) 273 });
274 275}(jQuery) ); 276
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.