PageSourceSearch

https://seoulcenter.vn/wp-content/themes/seoulcenter-v2/assets/js/global.js?ver=1775790999

js seoulcenter.vn collected 2026-09-24 10:08:59 UTC 19,638 bytes, 548 lines download raw bytes

1(function ($) {
2    class MegaMenu {
3        constructor() {
4            this.IdMainNavMobile = $("#main-nav-mobile");
5            this.ClassClose = $(".menu_close");
6            this.iconClose = $(".menu_title");
7            this.IdIcon = $("#hamburger-icon");
8            this.ClassOverlay = $(".menu_overlay");
9        }
10
11        init() {
12            $(this.IdIcon).click(() => {
13                this.openMenu();
14            });
15            this.closeMenu(this.ClassClose);
16            this.closeMenu(this.iconClose);
17            this.closeMenu(this.ClassOverlay);
18        }
19
20        openMenu() {
21            $(this.IdMainNavMobile).animate({
22                left: "0%"
23            }, 300);
24            $("html").addClass("menu-open");
25            $(this.ClassOverlay).addClass("hidden_menu");
26            this.addIconMenu();
27            this.clickTitleMenu();
28            this.clickIconMenu();
29        }
30
31        closeMenu(selector) {
32            $(selector).click(() => {
33                $(this.IdMainNavMobile).animate({
34                    left: "-100%"
35                }, 500);
36                console.log(this);
37                $(this.ClassOverlay).removeClass("hidden_menu");
38                $(".menu-item-has-children .open-submenu").remove();
39            });
40        }
41
42        addIconMenu() {
43            $("ul.navigation-mobile ul.sub-menu, ul.navigation-mobile").each(function () {
44                $(this).parent(".menu-item-has-children").prepend('<span class="open-submenu"></span>')
45            });
46        }
47
48        clickTitleMenu() {
49            $("ul.navigation-mobile .menu-item-has-children > a").on("click", function (l) {
50                l.stopPropagation();
51                l.preventDefault();
52                $(this).closest("li").toggleClass("active-menu-item");
53                $(this).closest("li.active-menu-item > a").attr({
54                    href: 'javascript:void(0)'
55                });
56            });
57        }
58
59        clickIconMenu() {
60            $("ul.navigation-mobile .open-submenu").on("click", function (l) {
61                l.stopPropagation();
62                l.preventDefault();
63                $(this).closest("li").toggleClass("active-menu-item");
64            });
65        }
66    }
67    class PageUtils {
68        constructor() {
69            this.mobile = null;
70        }
71
72        init() {
73            this.checkMobile();
74            this.bindEvents();
75        }
76
77        checkMobile() {
78            if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)) {
79                this.mobile = true;
80                $("body").addClass("isMobile");
81            } else {
82                this.mobile = false;
83                $("body").addClass("no-mobile");
84            }
85        }
86
87        bindEvents() {
88            $('header [ht-trigger="hd-search"]').click(() => {
89                $('header').find('.hd-search, .hd-search .show-search, .hd-search .fa-transformation').toggleClass("is-active");
90            });
91
92            setTimeout(() => {
93                $('#backToTop').click(() => {
94                    $('html, body').animate({ scrollTop: 0 }, 500);
95                });
96            }, 500);
97        }
98    }
99
100    const megaMenu = new MegaMenu();
101    const pageUtils = new PageUtils();
102
103    pageUtils.init();
104    megaMenu.init();
105
106
107    $(document).ready(function () {
108        $('body').on('click', '[ht-trigger="c-modal-2"]', function () {
109            $('body').append('<div class="c-modal-2-backdrop show"></div>');
110            $('body').addClass('c-modal-2-open');
111            $target = $($(this).attr('ht-target'));
112            $target.css('display', 'block');
113            $close = $(this).attr('ht-target-close');
114            if ($close !== undefined) {
115                $($close).removeClass('show');
116                $($close).removeAttr('style');
117                $('body').find('.c-modal-2-backdrop:last').remove();
118            }
119            setTimeout(function () {
120                $target.addClass('show');
121                flktyResize('.carousel-custom-time');
122            }, 200);
123        });
124        $('body').on('click', '[ht-close="c-modal-2"]', function () {
125            var $close = $(this).attr('ht-target-close');
126            var $reload = $(this).attr('ht-reload');
127            if ($close) {
128                $($close).removeClass('show');
129                $('body').find('.c-modal-2-backdrop:last').removeClass('show');
130                setTimeout(function () {
131                    $($close).removeAttr('style');
132                    $('body').find('.c-modal-2-backdrop:last').remove();
133                }, 200);
134            } else {
135                $('.c-modal-2-backdrop').removeClass('show');
136                $('.c-modal-2').removeClass('show');
137                setTimeout(function () {
138                    $('.c-modal-2').removeAttr('style');
139                    $('body').removeClass('c-modal-2-open');
140                    $('.c-modal-2-backdrop').remove();
141                }, 200);
142            }
143            if ($reload === 'true') {
144                $redirect = ($(this).attr('ht-redirect') === 'false') ? '' : $(this).attr('ht-redirect');
145                window.location.href = $redirect;
146            }
147        });
148    });
149
150    /* END c-modal-2 */
151    /* BEGIN c-select-single */
152    $(document).ready(function () {
153
154        $('.c-select .c-radio').find('.c_tick').remove();
155        $('body').on('click', '[ht-trigger="c-select"]', function () {
156            if ($(this).closest('#s-address-map').length) {
157                var $select = $(this).closest('.c-select');
158                var isFocusedMap = $select.hasClass('is-focused');
159                $('#s-address-map .c-select').removeClass('is-focused');
160                $('.overlay-transparent[ht-close="c-select"]').remove();
161                if (!isFocusedMap) {
162                    $select.addClass('is-focused');
163                }
164                return false;
165            }
166
167            var focused = $(this).parent().hasClass('is-focused');
168            $('[ht-close="c-select"]').click();
169            if (!focused) {
170                $(this).parent().addClass('is-focused');
171                $('body').append('<div class="overlay-transparent" ht-close="c-select"></div>');
172            }
173        });
174
175        $('body').on('click', '.c-select .c-radio', function () {
176            var vl = $(this).find("input").val();
177            if (!$(this).parent('.list-service').length) {
178                $("#s-address .s_content").addClass('none');
179                $("#s-address .s_address").addClass('is-active');
180                $("#s-address .s_address").find(vl).addClass('is-active');
181                $("#s-address .s_address").find(vl).siblings().removeClass('is-active');
182            }
183            var el_select = $(this).closest('.c-select');
184            el_select.find('div.c_input').text($(this).find('span').text());
185            el_select.find('div.c_input').removeClass('text--icon');
186            el_select.find('.c-radio').removeClass('is-selected');
187            $(this).addClass('is-selected');
188            $('[ht-close="c-select"]').click();
189        });
190        $('body').on('click', function (event) {
191            if (!$(event.target).closest('#s-address-map .c-select').length) {
192                $('#s-address-map .c-select').removeClass('is-focused');
193            }
194        });
195        $('body').on('click', '[ht-close="c-select"]', function () {
196            $('.c-select').removeClass('is-focused');
197            $('.overlay-transparent').remove();
198        });
199        // $('#s-time .s_day ul li, #s-time .s_time ul li').click(function() {
200        //     $(this).toggleClass('is-active');
201        // });
202    });
203
204})(jQuery);
205
206function setLocalStore(key, value, time = 1) {
207    let now = new Date()
208    const item = {
209        data: value,
210        expiry: now.getTime() + time * 7 * 24 * 60 * 60 * 1000,
211    }
212    localStorage.setItem(key, JSON.stringify(item))
213}
214
215function getLocalStore(key) {
216    const itemStr = localStorage.getItem(key)
217
218    if (!itemStr) {
219        return null
220    }
221    const item = JSON.parse(itemStr)
222    const now = new Date()
223    if (now.getTime() > item.expiry) {
224        localStorage.removeItem(key)
225        return null
226    }
227    return item.data
228}
229
230function checkPhone(phone) {
231    return /^(84|0[3|5|7|8|9])+([0-9]{8})\b/.test(phone);
232}
233
234function checkName(text) {
235    return /^[a-zA-ZÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂẾưăạảấầẩẫậắằẳẵặẹẻẽềềểếỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ\s\W|_]+$/g.test(text);
236}
237
238function switchTab(selector = '[data-role="tab"]', wrapperTabContent = '.tab-panel') {
239    const tabs = document.querySelectorAll(selector);
240    const tabContents = document.querySelectorAll(wrapperTabContent);
241    tabs.forEach((tab) => {
242        tab.addEventListener("click", () => {
243            const target = document.querySelector(tab.dataset.target);
244            tabContents.forEach((wrapperContent) => {
245                wrapperContent.classList.remove("is-active"); //xóa class is-active (ẩn) tất cả các tab content
246            });
247            target.classList.add("is-active"); //hiện tab content được click
248
249            tabs.forEach((t) => {
250                t.classList.remove("is-active");
251            });
252            tab.classList.add("is-active");
253        });
254    });
255}
256
257const flktyResize = (elem) => {
258
259    var flkty = new Flickity(elem, {
260        resize: true,
261        lazyLoad: 1,
262        autoPlay: true,
263        pageDots: false,
264        prevNextButtons: false,
265        contain: true
266    });
267
268    setTimeout(function () {
269        flkty.resize()
270    }, 100);
271};
272
273function switchTabFlkty(selector = '[data-flkty="tab"]', wrapperTabContent = '.tabContent') {
274    const tabs = document.querySelectorAll(selector);
275    const tabContents = document.querySelectorAll(wrapperTabContent);
276
277    tabs.forEach((tab) => {
278        tab.addEventListener("click", (event) => {
279            const target = document.querySelector(tab.dataset.target);
280
281            let tabn = event.target.closest('.tabAll');
282            let tabContents = tabn.querySelectorAll('.tabContent');
283            let resize = target.querySelector('.resize');
284
285            tabContents.forEach((wrapperContent) => {
286                wrapperContent.classList.remove("active");
287            });
288
289            target.classList.add("active"); //hiện tab content được click
290
291            flktyResize(resize);
292
293            let tabLinks = tabn.querySelectorAll('.tabLinks');
294            tabLinks.forEach((t) => {
295                t.classList.remove("active");
296            });
297            tab.classList.add("active"); // nav click
298        });
299    });
300}
301
302; (() => {
303    switchTab();
304    switchTabFlkty();
305})()
306
307document.addEventListener('DOMContentLoaded', function () {
308    var elems = document.querySelectorAll('.carousel-materialize');
309    var instances = M.Carousel.init(elems, {
310        indicators: false,
311        padding: 0,
312        dist: -300,
313    });
314});
315const showVideoAutoplay = () => {
316    const box = document.querySelectorAll('.box-image');
317    box.forEach((btn) => {
318        btn.addEventListener("click", function (event) {
319            event.preventDefault();
320            let closest = event.target.closest('.box-image');
321            let image = closest.querySelector('.video-image');
322            let icon = closest.querySelector('.overlay-icon');
323            let video = closest.querySelector('.video-iframe');
324            icon.style.display = "none";
325            video.style.display = "block";
326            let data = video.getAttribute('data-video');
327
328            image.innerHTML = `<iframe width="1000" height="520" src="https://www.youtube.com/embed/${data}?autoplay=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>`;
329            image.style.paddingTop = '0';
330        });
331    });
332}
333jQuery(document).ready(function () {
334    var acc = document.getElementsByClassName("accordion");
335    var i;
336    for (i = 0; i < acc.length; i++) {
337        acc[i].addEventListener("click", function () {
338            this.classList.toggle("active");
339            var panel = this.nextElementSibling;
340            if (panel.style.maxHeight) {
341                panel.style.maxHeight = null;
342            } else {
343                panel.style.maxHeight = panel.scrollHeight + "px";
344            }
345        });
346    }
347});
348
349window.addEventListener('load', () => {
350    let eleBackToTop = document.querySelector("#backToTop");
351    window.addEventListener('scroll', () => {
352        const scroll = document.documentElement.scrollTop
353        if (scroll > 350) {
354            eleBackToTop.classList.add('active--btt')
355        } else {
356            eleBackToTop.classList.remove('active--btt')
357        }
358    });
359});
360
361const btnSearchMobile = document.querySelector(".btn-search-mobile");
362const headerSearchMobile = document.querySelector(".header-search-mobile");
363btnSearchMobile.addEventListener('click', () => {
364   
365    headerSearchMobile.classList.toggle('active');
366})
367document.body.addEventListener('click', function(event) {
368    if (!headerSearchMobile.contains(event.target) && !btnSearchMobile.contains(event.target)) {
369        headerSearchMobile.classList.remove('active');
370      }
371})
372
373document.addEventListener('DOMContentLoaded', function () {
374    var flickityConfig = {
375        wrapAround: true,
376        contain: true,
377        autoPlay: 3500,
378        pageDots: true,
379        prevNextButtons: false,
380        groupCells: true,
381        draggable: true,
382    };
383    if (isMobileDevice()) {
384        flickityConfig.cellAlign = 'left';
385        flickityConfig.freeScroll = true;
386    } else {
387        flickityConfig.cellAlign = 'center';
388        flickityConfig.freeScroll = false;
389    }
390
391    var carouselSlide = document.querySelector('.activity-list-slide');
392    if (carouselSlide) {
393        var flkty = new Flickity(carouselSlide, flickityConfig);
394        flkty.on('change', function (index) {
395            changeSlideActivity();
396        });
397    }
398});
399
400// Hàm kiểm tra thiết bị di động
401function isMobileDevice() {
402    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
403}
404
405function changeSlideActivity() {
406    var slide = document.querySelector('.slide-layout-2.is-selected');
407    var sectionActivity = document.querySelector('section#activity');
408
409    if (!slide) {
410        sectionActivity.classList.remove('slide-layout-2');
411    } else {
412        sectionActivity.classList.add('slide-layout-2');
413    }
414}
415
416document.addEventListener("DOMContentLoaded", function() {
417    var iconEl = document.querySelector('.bm-icon.fas.fa-star');
418    if (iconEl) {
419        // Bỏ icon font
420        iconEl.classList.remove('fas', 'fa-star');
421
422        // Thêm class tùy chỉnh
423        iconEl.classList.add('custom-image-icon');
424
425        // Chèn ảnh
426        iconEl.innerHTML = '<img src="https://cdn.diemnhangroup.com/dentalinvietnam.com/2025/08/social-media_1.png" alt="icon">';
427    }
428});
429
430document.addEventListener("DOMContentLoaded", function () {
431    const hash = window.location.hash;
432
433    if (hash) {
434        // Ví dụ: #nav-benh-vien-tham-my
435        const targetTab = document.querySelector(`a[href="${hash}"]`);
436        const targetPane = document.querySelector(hash);
437
438        if (targetTab && targetPane) {
439            // Bỏ active mặc định
440            document.querySelectorAll('.branch-functions__tabs .nav-link').forEach(tab => {
441                tab.classList.remove('active');
442                tab.setAttribute('aria-selected', 'false');
443            });
444
445            document.querySelectorAll('.tab-pane').forEach(pane => {
446                pane.classList.remove('show', 'active');
447            });
448
449            // Active tab mới
450            targetTab.classList.add('active');
451            targetTab.setAttribute('aria-selected', 'true');
452
453            targetPane.classList.add('show', 'active');
454
455            // Scroll tới khu vực tab (nếu muốn)
456            const tabZone = document.querySelector('.branch-functions__tabs');
457            if (tabZone) {
458                tabZone.scrollIntoView({ behavior: 'smooth', block: 'start' });
459            }
460        }
461    }
462});
463
464jQuery(function($){
465
466    function filterStores() {
467        let selectedRegion = $('#filter-region').val();
468
469        // tab-pane active
470        let activePane = $('.tab-pane.show.active, .tab-pane.active');
471
472        if (!activePane.length) return;
473
474        let items = activePane.find('.store__item');
475
476        // Không chọn vùng → hiện full
477        if (selectedRegion === "") {
478            items.show();
479            return;
480        }
481
482        // Lọc theo vùng
483        items.each(function(){
484            $(this).toggle($(this).data('region') === selectedRegion);
485        });
486    }
487
488    // Khi chọn vùng → lọc
489    $('#filter-region').on('change', filterStores);
490
491    // Khi đổi tab → reset select + hiện full
492    $(document).on('click', '.nav-link', function(){
493        $('#filter-region').val("").trigger('change');
494    });
495
496});
497
498
499(function () {
500    const regionSelect = document.querySelector('.branch-region-select');
501    if (!regionSelect) return;
502
503    function resetFilter(tab) {
504        regionSelect.value = '';
505        tab.querySelectorAll('.store__item, .branch-region-title')
506            .forEach(el => el.style.display = '');
507    }
508
509    function filterByRegion() {
510        const regionId = regionSelect.value;
511        const activeTab = document.querySelector('.list-stores-map.active');
512        if (!activeTab) return;
513
514        const items = activeTab.querySelectorAll('.store__item');
515        const titles = activeTab.querySelectorAll('.branch-region-title');
516
517        items.forEach(item => {
518            if (!regionId) {
519                item.style.display = '';
520                return;
521            }
522            const regions = item.dataset.region ? item.dataset.region.split(',') : [];
523            item.style.display = regions.includes(regionId) ? '' : 'none';
524        });
525
526        titles.forEach(title => {
527            let next = title.nextElementSibling;
528            let hasVisible = false;
529
530            while (next && !next.classList.contains('branch-region-title')) {
531                if (next.classList.contains('store__item') && next.style.display !== 'none') {
532                    hasVisible = true;
533                }
534                next = next.nextElementSibling;
535            }
536            title.style.display = hasVisible ? '' : 'none';
537        });
538    }
539
540    regionSelect.addEventListener('change', filterByRegion);
541
542    document.querySelectorAll('.branch-functions__tabs .nav-link').forEach(tab => {
543        tab.addEventListener('shown.bs.tab', () => {
544            const activeTab = document.querySelector('.list-stores-map.active');
545            if (activeTab) resetFilter(activeTab);
546        });
547    });
548})();

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.