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 '&'; 12 case '<': return '<'; 13 case '>': return '>'; 14 case '"': return '"'; 15 case "'": return '''; 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.