PageSourceSearch

https://masgeartech.com/wp-content/plugins/woolentor-addons/assets/js/woolentor-widgets-active.js?ver=3.2.0

js masgeartech.com collected 2026-10-04 03:08:12 UTC 13,418 bytes, 322 lines download raw bytes

1;(function($){
2"use strict";
3
4    /**
5     * Senitize HTML
6     */
7    var woolentorSanitizeHTML = function (str) {
8        if( str ){
9            return str.replace(/[&<>"']/g, function (c) {
10                switch (c) {
11                    case '&': return '&amp;';
12                    case '<': return '&lt;';
13                    case '>': return '&gt;';
14                    case '"': return '&quot;';
15                    case "'": return '&#39;';
16                    default: return c;
17                }
18            });
19        }else{
20            return '';
21        }
22    }
23
24    /**
25     * Sanitize Object
26     */
27    var woolentorSanitizeObject = function (inputObj) {
28        const sanitizedObj = {};
29    
30        for (let key in inputObj) {
31            if (inputObj.hasOwnProperty(key)) {
32                let value = inputObj[key];
33    
34                // Sanitize based on the value type
35                if (typeof value === 'string') {
36                    // Sanitize strings to prevent injection
37                    sanitizedObj[key] = woolentorSanitizeHTML(value);
38                } else if (typeof value === 'number') {
39                    // Ensure numbers are valid (you could also set limits if needed)
40                    sanitizedObj[key] = Number.isFinite(value) ? value : 0;
41                } else if (typeof value === 'boolean') {
42                    // Keep boolean values as they are
43                    sanitizedObj[key] = value;
44                } else {
45                    // Handle other types if needed (e.g., arrays, objects)
46                    sanitizedObj[key] = value;
47                }
48            }
49        }
50    
51        return sanitizedObj;
52    }
53
54   /* 
55    * Product Slider 
56    */
57    var WidgetProductSliderHandler = function ($scope, $) {
58
59        var slider_elem = $scope.find('.product-slider').eq(0);
60
61        if (slider_elem.length > 0) {
62
63            slider_elem[0].style.display='block';
64
65            var settings = woolentorSanitizeObject(slider_elem.data('settings'));
66            var arrows = settings['arrows'];
67            var dots = settings['dots'];
68            var autoplay = settings['autoplay'];
69            var infinite = settings.hasOwnProperty('infinite') ? settings['infinite'] : true;
70            var rtl = settings['rtl'];
71            var autoplay_speed = parseInt(settings['autoplay_speed']) || 3000;
72            var animation_speed = parseInt(settings['animation_speed']) || 300;
73            var fade = settings['fade'];
74            var pause_on_hover = settings['pause_on_hover'];
75            var display_columns = parseInt(settings['product_items']) || 4;
76            var scroll_columns = parseInt(settings['scroll_columns']) || 4;
77            var tablet_width = parseInt(settings['tablet_width']) || 800;
78            var tablet_display_columns = parseInt(settings['tablet_display_columns']) || 2;
79            var tablet_scroll_columns = parseInt(settings['tablet_scroll_columns']) || 2;
80            var mobile_width = parseInt(settings['mobile_width']) || 480;
81            var mobile_display_columns = parseInt(settings['mobile_display_columns']) || 1;
82            var mobile_scroll_columns = parseInt(settings['mobile_scroll_columns']) || 1;
83
84            slider_elem.not('.slick-initialized').slick({
85                arrows: arrows,
86                prevArrow: '<button type="button" class="slick-prev"><i class="fa fa-angle-left"></i></button>',
87                nextArrow: '<button type="button" class="slick-next"><i class="fa fa-angle-right"></i></button>',
88                dots: dots,
89                infinite: infinite,
90                autoplay: autoplay,
91                autoplaySpeed: autoplay_speed,
92                speed: animation_speed,
93                fade: false,
94                pauseOnHover: pause_on_hover,
95                slidesToShow: display_columns,
96                slidesToScroll: scroll_columns,
97                rtl: rtl,
98                responsive: [
99                    {
100                        breakpoint: tablet_width,
101                        settings: {
102                            slidesToShow: tablet_display_columns,
103                            slidesToScroll: tablet_scroll_columns
104                        }
105                    },
106                    {
107                        breakpoint: mobile_width,
108                        settings: {
109                            slidesToShow: mobile_display_columns,
110                            slidesToScroll: mobile_scroll_columns
111                        }
112                    }
113                ]
114            });
115        };
116    };
117
118    /*
119    * Custom Tab
120    */
121    function woolentor_tabs( $tabmenus, $tabpane ){
122        $tabmenus.on('click', 'a', function(e){
123            e.preventDefault();
124            var $this = $(this),
125                $target = $this.attr('href');
126            $this.addClass('htactive').parent().siblings().children('a').removeClass('htactive');
127            $( $tabpane + $target ).addClass('htactive').siblings().removeClass('htactive');
128
129            // slick refresh
130            if( $('.slick-slider').length > 0 ){
131                var $id = $this.attr('href');
132                $( $id ).find('.slick-slider').slick('refresh');
133            }
134
135        });
136    }
137
138    /* 
139    * Universal product 
140    */
141    function productImageThumbnailsSlider( $slider ){
142        $slider.slick({
143            dots: true,
144            arrows: true,
145            prevArrow: '<button class="slick-prev"><i class="sli sli-arrow-left"></i></button>',
146            nextArrow: '<button class="slick-next"><i class="sli sli-arrow-right"></i></button>',
147        });
148    }
149    if( $(".ht-product-image-slider").length > 0 ) {
150        productImageThumbnailsSlider( $(".ht-product-image-slider") );
151    }
152
153    var WidgetThumbnaisImagesHandler = function thumbnailsimagescontroller(){
154        woolentor_tabs( $(".ht-product-cus-tab-links"), '.ht-product-cus-tab-pane' );
155        woolentor_tabs( $(".ht-tab-menus"), '.ht-tab-pane' );
156
157        // Countdown
158        var finalTime, daysTime, hours, minutes, second;
159        $('.ht-product-countdown').each(function() {
160            var $this = $(this), finalDate = $(this).data('countdown');
161            var customlavel = $(this).data('customlavel');
162            $this.countdown(finalDate, function(event) {
163                $this.html(event.strftime('<div class="cd-single"><div class="cd-single-inner"><h3>%D</h3><p>'+woolentorSanitizeHTML(customlavel.daytxt)+'</p></div></div><div class="cd-single"><div class="cd-single-inner"><h3>%H</h3><p>'+woolentorSanitizeHTML(customlavel.hourtxt)+'</p></div></div><div class="cd-single"><div class="cd-single-inner"><h3>%M</h3><p>'+woolentorSanitizeHTML(customlavel.minutestxt)+'</p></div></div><div class="cd-single"><div class="cd-single-inner"><h3>%S</h3><p>'+woolentorSanitizeHTML(customlavel.secondstxt)+'</p></div></div>'));
164            });
165        });
166
167    }
168
169    /*
170    * Tool Tip
171    */
172    function woolentor_tool_tips(element, content) {
173        if ( content == 'html' ) {
174            var tipText = element.text();
175        } else {
176            var tipText = element.attr('title');
177        }
178        element.on('mouseover', function() {
179            if ( $('.woolentor-tip').length == 0 ) {
180                element.before('<span class="woolentor-tip">' + woolentorSanitizeHTML(tipText) + '</span>');
181                $('.woolentor-tip').css('transition', 'all 0.5s ease 0s');
182                $('.woolentor-tip').css('margin-left', 0);
183            }
184        });
185        element.on('mouseleave', function() {
186            $('.woolentor-tip').remove();
187        });
188    }
189
190    /*
191    * Tooltip Render
192    */
193    var WidgetWoolentorTooltipHandler = function woolentor_tool_tip(){
194        $('a.woolentor-compare').each(function() {
195            woolentor_tool_tips( $(this), 'title' );
196        });
197        $('.woolentor-cart a.add_to_cart_button,.woolentor-cart a.added_to_cart,.woolentor-cart a.button').each(function() {
198            woolentor_tool_tips( $(this), 'html');
199        });
200        $('a.woolentor-quick-checkout-button').each(function() {
201            woolentor_tool_tips( $(this), 'title' );
202        });
203    }
204
205    /*
206    * Product Tab
207    */
208    var  WidgetProducttabsHandler = woolentor_tabs( $(".ht-tab-menus"),'.ht-tab-pane' );
209
210    /*
211    * Single Product Video Gallery tab
212    */
213    var WidgetProductVideoGallery = function thumbnailsvideogallery(){
214        woolentor_tabs( $(".woolentor-product-video-tabs"), '.video-cus-tab-pane' );
215    }
216
217    /**
218     * WoolentorAccordion
219     */
220    var WoolentorAccordion = function ( $scope, $ ){
221        var accordion_elem = $scope.find('.htwoolentor-faq').eq(0);
222
223        var data_opt = accordion_elem.data('settings');
224
225        if ( accordion_elem.length > 0 ) {
226            var $id = accordion_elem.attr('id');
227            new Accordion('#' + $id, {
228                duration: 500,
229                showItem: data_opt.showitem,
230                elementClass: 'htwoolentor-faq-card',
231                questionClass: 'htwoolentor-faq-head',
232                answerClass: 'htwoolentor-faq-body',
233            });
234        }
235        
236    };
237
238
239    /**
240     * WoolentorOnePageSlider
241     */
242    var WoolentorOnePageSlider = function ( $scope, $ ){
243
244        var slider_elem = $scope.find('.ht-full-slider-area').eq(0);
245
246        if ( slider_elem.length > 0 ) {
247
248            /* Jarallax active  */
249            $('.ht-parallax-active').jarallax({
250                speed: 0.4,
251            });
252            
253            $('#ht-nav').onePageNav({
254                currentClass: 'current',
255                changeHash: false,
256                scrollSpeed: 750,
257                scrollThreshold: 0.5,
258                filter: '',
259                easing: 'swing',
260            });
261            
262            /*------ Wow Active ----*/
263            new WOW().init();
264
265            /*---------------------
266            Video popup
267            --------------------- */
268            $('.ht-video-popup').magnificPopup({
269                type: 'iframe',
270                mainClass: 'mfp-fade',
271                removalDelay: 160,
272                preloader: false,
273                zoom: {
274                    enabled: true,
275                }
276            });
277    
278        }
279
280    };
281
282    /*
283    * Run this code under Elementor.
284    */
285    $(window).on('elementor/frontend/init', function () {
286
287        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-product-tab.default', WidgetProductSliderHandler);
288        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-product-tab.default', WidgetProducttabsHandler);
289
290        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-universal-product.default', WidgetProductSliderHandler);
291        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-universal-product.default', WidgetWoolentorTooltipHandler);
292        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-universal-product.default', WidgetThumbnaisImagesHandler);
293
294        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-cross-sell-product-custom.default', WidgetProductSliderHandler);
295        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-cross-sell-product-custom.default', WidgetWoolentorTooltipHandler);
296        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-cross-sell-product-custom.default', WidgetThumbnaisImagesHandler);
297
298        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-upsell-product-custom.default', WidgetProductSliderHandler);
299        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-upsell-product-custom.default', WidgetWoolentorTooltipHandler);
300        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-upsell-product-custom.default', WidgetThumbnaisImagesHandler);
301
302        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-related-product-custom.default', WidgetProductSliderHandler);
303        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-related-product-custom.default', WidgetWoolentorTooltipHandler);
304        elementorFrontend.hooks.addAction( 'frontend/element_ready/woolentor-related-product-custom.default', WidgetThumbnaisImagesHandler);
305
306        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-product-video-gallery.default', WidgetProductVideoGallery );
307        
308        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-brand-logo.default', WidgetProductSliderHandler );
309        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-faq.default', WoolentorAccordion );
310        
311        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-category-grid.default', WidgetProductSliderHandler );
312        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-testimonial.default', WidgetProductSliderHandler );
313        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-product-grid.default', WidgetProductSliderHandler );
314        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-recently-viewed-products.default', WidgetProductSliderHandler );
315        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-onepage-slider.default', WoolentorOnePageSlider );
316
317        elementorFrontend.hooks.addAction( 'frontend/element_ready/wl-customer-veview.default', WidgetProductSliderHandler );
318
319    });
320
321
322})(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.