PageSourceSearch

https://wpvender.com/wp-content/plugins/cubewp-framework/cube/assets/frontend/js/cubewp-alerts.js?ver=1.1.31

js wpvender.com collected 2026-10-07 00:30:45 UTC 43,785 bytes, 1,006 lines download raw bytes

1jQuery(document).ready(function () {
2    jQuery(document).on("click", ".cwp-alert .cwp-alert-close", function () {
3        var $this = jQuery(this),
4            $parent = $this.closest('.cwp-alert');
5        $parent.slideUp(200, function () {
6            if ($parent.hasClass("cwp-js-alert")) {
7                $parent.hide();
8            } else {
9                $parent.remove();
10            }
11        });
12    });
13
14    jQuery(document).on('click', '.cubewp-modal-trigger', function (event) {
15        event.preventDefault();
16        var $this = jQuery(this),
17            target = jQuery($this.attr('data-cubewp-modal'));
18        if (target.length > 0) {
19            target.addClass('shown').fadeIn();
20        }
21    });
22    jQuery(document).on('click', '.cubewp-modal-close', function (event) {
23        event.preventDefault();
24        var $this = jQuery(this),
25            target = $this.closest('.cubewp-modal');
26        target.removeClass('shown').fadeOut();
27    });
28
29    var view_all_child_terms = jQuery('.cwp-taxonomy-term-child-terms-see-more');
30    if (view_all_child_terms.length > 0) {
31        view_all_child_terms.on('click', function (e) {
32            e.preventDefault();
33            var $this = jQuery(this),
34                more = $this.attr('data-more'),
35                less = $this.attr('data-less'),
36                all_child_terms = $this.closest('.cwp-taxonomy-term-child-terms').find('.cwp-taxonomy-term-child-terms-more');
37            if ($this.hasClass('cwp-viewing-less')) {
38                $this.text(more);
39                $this.removeClass('cwp-viewing-less');
40                all_child_terms.slideUp('hide');
41            } else {
42                $this.text(less);
43                $this.addClass('cwp-viewing-less');
44                all_child_terms.slideDown('show');
45            }
46        });
47    }
48
49});
50
51function cwp_notification_ui(notification_type, notification_content) {
52    var $cwp_alert = jQuery(".cwp-alert.cwp-js-alert"),
53        $alert_class = '',
54        $cwp_alert_content = $cwp_alert.find('.cwp-alert-content');
55    if ($cwp_alert.is(":visible") && $cwp_alert_content.html() === notification_content) {
56        return false;
57    }
58    if ($cwp_alert.is(":visible")) { 
59        $cwp_alert.slideUp(200, function () {
60            if ($cwp_alert.hasClass("cwp-js-alert")) {
61                $cwp_alert.hide();
62            } else {
63                $cwp_alert.remove();
64            }
65        });
66    }
67    if (notification_type === 'success') {
68        $alert_class = 'cwp-alert-success';
69    } else if (notification_type === 'warning') {
70        $alert_class = 'cwp-alert-warning';
71    } else if (notification_type === 'info') {
72        $alert_class = 'cwp-alert-info';
73    } else if (notification_type === 'error') {
74        $alert_class = 'cwp-alert-danger';
75    }
76    $cwp_alert.removeClass("cwp-alert-danger cwp-alert-success cwp-alert-warning cwp-alert-info").addClass($alert_class);
77    $cwp_alert.find('.cwp-alert-heading').text(notification_type + "!");
78    $cwp_alert_content.html(notification_content);
79     $cwp_alert.slideDown();
80    setTimeout(function () {
81        $cwp_alert.slideUp(200, function () {
82            if ($cwp_alert.hasClass("cwp-js-alert")) {
83                $cwp_alert.hide();
84            } else {
85                $cwp_alert.remove();
86            }
87        });
88    }, 3000);
89}
90
91jQuery(document).on('click', '.cwp-post-confirmation-wrap .cwp-confirmation-bottom-bar', function (e) {
92    jQuery('.cwp-post-confirmation').slideToggle(700);
93});
94jQuery(document).on('click', '.cwp-post-confirmation-wrap .cwp-confirmation-bottom-bar', function (e) {
95    jQuery('.cwp-post-confirmation').slideToggle(700);
96});
97jQuery(document).on('click', '.cwp-save-post', function (e) {
98    var thisObj = jQuery(this);
99    var pid = thisObj.data('pid');
100    thisObj.addClass('cubewp-active-ajax');
101    jQuery.ajax({
102        url: cwp_alert_ui_params.ajax_url,
103        type: 'POST',
104        data: 'action=cubewp_save_post&post-id=' + pid + '&nonce=' + cwp_alert_ui_params.nonce,
105        dataType: "json",
106        success: function (response) {
107            cwp_notification_ui(response.type, response.msg);
108            if (typeof response.text != 'undefined' && response.text != '') {
109                thisObj.addClass('cwp-saved-post');
110                thisObj.removeClass('cwp-save-post');
111                thisObj.find('.cwp-saved-text').html(response.text);
112                thisObj.removeClass('cubewp-active-ajax');
113            }
114        }
115    });
116});
117jQuery(document).on('click', '.cwp-saved-post', function (e) {
118    var thisObj = jQuery(this);
119    var pid = thisObj.data('pid');
120    var action = thisObj.data('action');
121    thisObj.addClass('cubewp-active-ajax');
122    jQuery.ajax({
123        url: cwp_alert_ui_params.ajax_url,
124        type: 'POST',
125        data: 'action=cubewp_remove_saved_posts&post-id=' + pid + '&nonce=' + cwp_alert_ui_params.nonce,
126        dataType: "json",
127        success: function (response) {
128            cwp_notification_ui(response.type, response.msg);
129            if (typeof response.text != 'undefined' && response.text != '') {
130                if (action == 'remove') {
131                    thisObj.closest('tr').remove();
132                }
133                thisObj.addClass('cwp-save-post');
134                thisObj.removeClass('cwp-saved-post');
135                thisObj.find('.cwp-saved-text').html(response.text);
136                thisObj.removeClass('cubewp-active-ajax');
137            }
138        }
139    });
140});
141
142/*-------- Mega Menu and Nav Menu --------*/
143// CubeWP Menus JS >>
144jQuery(document).ready(function ($) {
145    jQuery(document).on(
146        "click",
147        ".elementor-cubewp-menu-toggle__icon--open",
148        function () {
149            jQuery(this).next("svg").addClass("active");
150            jQuery(this).removeClass("active");
151            jQuery(this)
152                .closest(".elementor-cubewp-menu-toggle")
153                .next(".elementor-cubewp-nav-menu--dropdown")
154                .addClass("active");
155        }
156    );
157    jQuery(document).on(
158        "click",
159        ".elementor-cubewp-menu-toggle__icon--close",
160        function () {
161            jQuery(this).prev("svg").addClass("active");
162            jQuery(this).removeClass("active");
163            jQuery(this)
164                .closest(".elementor-cubewp-menu-toggle")
165                .next(".elementor-cubewp-nav-menu--dropdown")
166                .removeClass("active");
167        }
168    );
169    jQuery(document).on("click", ".cubwp-menu-desktop.mobile", function () {
170        jQuery(this)
171            .closest(".elementor-widget-container")
172            .find(".cubewp-offcanvas-menus")
173            .addClass("active");
174    });
175    jQuery(document).on("click", ".cubewp-menu-closed", function () {
176        jQuery(this)
177            .closest(".elementor-widget-container")
178            .find(".cubewp-offcanvas-menus")
179            .removeClass("active");
180    });
181
182    $(document).on("click", ".cubewp-mega-menu-item.hover", function (event) {
183        if ($(window).width() <= 1024) {
184            if (!$(event.target).closest(".cubewp-mega-menu-item-dropdown").length) {
185                $(this).toggleClass("active");
186                $(this).closest('.cubewp-mega-menu').toggleClass("active");
187            }
188        }
189    });
190    $(document).on("click", ".close-mega-menu-mobile", function (event) {
191        if ($(window).width() <= 1024) {
192            $('.cubewp-mega-menu-item , .cubewp-mega-menu').removeClass("active");
193        }
194    });
195    jQuery(document).ready(function ($) {
196        // Open the next slide when clicking the trigger
197        $(document).on("click", ".container-next-triger", function () {
198            $(this)
199                .closest(".elementor-element")
200                .next(".container-next-screen")
201                .addClass("active");
202        });
203        // Close the slide when clicking the back button
204        $(document).on("click", ".container-back-slide", function (e) {
205            if ($(window).width() <= 1024) {
206                e.preventDefault();
207                setTimeout(() => {
208                    if ($(this).closest(".container-next-screen").length > 0) {
209                        $(this).closest(".container-next-screen").removeClass("active");
210                    } else {
211                        $(this).closest(".cubewp-mega-menu").removeClass("active");
212                        $(this).closest(".cubewp-mega-menu-item").removeClass("active");
213                    }
214                }, 200);
215            }
216        });
217    });
218
219    // CubeWP Mega menus JS >>
220    jQuery(document).on(
221        "click",
222        ".cubewp-mega-menu .cubewp-mega-menu-item.click",
223        function () {
224            var getID = jQuery(this).data("showid");
225            jQuery(this)
226                .closest(".cubewp-mega-menu")
227                .find(".cubewp-mega-menu-item-dropdown")
228                .removeClass("active");
229            jQuery(this)
230                .closest(".cubewp-mega-menu")
231                .find(".cubewp-mega-menu-item-dropdown")
232                .removeClass("init");
233            jQuery(this)
234                .closest(".cubewp-mega-menu")
235                .find(".cubewp-mega-menu-item.click")
236                .removeClass("active");
237            jQuery("#" + getID).addClass("active");
238            jQuery(document.body).trigger("cubewp_mega_menu_item_loaded");
239            jQuery(this).addClass("active");
240            setTimeout(function () {
241                jQuery("#" + getID).addClass("init");
242            }, 500);
243        }
244    );
245
246    jQuery(document).on(
247        "click",
248        ".cubewp-mega-menu-mobile-button",
249        function () {
250            jQuery(this).next(".cubewp-mega-menu.cubwp-menu-desktop").slideToggle();
251            jQuery(this).toggleClass("active");
252        }
253    );
254
255    function adjustMegaMenuDropdown($this) {
256        var dropdown = $this.find(".cubewp-mega-menu-item-dropdown");
257        if (dropdown.length) {
258            var bodyWidth = jQuery("body").width(); // Get the full width of the body
259            var dropdownOffsetLeft = dropdown.offset().left; // Current left position of the dropdown
260            var bodyOffsetLeft = jQuery("body").offset().left; // Body's left position (should be 0)
261            var difference = dropdownOffsetLeft - bodyOffsetLeft;
262
263            // Adjust the dropdown's width and position to span the entire body width
264            dropdown.css({
265                "left": "-" + difference + "px",
266                "right": "auto",
267                "width": bodyWidth + "px"
268            });
269        }
270    }
271
272    jQuery(document).on("mouseenter", ".cubewp-mega-menu-item", function () {
273        var $this = jQuery(this);
274        adjustMegaMenuDropdown($this);
275    });
276
277    jQuery(document).on("mouseleave", ".cubewp-mega-menu-item", function () {
278        jQuery(this).find(".cubewp-mega-menu-item-dropdown").css({
279            "left": "unset",
280        });
281    });
282
283    setTimeout(function () {
284        if (jQuery(".elementor-cubewp-nav-menu__container").length > 0) {
285            var get_iconsInd = jQuery(".elementor-cubewp-nav-menu__container").data(
286                "icons"
287            );
288            if (typeof get_iconsInd === "string") {
289                get_iconsInd = get_iconsInd.trim().replace(/1$/, "");
290            }
291            jQuery(".elementor-cubewp-nav-menu__container")
292                .find(".menu-item-has-children>a")
293                .append(get_iconsInd);
294        }
295    }, 200);
296});
297
298function cubewpSlickIsRTL() {
299    return typeof jQuery !== 'undefined' && jQuery('body').hasClass('rtl');
300}
301
302/*------- CubeWP Post Slider ---------*/
303function initPostSlider($scope, clicked) {
304    var sliders = $scope.find('.cubewp-post-slider');
305    if (!sliders.length) return;
306    sliders.each(function () {
307        var sliderElement = jQuery(this);
308
309        if (sliderElement.hasClass('slick-initialized')) {
310            if (clicked == 'clicked') {
311                sliderElement.slick("unslick");
312                console.log('have slider');
313                sliderElement.addClass('sliderElement');
314            } else {
315                return;
316
317            }
318
319        }
320
321        var isPrevSvg = sliderElement.data('is-prev-svg');
322        var isNextSvg = sliderElement.data('is-next-svg');
323
324        var prevArrowHtml = isPrevSvg ? sliderElement.attr('data-prev-arrow-svg') : sliderElement.data('prev-arrow');
325
326        var nextArrowHtml = isNextSvg ? sliderElement.attr('data-next-arrow-svg') : sliderElement.data('next-arrow');
327
328        var enable_wrapper = sliderElement.data('enable-wrapper');
329        var slidesToShow = sliderElement.data('slides-to-show');
330        var slidesToScroll = sliderElement.data('slides-to-scroll');
331        var slidesToShowTablet = sliderElement.data('slides-to-show-tablet');
332        var slidesToShowTabletPortrait = sliderElement.data('slides-show-tablet-portrait');
333        var slidesToShowMobile = sliderElement.data('slides-to-show-mobile');
334        var slidesToScrollTablet = sliderElement.data('slides-to-scroll-tablet');
335        var slidesToScrollTabletPortrait = sliderElement.data('slides-scroll-tablet-portrait');
336        var slidesToScrollMobile = sliderElement.data('slides-to-scroll-mobile');
337        var autoplay = sliderElement.data('autoplay') === true || sliderElement.data('autoplay') === 'true';
338        var autoplaySpeed = sliderElement.data('autoplay-speed');
339        var Speed = sliderElement.data('speed');
340        var infinite = sliderElement.data('infinite') === true || sliderElement.data('infinite') === 'true';
341        var fade_effect = sliderElement.data('fade') === true || sliderElement.data('fade') === 'true';
342        var variableWidth = sliderElement.data('variable-width') === true || sliderElement.data('variable-width') === 'true';
343        var prevArrowButton, nextArrowButton;
344
345        if (isPrevSvg) {
346            prevArrowButton = '<button type="button" class="slick-prev">' + prevArrowHtml + '</button>';
347        } else {
348            prevArrowButton = '<button type="button" class="slick-prev"><i class="' + prevArrowHtml + '"></i></button>';
349        }
350
351        if (isNextSvg) {
352            nextArrowButton = '<button type="button" class="slick-next">' + nextArrowHtml + '</button>';
353        } else {
354            nextArrowButton = '<button type="button" class="slick-next"><i class="' + nextArrowHtml + '"></i></button>';
355        }
356        var CustomArrows = sliderElement.data('custom-arrows') === true || sliderElement.data('custom-arrows') === 'true';
357        var CustomDots = sliderElement.data('custom-dots') === true || sliderElement.data('custom-dots') === 'true';
358        var enableProgressBar = sliderElement.data('enable-progress-bar') === true || sliderElement.data('enable-progress-bar') === 'true';
359
360        function postSliderIsVertical(value) {
361            return value === true || value === 'true';
362        }
363
364        var vertical = postSliderIsVertical(sliderElement.data('vertical'));
365        var verticalTabletRaw = sliderElement.data('vertical-tablet');
366        var verticalTablet = (verticalTabletRaw === undefined || verticalTabletRaw === '') ? vertical : postSliderIsVertical(verticalTabletRaw);
367        var verticalMobileRaw = sliderElement.data('vertical-mobile');
368        var verticalMobile = (verticalMobileRaw === undefined || verticalMobileRaw === '') ? verticalTablet : postSliderIsVertical(verticalMobileRaw);
369
370        function postSliderApplyVertical(settings, isVertical) {
371            if (!settings) {
372                return settings;
373            }
374            settings.vertical = isVertical;
375            settings.verticalSwiping = isVertical;
376            settings.fade = isVertical ? false : fade_effect;
377            return settings;
378        }
379
380        var postSlickOptions = {
381            slidesToShow: slidesToShow,
382            slidesToScroll: slidesToScroll,
383            autoplay: autoplay,
384            autoplaySpeed: autoplaySpeed,
385            speed: Speed,
386            infinite: infinite,
387            fade: vertical ? false : fade_effect,
388            variableWidth: variableWidth,
389            prevArrow: prevArrowButton,
390            nextArrow: nextArrowButton,
391            rtl: cubewpSlickIsRTL(),
392            arrows: CustomArrows,
393            dots: CustomDots,
394            vertical: vertical,
395            verticalSwiping: vertical,
396            responsive: [{
397                    breakpoint: 1025,
398                    settings: postSliderApplyVertical({
399                        slidesToShow: slidesToShowTablet,
400                        slidesToScroll: slidesToScrollTablet
401                    }, verticalTablet)
402                },
403                {
404                    breakpoint: 768,
405                    settings: postSliderApplyVertical({
406                        slidesToShow: slidesToShowTabletPortrait,
407                        slidesToScroll: slidesToScrollTabletPortrait
408                    }, verticalTablet)
409                },
410                {
411                    breakpoint: 481,
412                    settings: postSliderApplyVertical({
413                        slidesToShow: slidesToShowMobile,
414                        slidesToScroll: slidesToScrollMobile
415                    }, verticalMobile)
416                }
417            ]
418        };
419
420        postSliderApplyVertical(postSlickOptions, vertical);
421        sliderElement.slick(postSlickOptions);
422
423        if (enableProgressBar == true) {
424            if (!sliderElement.next('.slick-progress').length) {
425                sliderElement.after(
426                    '<div class="slick-progress"><div class="slick-progress-bar"></div></div>'
427                );
428                var totalSlides = sliderElement.slick("getSlick").slideCount;
429                sliderElement.on("afterChange", function (event, slick, currentSlide) {
430                    var progress = ((currentSlide + 1) / totalSlides) * 100;
431                    sliderElement.next('.slick-progress').find('.slick-progress-bar').css("width", progress + "%");
432                });
433            }
434        }
435        if (enable_wrapper == true) {
436            sliderElement.append('<div class="slick-arrows-wrapper"></div>');
437            sliderElement.find(".slick-prev").appendTo(sliderElement.find(".slick-arrows-wrapper"));
438            sliderElement.find(".slick-dots").appendTo(sliderElement.find(".slick-arrows-wrapper"));
439            sliderElement.find(".slick-next").appendTo(sliderElement.find(".slick-arrows-wrapper"));
440        }
441    });
442    if (clicked == 'clicked') {
443        jQuery(document).trigger("post_slider_initialized", [$scope]);
444    }
445}
446(function ($) {
447    // Expose initPostSlider to a global object if needed outside Elementor's scope
448    if (typeof window.CubeWp === 'undefined') {
449        window.CubeWp = {};
450    }
451    window.CubeWp.initPostSlider = initPostSlider;
452
453    // Hook for Elementor frontend and editor
454    jQuery(window).on('elementor/frontend/init', function () {
455        elementorFrontend.hooks.addAction('frontend/element_ready/cubewp_posts.default', initPostSlider);
456    });
457})(jQuery);
458
459var CubeWpShortcodePostsAjax = {
460    loadPosts: function (containerSelector) {
461        var $container = jQuery(containerSelector);
462        var parameters = $container.data('parameters');
463        if (parameters) {
464            jQuery.ajax({
465                url: cwp_alert_ui_params.ajax_url,
466                type: 'POST',
467                data: {
468                    action: 'cubewp_posts_output',
469                    ...parameters,
470                    load_via_ajax: 'yes'
471                },
472                success: function (response) {
473                    if (response.success) {
474                        $container.replaceWith(response.data.content);
475                        initPostSlider(jQuery(document.body));
476                        jQuery(document.body).trigger('cubewp_posts_loaded');
477                    } else {
478                        $container.html('<div class="cubewp-error-card">Error loading posts.</div>');
479                    }
480                },
481                error: function () {
482                    $container.html('<div class="cubewp-error-card">Failed to load posts.</div>');
483                }
484            });
485        }
486    }
487};
488jQuery(document).on("click", ".vpack-nested-tabs  .e-n-tab-title", function () {
489    var $dataid = jQuery(this).attr('aria-controls');
490    var $sliderContainer = jQuery(this).closest('.elementor-element').find('#' + $dataid);
491    var clicked = 'clicked';
492    if (jQuery(this).hasClass('init-clicked')) {
493        return false;
494    }
495    initPostSlider($sliderContainer, clicked);
496    jQuery(this).addClass('init-clicked');
497});
498
499/* CubeWP Term / User Slider */
500function initTermSlider($scope, clicked) {
501    var sliders = $scope.find('.cubewp-term-slider, .cubewp-user-slider');
502    if (!sliders.length) return;
503    sliders.each(function () {
504        var sliderElement = jQuery(this);
505
506        if (sliderElement.hasClass('slick-initialized')) {
507            if (clicked == 'clicked') {
508                sliderElement.slick("unslick");
509                console.log('have slider');
510                sliderElement.addClass('sliderElement');
511            } else {
512                return;
513
514            }
515
516        }
517
518        var sliderDeviceOption = sliderElement.data('slider-device-option');
519
520        var isPrevSvg = sliderElement.data('is-prev-svg');
521        var isNextSvg = sliderElement.data('is-next-svg');
522
523        var prevArrowHtml = isPrevSvg ? sliderElement.attr('data-prev-arrow-svg') : sliderElement.data('prev-arrow');
524
525        var nextArrowHtml = isNextSvg ? sliderElement.attr('data-next-arrow-svg') : sliderElement.data('next-arrow');
526
527        var enable_wrapper = sliderElement.data('enable-wrapper');
528        var slidesToShow = sliderElement.data('slides-to-show');
529        var slidesToScroll = sliderElement.data('slides-to-scroll');
530        var slidesToShowTablet = sliderElement.data('slides-to-show-tablet');
531        var slidesToShowTabletPortrait = sliderElement.data('slides-show-tablet-portrait');
532        var slidesToShowMobile = sliderElement.data('slides-to-show-mobile');
533        var slidesToScrollTablet = sliderElement.data('slides-to-scroll-tablet');
534        var slidesToScrollTabletPortrait = sliderElement.data('slides-scroll-tablet-portrait');
535        var slidesToScrollMobile = sliderElement.data('slides-to-scroll-mobile');
536        var autoplay = sliderElement.data('autoplay') === true || sliderElement.data('autoplay') === 'true';
537        var autoplaySpeed = sliderElement.data('autoplay-speed');
538        var Speed = sliderElement.data('speed');
539        var infinite = sliderElement.data('infinite') === true || sliderElement.data('infinite') === 'true';
540        var fade_effect = sliderElement.data('fade') === true || sliderElement.data('fade') === 'true';
541        var variableWidth = sliderElement.data('variable-width') === true || sliderElement.data('variable-width') === 'true';
542        var draggable = sliderElement.data('draggable') === true || sliderElement.data('draggable') === 'true';
543        var prevArrowButton, nextArrowButton;
544
545        if (isPrevSvg) {
546            prevArrowButton = '<button type="button" class="slick-prev">' + prevArrowHtml + '</button>';
547        } else {
548            prevArrowButton = '<button type="button" class="slick-prev"><i class="' + prevArrowHtml + '"></i></button>';
549        }
550
551        if (isNextSvg) {
552            nextArrowButton = '<button type="button" class="slick-next">' + nextArrowHtml + '</button>';
553        } else {
554            nextArrowButton = '<button type="button" class="slick-next"><i class="' + nextArrowHtml + '"></i></button>';
555        }
556        var CustomArrows = sliderElement.data('custom-arrows') === true || sliderElement.data('custom-arrows') === 'true';
557        var CustomDots = sliderElement.data('custom-dots') === true || sliderElement.data('custom-dots') === 'true';
558        var enableProgressBar = sliderElement.data('enable-progress-bar') === true || sliderElement.data('enable-progress-bar') === 'true';
559
560        function termSliderIsVertical(value) {
561            return value === true || value === 'true';
562        }
563
564        var vertical = termSliderIsVertical(sliderElement.data('vertical'));
565        var verticalTabletRaw = sliderElement.data('vertical-tablet');
566        var verticalTablet = (verticalTabletRaw === undefined || verticalTabletRaw === '') ? vertical : termSliderIsVertical(verticalTabletRaw);
567        var verticalMobileRaw = sliderElement.data('vertical-mobile');
568        var verticalMobile = (verticalMobileRaw === undefined || verticalMobileRaw === '') ? verticalTablet : termSliderIsVertical(verticalMobileRaw);
569
570        function termSliderApplyVertical(settings, isVertical) {
571            if (!settings) {
572                return settings;
573            }
574            settings.vertical = isVertical;
575            settings.verticalSwiping = isVertical;
576            settings.fade = isVertical ? false : fade_effect;
577            return settings;
578        }
579
580        // Use real viewport width (jQuery width can be misleading on some mobiles)
581        var viewportWidth = (typeof window !== 'undefined' && window.innerWidth) ? window.innerWidth : $(window).width();
582        var isMobileViewport = (typeof window !== 'undefined' && window.matchMedia) ? window.matchMedia('(max-width: 767px)').matches : (viewportWidth <= 767);
583
584        // If slider is configured as mobile-only, do not initialize it on larger viewports
585        if (sliderDeviceOption === "mobile_only" && !isMobileViewport) {
586            return;
587        }
588
589        var termSlickOptions = {
590            rtl: cubewpSlickIsRTL(),
591            autoplay: autoplay,
592            autoplaySpeed: autoplaySpeed,
593            speed: Speed,
594            infinite: infinite,
595            fade: vertical ? false : fade_effect,
596            variableWidth: variableWidth,
597            prevArrow: prevArrowButton,
598            nextArrow: nextArrowButton,
599            arrows: CustomArrows,
600            dots: CustomDots,
601            draggable: draggable,
602            vertical: vertical,
603            verticalSwiping: vertical,
604        };
605
606        if (sliderDeviceOption === "mobile_only" && isMobileViewport) {
607            termSlickOptions.slidesToShow = slidesToShowMobile;
608            termSlickOptions.slidesToScroll = slidesToScrollMobile;
609            termSliderApplyVertical(termSlickOptions, verticalMobile);
610            sliderElement.slick(termSlickOptions);
611          }else{
612            termSlickOptions.slidesToShow = slidesToShow;
613            termSlickOptions.slidesToScroll = slidesToScroll;
614            termSliderApplyVertical(termSlickOptions, vertical);
615            termSlickOptions.responsive = [{
616                        breakpoint: 1025,
617                        settings: termSliderApplyVertical({
618                            slidesToShow: slidesToShowTablet,
619                            slidesToScroll: slidesToScrollTablet,
620                        }, verticalTablet)
621                    },
622                    {
623                        breakpoint: 768,
624                        settings: termSliderApplyVertical({
625                            slidesToShow: slidesToShowTabletPortrait,
626                            slidesToScroll: slidesToScrollTabletPortrait,
627                        }, verticalTablet)
628                    },
629                    {
630                        breakpoint: 481,
631                        settings: termSliderApplyVertical({
632                            slidesToShow: slidesToShowMobile,
633                            slidesToScroll: slidesToScrollMobile,
634                        }, verticalMobile)
635                    }
636                ];
637            sliderElement.slick(termSlickOptions);
638          }
639        
640
641        if (enableProgressBar == true) {
642            if (!sliderElement.next('.slick-progress').length) {
643                sliderElement.after(
644                    '<div class="slick-progress"><div class="slick-progress-bar"></div></div>'
645                );
646                var totalSlides = sliderElement.slick("getSlick").slideCount;
647                sliderElement.on("afterChange", function (event, slick, currentSlide) {
648                    var progress = ((currentSlide + 1) / totalSlides) * 100;
649                    sliderElement.next('.slick-progress').find('.slick-progress-bar').css("width", progress + "%");
650                });
651            }
652        }
653        if (enable_wrapper == true) {
654            sliderElement.append('<div class="slick-arrows-wrapper"></div>');
655            sliderElement.find(".slick-prev").appendTo(sliderElement.find(".slick-arrows-wrapper"));
656            sliderElement.find(".slick-dots").appendTo(sliderElement.find(".slick-arrows-wrapper"));
657            sliderElement.find(".slick-next").appendTo(sliderElement.find(".slick-arrows-wrapper"));
658        }
659    });
660    if (clicked == 'clicked') {
661        jQuery(document).trigger("term_slider_initialized", [$scope]);
662    }
663}
664(function ($) {
665    // Expose initTermSlider to a global object if needed outside Elementor's scope
666    if (typeof window.CubeWp === 'undefined') {
667        window.CubeWp = {};
668    }
669    window.CubeWp.initTermSlider = initTermSlider;
670
671    // Hook for Elementor frontend and editor
672    jQuery(window).on('elementor/frontend/init', function () {
673        elementorFrontend.hooks.addAction('frontend/element_ready/cubewp_taxonomy.default', initTermSlider);
674        elementorFrontend.hooks.addAction('frontend/element_ready/cubewp_users.default', initTermSlider);
675    });
676
677    // Initialize on document ready for frontend (non-Elementor contexts)
678    jQuery(document).ready(function () {
679        initTermSlider(jQuery(document.body));
680    });
681
682    /* CubeWP Post Cards Hover Effects */
683    window.addEventListener('elementor/frontend/init', () => {
684
685        class CubewpHoverHandler extends elementorModules.frontend.handlers.Base {
686
687            onInit() {
688                this.applyHoverStyles();
689            }
690
691            onElementChange(settingName) {
692                const hoverSettings = [
693                    'cwp_hover_animation_direction',
694                    'cwp_hover_translate_distance',
695                    'cwp_hover_transition_duration'
696                ];
697                if (hoverSettings.includes(settingName)) {
698                    this.applyHoverStyles();
699                }
700            }
701
702            applyHoverStyles() {
703                const settings = this.getElementSettings();
704                const direction = settings.cwp_hover_animation_direction || 'none';
705                const visiblity = settings.cwp_hover_visibility || 'default';
706
707                const $el = this.$element;
708                const elementId = this.getID();
709                const $card = $el.closest('.cwp-elementor-post-card, .cwp-elementor-term-card');
710
711                if (!$card.length) return;
712
713                // Remove previous bindings for this specific element only
714                $card.off(`.cubewpHover_${elementId}`);
715
716                if (direction === 'none') {
717                    $el.css({
718                        'transform': '',
719                        'opacity': '',
720                        'transition': ''
721                    });
722                    if (visiblity === 'show') {
723                        $card.on(`mouseenter.cubewpHover_${elementId}`, () => {
724                            $el.css({
725                                'display': 'flex',
726                            });
727                        });
728                        // Hover Out
729                        $card.on(`mouseleave.cubewpHover_${elementId}`, () => {
730                            $el.css({
731                                'display': 'none',
732                            });
733                        });
734                    } else if (visiblity === 'hide') {
735                        $card.on(`mouseenter.cubewpHover_${elementId}`, () => {
736                            $el.css({
737                                'display': 'none',
738                            });
739                        });
740                        // Hover Out
741                        $card.on(`mouseleave.cubewpHover_${elementId}`, () => {
742                            $el.css({
743                                'display': 'flex',
744                            });
745                        });
746                    }
747                    return;
748                }
749
750                const distance = settings.cwp_hover_translate_distance?.size || 30;
751                const duration = settings.cwp_hover_transition_duration?.size || 0.3;
752
753                let transform = '';
754                let opacity = '1';
755
756                switch (direction) {
757                    case 'top':
758                        transform = `translateY(-${distance}px)`;
759                        break;
760                    case 'bottom':
761                        transform = `translateY(${distance}px)`;
762                        break;
763                    case 'left':
764                        transform = `translateX(-${distance}px)`;
765                        break;
766                    case 'right':
767                        transform = `translateX(${distance}px)`;
768                        break;
769                    case 'fade':
770                        opacity = '0';
771                        break;
772                    case 'fadeout':
773                        opacity = '1';
774                        break;
775                }
776
777                // Apply base styles
778                $el.css({
779                    'transition': `all ${duration}s ease`,
780                    'transform': transform,
781                    'opacity': opacity
782                });
783
784                // Hover In (applies only for this element)
785                $card.on(`mouseenter.cubewpHover_${elementId}`, () => {
786                    if (direction === 'fadeout') {
787                        // Fade OUT on hover
788                        $el.css({
789                            'opacity': '0',
790                            'transform': 'none',
791                        });
792                    } else {
793                        // All other animations fade/slide IN
794                        $el.css({
795                            'transform': 'none',
796                            'opacity': '1'
797                        });
798                    }
799                });
800
801                // Hover Out
802                $card.on(`mouseleave.cubewpHover_${elementId}`, () => {
803                    if (direction === 'fadeout') {
804                        // Restore visibility when mouse leaves
805                        $el.css({
806                            'opacity': '1',
807                            'transform': transform,
808                        });
809                    } else {
810                        // Return to default (hidden or translated)
811                        $el.css({
812                            'transform': transform,
813                            'opacity': opacity
814                        });
815                    }
816                });
817            }
818        }
819
820        // Apply to container, button, and icon widgets
821        ['container', 'button.default', 'icon.default'].forEach(widget => {
822            elementorFrontend.hooks.addAction(`frontend/element_ready/${widget}`, ($scope) => {
823                elementorFrontend.elementsHandler.addHandler(CubewpHoverHandler, {
824                    $element: $scope
825                });
826            });
827        });
828    });
829
830    window.addEventListener('elementor/frontend/init', () => {
831        elementorFrontend.hooks.addAction('frontend/element_ready/container', function ($scope) {
832            if (elementorFrontend.isEditMode()) {
833                class ContainerHandler extends elementorModules.frontend.handlers.Base {
834                    onInit() {
835                        super.onInit();
836                        const settings = this.getElementSettings();
837                        const cwp_click_enable = settings.cwp_click_enable; 
838                        const cwp_click_apply = settings.cwp_click_apply; 
839                        if (cwp_click_enable == 'yes' && cwp_click_apply == 'custom') { 
840                                $scope.css('display', 'none');
841                            }else{ 
842                                $scope.css('display', '');
843                            }
844                        }
845                    
846                    onElementChange(settingName) {
847                        super.onElementChange?.apply(this, arguments);
848                        const sliderSettings = [
849                            'cwp_click_enable' , 'cwp_click_apply'
850                          ];
851
852                        if (sliderSettings.includes(settingName)) {
853                            this.onInit();
854                        }
855                    }
856                }
857                elementorFrontend.elementsHandler.addHandler(ContainerHandler, {
858                    $element: $scope
859                });
860            }
861        });
862    });
863
864    jQuery(document).ready(function ($) {
865        function cwpRefreshMapsInCard($card) {
866            if (typeof VP_Refresh_Or_Init_Single_Map !== 'function') {
867                return;
868            }
869            setTimeout(function () {
870                $card.find('.vp-cubewp-map-container').each(function () {
871                    VP_Refresh_Or_Init_Single_Map($(this));
872                });
873            }, 100);
874        }
875
876        jQuery(document).on('click', '.cwp-elementor-post-card, .cwp-elementor-term-card', function (event) {
877            var $card = $(this);
878            $card.find('.cwp-click-element[data-cwp-click-enabled="true"]').each(function () {
879                const clickable = $(this);
880                const targetMode = clickable.data('cwp-target-mode');
881                const applyCss = clickable.data('cwp-apply-css');
882                if (targetMode === 'parent' && applyCss) {
883                    clickable.attr('style', function (i, oldStyle) {
884                        return (oldStyle ? oldStyle + '; ' : '') + applyCss;
885                    });
886                }
887            });
888            cwpRefreshMapsInCard($card);
889        });
890
891        jQuery(document).on('click', '.cwp-click-element[data-cwp-click-enabled="true"]', function (event) {
892            const clickable = $(this);
893            const targetMode = clickable.data('cwp-target-mode');
894            const applyCss = clickable.data('cwp-apply-css');
895            if (targetMode === 'current' && applyCss) {
896                clickable.attr('style', function (i, oldStyle) {
897                    return (oldStyle ? oldStyle + '; ' : '') + applyCss;
898                });
899            }
900            cwpRefreshMapsInCard(clickable.closest('.cwp-elementor-post-card, .cwp-elementor-term-card'));
901        });
902
903        jQuery(document).on('click', '.cwp-click-element[data-cwp-click-enabled="true"]', function (event) {
904            const clickable = $(this);
905            const targetMode = clickable.data('cwp-target-class');
906
907
908            var $this_data = $('.cwp-click-element[data-cwp-apply-class="' + targetMode + '"]');
909            var $this_data_remove = $('.cwp-click-element[data-cwp-remove-class="' + targetMode + '"]');
910            if ($this_data.length > 0) {
911                const targetModes = $this_data.data('cwp-target-mode');
912                const dataID = $this_data.data('id');
913                const applyClass = $this_data.data('cwp-apply-class');
914                const applyCss = $this_data.data('cwp-apply-css');
915                if (targetModes === 'custom' && applyClass) {
916                    const card = $(this).closest('.cwp-elementor-post-card, .cwp-elementor-term-card');
917                    const element = card.find('.cwp-click-element[data-id="' + dataID + '"]');
918                    element.removeAttr('style');
919                    element.attr('style', applyCss);
920                    element.find('.vp-cubewp-map-container').addBack('.vp-cubewp-map-container').each(function () {
921                        if (typeof VP_Refresh_Or_Init_Single_Map === 'function') {
922                            VP_Refresh_Or_Init_Single_Map($(this));
923                        } else if (typeof VP_Init_Single_Map === 'function') {
924                            VP_Init_Single_Map($(this));
925                        }
926                    });
927                }
928            }
929            if ($this_data_remove.length > 0) {
930                const targetModes = $this_data_remove.data('cwp-target-mode');
931                const dataID = $this_data_remove.data('id');
932                const removeClass = $this_data_remove.data('cwp-remove-class');
933                const removeCss = $this_data_remove.data('cwp-remove-css');
934                if (targetModes === 'custom' && removeClass && $this_data_remove.length > 0) {
935                    const card = $(this).closest('.cwp-elementor-post-card, .cwp-elementor-term-card');
936                    const element = card.find('.cwp-click-element[data-id="' + dataID + '"]');
937                    element.removeAttr('style');
938                    element.attr('style', removeCss);
939                    element.find('.vp-cubewp-map-container').addBack('.vp-cubewp-map-container').each(function () {
940                        if (typeof VP_Refresh_Or_Init_Single_Map === 'function') {
941                            VP_Refresh_Or_Init_Single_Map($(this));
942                        } else if (typeof VP_Init_Single_Map === 'function') {
943                            VP_Init_Single_Map($(this));
944                        }
945                    });
946                }
947            }
948        })
949    });
950
951    //Grid/List Switcher
952    jQuery(document).on('click', '.cubewp-view-btn', function (e) {
953        e.preventDefault();
954
955        var $btn = jQuery(this);
956        var view = $btn.data('view');
957        var $wrapper = $btn.closest('.cubewp-view-switcher');
958
959        // Active button
960        $wrapper.find('.cubewp-view-btn').removeClass('active');
961        $btn.addClass('active');
962
963        // Apply view class to archive container
964        var $archive = jQuery('.cwp-search-result-output .cwp-grids-container');
965        $archive.removeClass('grid-view list-view').addClass(view + '-view ');
966        if (view === 'list') {
967            cwp_setCookie("cwp_archive_switcher", 'list-view', 30);
968        } else if (view === 'grid') {
969            cwp_setCookie("cwp_archive_switcher", 'grid-view', 30);
970        }
971    });
972    
973    function getCookie(name) {
974        var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
975        return match ? decodeURIComponent(match[2]) : null;
976    }
977
978    jQuery(document).ready(function () {
979        if (typeof cwp_search_filters_ajax_content === 'function') {
980            var $archive = jQuery('.cwp-search-result-output .cwp-grids-container');
981            var savedView = getCookie('cwp_archive_switcher'); // list-view / grid-view
982            if (!savedView) {
983                savedView = 'grid-view';
984            }
985            var view = (savedView === 'list-view') ? 'list' : 'grid';
986            $archive.removeClass('grid-view list-view').addClass(view + '-view');
987    
988            jQuery('.cubewp-view-btn').removeClass('active');
989            jQuery('.cubewp-view-btn[data-view="' + view + '"]').addClass('active');
990        }
991    });
992
993    if (jQuery('.cwp-search-result-output .cwp-grids-container').length > 0) {
994        if (typeof cwp_search_filters_ajax_content === 'function') {
995            var $btn = jQuery('.cubewp-view-switcher');
996            if(!$btn.length > 0){
997                jQuery('.cwp-search-result-output .cwp-grids-container').removeClass('grid-view list-view').addClass('grid-view');
998            } 
999        }else{
1000            var $btn = jQuery('.cubewp-view-switcher');
1001            if(!$btn.length > 0){
1002                jQuery('.cwp-search-result-output .cwp-grids-container').removeClass('grid-view list-view').addClass('grid-view');
1003            }   
1004        }
1005    }
1006})(jQuery);

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.