PageSourceSearch

https://cosmos-hotel.com.tw/wp-content/themes/pro-theme-fuji/block…/assets/js/main_content.js?ver=1.0.0

js cosmos-hotel.com.tw collected 2026-09-26 07:33:49 UTC 9,969 bytes, 276 lines download raw bytes

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.