1( function( $, elementor ) { 2 3 'use strict'; 4 5 var JetTricks = { 6 7 init: function() { 8 elementor.hooks.addAction( 'frontend/element_ready/section', JetTricks.elementorSection ); 9 elementor.hooks.addAction( 'frontend/element_ready/container', JetTricks.elementorSection ); 10 elementor.hooks.addAction( 'frontend/element_ready/container', JetTricks.elementorColumn ); 11 elementor.hooks.addAction( 'frontend/element_ready/column', JetTricks.elementorColumn ); 12 elementor.hooks.addAction( 'frontend/element_ready/widget', JetTricks.elementorWidget ); 13 14 var widgets = { 15 'jet-view-more.default' : JetTricks.widgetViewMore, 16 'jet-unfold.default' : JetTricks.widgetUnfold, 17 'jet-hotspots.default' : JetTricks.widgetHotspots 18 }; 19 20 $.each( widgets, function( widget, callback ) { 21 elementor.hooks.addAction( 'frontend/element_ready/' + widget, callback ); 22 }); 23 24 // Re-init widgets in nested tabs 25 window.elementorFrontend.elements.$window.on( 26 'elementor/nested-tabs/activate', 27 ( event, content ) => { 28 29 const $content = $( content ); 30 31 var $button = $content.find( '.jet-unfold__button'); 32 33 $button.off('click.jetUnfold'); 34 35 JetTricks.initWidgetsHandlers( $content ); 36 JetTricks.elementorSection( $content ); 37 38 } 39 ); 40 41 // Add an action when the Swiper Loop Carousel widget is ready on the frontend 42 elementorFrontend.hooks.addAction('frontend/element_ready/loop-carousel.post', function($scope, $) { 43 44 $(window).on('load', function() { 45 46 var loopCarousel = $scope.find('.swiper'), 47 swiperInstance = loopCarousel.data( 'swiper' ), 48 $button = $scope.find( '.jet-unfold__button'); 49 50 if( swiperInstance && $button ) { 51 52 swiperInstance.on('slideChange', function () { 53 $button.off('click.jetUnfold'); 54 JetTricks.initLoopCarouselHandlers( $scope ); 55 }); 56 } 57 }); 58 }); 59 }, 60 61 initLoopCarouselHandlers: function( $selector ) { 62 $selector.find( '.elementor-widget-jet-unfold' ).each( function() { 63 64 var $this = $( this ), 65 66 elementType = $this.data( 'element_type' ); 67 68 if ( !elementType ) { 69 return; 70 } 71 72 if ( 'widget' === elementType ) { 73 elementType = $this.data( 'widget_type' ); 74 window.elementorFrontend.hooks.doAction( 'frontend/element_ready/widget', $this, $ ); 75 } 76 77 window.elementorFrontend.hooks.doAction( 'frontend/element_ready/global', $this, $ ); 78 window.elementorFrontend.hooks.doAction( 'frontend/element_ready/' + elementType, $this, $ ); 79 80 81 } ); 82 }, 83 84 initWidgetsHandlers: function( $selector ) { 85 86 $selector.find( '[data-element_type]' ).each( function() { 87 88 var $this = $( this ), 89 90 elementType = $this.data( 'element_type' ); 91 92 if ( !elementType ) { 93 return; 94 } 95 96 if ( 'widget' === elementType ) { 97 elementType = $this.data( 'widget_type' ); 98 window.elementorFrontend.hooks.doAction( 'frontend/element_ready/widget', $this, $ ); 99 } 100 101 window.elementorFrontend.hooks.doAction( 'frontend/element_ready/global', $this, $ ); 102 window.elementorFrontend.hooks.doAction( 'frontend/element_ready/' + elementType, $this, $ ); 103 104 105 } ); 106 }, 107 108 elementorSection: function( $scope ) { 109 var $target = $scope, 110 sectionId = $scope.data( 'id' ), 111 editMode = Boolean( elementor.isEditMode() ), 112 jetListing = $target.parents( '.elementor-widget-jet-listing-grid' ).data( 'id' ), 113 settings = {}; 114 115 if ( window.JetTricksSettings && window.JetTricksSettings.elements_data.sections.hasOwnProperty( sectionId ) ) { 116 settings = window.JetTricksSettings.elements_data.sections[ sectionId ]; 117 } 118 119 if ( editMode ) { 120 settings = JetTricks.sectionEditorSettings( $scope ); 121 } 122 123 if ( ! settings ) { 124 return false; 125 } 126 127 if ( jQuery.isEmptyObject( settings ) ) { 128 return false; 129 } 130 131 if ( 'false' === settings.particles || '' === settings.particles_json ) { 132 return false; 133 } 134 135 // Compatibility jet tricks particles with jet listing 136 137 if ( jetListing && $target.parent().data( 'elementor-type' ) === 'jet-listing-items' ){ 138 sectionId += jetListing + $target.parents( '.jet-listing-grid__item' ).data( 'post-id' ); 139 } 140 141 var particlesId = 'jet-tricks-particles-instance-' + sectionId, 142 particlesJson = JSON.parse( settings.particles_json ); 143 144 $scope.prepend( '<div id="' + particlesId + '" class="jet-tricks-particles-section__instance"></div>' ); 145 146 tsParticles.load( particlesId, particlesJson ); 147 148 }, 149 150 elementorColumn: function( $scope ) { 151 var $target = $scope, 152 $parentSection = $scope.closest( '.elementor-section' ), 153 isLegacyModeActive = !!$target.find( '> .elementor-column-wrap' ).length, 154 $window = $( window ), 155 columnId = $target.data( 'id' ),
156 editMode = Boolean( elementor.isEditMode() ), 157 settings = {}, 158 stickyInstance = null, 159 stickyInstanceOptions = { 160 topSpacing: 50, 161 bottomSpacing: 50, 162 containerSelector: isLegacyModeActive ? '.elementor-row' : '.elementor-container, .e-con-inner', 163 innerWrapperSelector: isLegacyModeActive ? '.elementor-column-wrap' : '.elementor-widget-wrap', 164 }, 165 $observerTarget = $target.find('.elementor-element'); 166 167 if ( ! editMode ) { 168 settings = $target.data( 'jet-settings' ); 169 170 if ( $target.hasClass( 'jet-sticky-column' ) ) { 171 172 if ( -1 !== settings['stickyOn'].indexOf( elementorFrontend.getCurrentDeviceMode() ) ) { 173 174 $target.each( function() { 175 176 var $this = $( this ), 177 178 elementType = $this.data( 'element_type' ); 179 180 if ( elementType !== 'container' ){ 181 182 stickyInstanceOptions.topSpacing = settings['topSpacing']; 183 stickyInstanceOptions.bottomSpacing = settings['bottomSpacing']; 184 185 imagesLoaded( $parentSection, function() { 186 $target.data( 'stickyColumnInit', true ); 187 stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions ); 188 } ); 189 190 var targetMutation = $target[0], 191 config = { attributes: true, childList: true, subtree: true }; 192 193 var callbackMutation = function( mutationsList, observer ) { 194 for( var mutation of mutationsList ) { 195 if ( 'attributes' === mutation.type ) { 196 $target[0].style.height = 'auto'; 197 } 198 } 199 }; 200 201 var observer = new MutationObserver( callbackMutation ); 202 observer.observe( targetMutation, config ); 203 204 $window.on( 'resize.JetTricksStickyColumn orientationchange.JetTricksStickyColumn', JetTricksTools.debounce( 50, resizeDebounce ) ); 205 206 MutationObserver = window.MutationObserver || window.WebKitMutationObserver; 207 208 var observer = new MutationObserver( function( mutations ) { 209 if ( stickyInstance ) { 210 mutations.forEach( function(mutation){ 211 if (mutation.attributeName === 'class') { 212 setTimeout( function() { 213 stickyInstance.destroy(); 214 stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions ); 215 }, 100 ); 216 } 217 } ) 218 } 219 } ); 220 221 $observerTarget.each( function(){ 222 observer.observe( $( this )[0], { 223 // subtree: true, 224 // childList: true, 225 attributes: true 226 } ); 227 } ) 228 229 } else{ 230 $('body').addClass('jet-sticky-container'); 231 $this.addClass( 'jet-sticky-container-sticky' ); 232 $this.css({ 233 'top': settings['topSpacing'], 234 'bottom': settings['bottomSpacing'] 235 }); 236 } 237 238 }); 239 } 240 } 241 242 } else { 243 244 return false; 245 246 // settings = JetTricks.columnEditorSettings( columnId ); 247 248 // if ( 'true' === settings['sticky'] ) { 249 // $target.addClass( 'jet-sticky-column' ); 250 251 // if ( -1 !== settings['stickyOn'].indexOf( elementorFrontend.getCurrentDeviceMode() ) ) { 252 // stickyInstanceOptions.topSpacing = settings['topSpacing']; 253 // stickyInstanceOptions.bottomSpacing = settings['bottomSpacing']; 254 255 // $target.data( 'stickyColumnInit', true ); 256 // stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions ); 257 258 // $window.on( 'resize.JetTricksStickyColumn orientationchange.JetTricksStickyColumn', JetTricksTools.debounce( 50, resizeDebounce ) ); 259 // } 260 // } 261 } 262 263 function resizeDebounce() { 264 var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), 265 availableDevices = settings['stickyOn'] || [], 266 isInit = $target.data( 'stickyColumnInit' ); 267 268 if ( -1 !== availableDevices.indexOf( currentDeviceMode ) ) { 269 270 if ( ! isInit ) { 271 $target.data( 'stickyColumnInit', true ); 272 stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions ); 273 stickyInstance.updateSticky(); 274 } 275 } else { 276 $target.data( 'stickyColumnInit', false ); 277 stickyInstance.destroy(); 278 } 279 } 280 281 }, 282 283 elementorWidget: function( $scope ) { 284 var parallaxInstance = null, 285 satelliteInstance = null, 286 tooltipInstance = null; 287 288 parallaxInstance = new jetWidgetParallax( $scope ); 289 parallaxInstance.init(); 290 291 satelliteInstance = new jetWidgetSatellite( $scope ); 292 satelliteInstance.init(); 293 294 tooltipInstance = new jetWidgetTooltip( $scope ); 295 tooltipInstance.init(); 296 297 }, 298 299 getElementorElementSettings: function( $scope ) { 300 301 if ( window.elementorFrontend && window.elementorFrontend.isEditMode() && $scope.hasClass( 'elementor-element-edit-mode' ) ) { 302 return JetTricks.getEditorElementSettings( $scope ); 303 } 304 305 return $scope.data( 'settings' ) || {}; 306 }, 307 308 getEditorElementSettings: function( $scope ) { 309 var modelCID = $scope.data( 'model-cid' ), 310 elementData; 311 312 if ( ! modelCID ) { 313 return {}; 314 } 315 316 if ( ! elementor.hasOwnProperty( 'config' ) ) { 317 return {}; 318 } 319 320 if ( ! elementor.config.hasOwnProperty( 'elements' ) ) { 321 return {}; 322 } 323 324 if ( ! elementor.config.elements.hasOwnProperty( 'data' ) ) { 325 return {}; 326 } 327 328 elementData = elementor.config.elements.data[ modelCID ]; 329 330 if ( ! elementData ) { 331 return {}; 332 } 333 334 return elementData.toJSON(); 335 }, 336 337 widgetViewMore: function( $scope ) { 338 var $target = $scope.find( '.jet-view-more' ), 339 instance = null, 340 settings = $target.data( 'settings' ); 341 342 instance = new jetViewMore( $target, settings ); 343 instance.init(); 344 }, 345 346 widgetUnfold: function( $scope ) { 347 var $target = $scope.find( '.jet-unfold' ), 348 $button = $( '.jet-unfold__button', $target ), 349 $mask = $( '.jet-unfold__mask', $target ), 350 $content = $( '.jet-unfold__content', $target ), 351 $contentInner = $( '.jet-unfold__content-inner', $target), 352 $trigger = $( '.jet-unfold__trigger', $target), 353 $separator = $( '.jet-unfold__separator', $target ), 354 settings = $.extend( {}, $target.data( 'settings' ), JetTricks.getElementorElementSettings( $scope ) ), 355 maskBreakpointsHeights = [], 356 prevBreakpoint = '', 357 unfoldDuration = settings['unfoldDuration'] || settings['unfold_duration'], 358 foldDuration = settings['foldDuration'] || settings['fold_duration'], 359 unfoldEasing = settings['unfoldEasing'] || settings['unfold_easing'], 360 foldEasing = settings['foldEasing'] || settings['fold_easing'], 361 maskHeightAdv = 20, 362 heightCalc = '', 363 autoHide = settings['autoHide'] || false, 364 autoHideTime = settings['autoHideTime'] && 0 != settings['autoHideTime']['size'] ? settings['autoHideTime']['size'] : 5, 365 hideOutsideClick = settings['hideOutsideClick'] || false, 366 autoHideTrigger, 367 activeBreakpoints = elementor.config.responsive.activeBreakpoints; 368 369 maskBreakpointsHeights['desktop'] = []; 370 maskBreakpointsHeights['widescreen'] = []; 371 372 maskBreakpointsHeights['desktop']['maskHeight'] = '' != settings['mask_height']['size'] ? settings['mask_height']['size'] : 50; 373 374 prevBreakpoint = 'desktop'; 375
376 Object.keys( activeBreakpoints ).reverse().forEach( function( breakpointName ) { 377 378 if ( 'widescreen' === breakpointName ) { 379 maskBreakpointsHeights['widescreen']['maskHeight'] = '' != settings['mask_height_widescreen']['size'] ? settings['mask_height_widescreen']['size'] : maskBreakpointsHeights['desktop']['maskHeight']; 380 } else { 381 maskBreakpointsHeights[breakpointName] = []; 382 383 maskBreakpointsHeights[breakpointName]['maskHeight'] = '' != settings['mask_height_' + breakpointName]['size'] ? settings['mask_height_' + breakpointName]['size'] : maskBreakpointsHeights[prevBreakpoint]['maskHeight']; 384 385 prevBreakpoint = breakpointName; 386 } 387 } ); 388 389 onLoaded(); 390 391 if ( 'true' === hideOutsideClick ) { 392 $( window ).on( 'mouseup', function( event ) { 393 let container = $target; 394 if ( !container.is( event.target ) && 0 === container.has( event.target ).length && $target.hasClass( 'jet-unfold-state' ) ) { 395 $button.trigger( 'click' ); 396 } 397 } ) 398 } 399 400 $target.one('transitionend webkitTransitionEnd oTransitionEnd', onLoaded ); 401 402 function onLoaded() { 403 var deviceHeight = getDeviceHeight(); 404 405 heightCalc = +deviceHeight + maskHeightAdv; 406 407 if ( heightCalc < $contentInner.height() ) { 408 409 if ( ! $target.hasClass( 'jet-unfold-state' ) ) { 410 $separator.css( { 411 'opacity': '1' 412 } ); 413 } 414 415 if ( ! $target.hasClass( 'jet-unfold-state' ) ) { 416 $mask.css( { 417 'height': deviceHeight 418 } ); 419 } else { 420 $mask.css( { 421 'height': $contentInner.outerHeight() 422 } ); 423 } 424 $trigger.css( 'display', 'flex' ); 425 } else { 426 $trigger.hide(); 427 $mask.css( { 428 'height': '100%' 429 } ); 430 $content.css( { 431 'max-height': 'none' 432 } ); 433 $separator.css( { 434 'opacity': '0' 435 } ); 436 } 437 } 438 439 $( window ).on( 'resize.jetWidgetUnfold orientationchange.jetWidgetUnfold', JetTricksTools.debounce( 50, function(){ 440 onLoaded(); 441 } ) ); 442 443 $button.keypress( function( e ) { 444 if ( e.which == 13 ) { 445 $button.click(); 446 return false; 447 } 448 } ); 449 450 $button.on( 'click.jetUnfold', function(e) { 451 var $this = $( this ), 452 $buttonText = $( '.jet-unfold__button-text', $this ), 453 unfoldText = $this.data( 'unfold-text' ), 454 foldText = $this.data( 'fold-text' ), 455 $buttonIcon = $( '.jet-unfold__button-icon', $this ), 456 unfoldIcon = $this.data( 'unfold-icon' ), 457 foldIcon = $this.data( 'fold-icon' ), 458 contentHeight = $contentInner.outerHeight(), 459 deviceHeight = getDeviceHeight(); 460 461 e.preventDefault(); 462 463 if ( ! $target.hasClass( 'jet-unfold-state' ) ) { 464 $target.addClass( 'jet-unfold-state' ); 465 466 $separator.css( { 467 'opacity': '0' 468 } ); 469 470 $buttonIcon.html( foldIcon ); 471 $buttonText.html( foldText ); 472 473 anime( { 474 targets: $mask[0], 475 height: contentHeight, 476 duration: unfoldDuration['size'], 477 easing: unfoldEasing, 478 complete: function( anim ) { 479 // Recalculate listing masonry. 480 $( document ).trigger( 'jet-engine/listing/recalculate-masonry' ); 481 } 482 } ); 483 484 if ( 'true' === autoHide ) { 485 autoHideTrigger = setTimeout( function() { 486 $button.trigger( 'click' ); 487 }, autoHideTime * 1000 ); 488 } 489 } else { 490 clearTimeout( autoHideTrigger ); 491 492 $target.removeClass( 'jet-unfold-state' ); 493 494 $separator.css( { 495 'opacity': '1' 496 } ); 497 498 $buttonIcon.html( unfoldIcon ); 499 $buttonText.html( unfoldText ); 500 501 anime( { 502 targets: $mask[0], 503 height: deviceHeight, 504 duration: foldDuration['size'], 505 easing: foldEasing, 506 complete: function( anim ) { 507 if ( 'true' === settings['foldScrolling'] ) { 508 $( 'html, body' ).animate( { 509 scrollTop: $target.offset().top - settings['foldScrollOffset']['size'] 510 }, 'slow' ); 511 } 512 513 // Recalculate listing masonry. 514 $( document ).trigger( 'jet-engine/listing/recalculate-masonry' ); 515 } 516 } ); 517 } 518 } ); 519 520 function getDeviceHeight() { 521 var deviceMode = elementor.getCurrentDeviceMode(); 522 523 return maskBreakpointsHeights[deviceMode]['maskHeight']; 524 } 525 }, 526 527 widgetHotspots: function( $scope ) { 528 var $target = $scope.find( '.jet-hotspots' ), 529 $hotspots = $( '.jet-hotspots__item', $target), 530 settings = $target.data( 'settings' ), 531 editMode = Boolean( elementor.isEditMode() ), 532 itemActiveClass = 'jet-hotspots__item--active'; 533 534 $target.imagesLoaded().progress( function() { 535 $target.addClass( 'image-loaded' ); 536 } ); 537 538 $hotspots.each( function( index ) { 539 var $this = $( this ), 540 horizontal = $this.data( 'horizontal-position' ), 541 vertical = $this.data( 'vertical-position' ), 542 itemSelector = $this[0], 543 options = {}; 544 545 $this.css( { 546 'left': horizontal + '%', 547 'top': vertical + '%' 548 } ); 549 550 if ( itemSelector._tippy ) { 551 itemSelector._tippy.destroy(); 552 } 553 554 options = { 555 arrow: settings['tooltipArrow'] ? true : false, 556 placement: settings['tooltipPlacement'], 557 trigger: settings['tooltipTrigger'], 558 appendTo: $target[0], 559 hideOnClick: 'manual' !== settings['tooltipTrigger'], 560 maxWidth: 'none', 561 offset: [0, settings['tooltipDistance']['size']], 562 allowHTML: true, 563 onShow() { 564 $( itemSelector ).addClass( itemActiveClass ); 565 }, 566 onHidden() { 567 $( itemSelector ).removeClass( itemActiveClass ); 568 } 569 } 570 571 if ( 'manual' != settings['tooltipTrigger'] ) { 572 options['duration'] = [ settings['tooltipShowDuration']['size'], settings['tooltipHideDuration']['size'] ]; 573 options['animation'] = settings['tooltipAnimation']; 574 options['delay'] = settings['tooltipDelay']; 575 } 576 577 tippy( [ itemSelector ], options ); 578 579 if ( 'manual' === settings['tooltipTrigger'] && itemSelector._tippy ) { 580 itemSelector._tippy.show(); 581 } 582 583 if ( settings['tooltipShowOnInit'] && itemSelector._tippy ) { 584 itemSelector._tippy.show(); 585 } 586 587 } ); 588 }, 589 590 columnEditorSettings: function( columnId ) { 591 var editorElements = null, 592 columnData = {}; 593 594 if ( ! window.elementor.hasOwnProperty( 'elements' ) ) { 595 return false;
596 } 597 598 editorElements = window.elementor.elements; 599 600 if ( ! editorElements.models ) { 601 return false; 602 } 603 604 $.each( editorElements.models, function( index, obj ) { 605 606 $.each( obj.attributes.elements.models, function( index, obj ) { 607 if ( columnId == obj.id ) { 608 columnData = obj.attributes.settings.attributes; 609 } 610 } ); 611 612 } ); 613 614 return { 615 'sticky': columnData['jet_tricks_column_sticky'] || false, 616 'topSpacing': columnData['jet_tricks_top_spacing'] || 50, 617 'bottomSpacing': columnData['jet_tricks_bottom_spacing'] || 50, 618 'stickyOn': columnData['jet_tricks_column_sticky_on'] || [ 'desktop', 'tablet', 'mobile'] 619 } 620 621 }, 622 623 sectionEditorSettings: function( $scope ) { 624 var editorElements = null, 625 sectionData = {}; 626 627 if ( ! window.elementor.hasOwnProperty( 'elements' ) ) { 628 return false; 629 } 630 631 sectionData = JetTricks.getElementorElementSettings( $scope ); 632 633 return { 634 'particles': sectionData['section_jet_tricks_particles'] || 'false', 635 'particles_json': sectionData['section_jet_tricks_particles_json'] || '', 636 } 637 638 } 639 640 }; 641 642 $( window ).on( 'elementor/frontend/init', JetTricks.init ); 643 644 var JetTricksTools = { 645 debounce: function( threshold, callback ) { 646 var timeout; 647 648 return function debounced( $event ) { 649 function delayed() { 650 callback.call( this, $event ); 651 timeout = null; 652 } 653 654 if ( timeout ) { 655 clearTimeout( timeout ); 656 } 657 658 timeout = setTimeout( delayed, threshold ); 659 }; 660 }, 661 662 widgetEditorSettings: function( widgetId ) { 663 var editorElements = null, 664 widgetData = {}; 665 666 if ( ! window.elementor.hasOwnProperty( 'elements' ) ) { 667 return false; 668 } 669 670 editorElements = window.elementor.elements; 671 672 if ( ! editorElements.models ) { 673 return false; 674 } 675 676 $.each( editorElements.models, function( index, obj ) { 677 678 $.each( obj.attributes.elements.models, function( index, obj ) { 679 680 $.each( obj.attributes.elements.models, function( index, obj ) { 681 if ( widgetId == obj.id ) { 682 widgetData = obj.attributes.settings.attributes; 683 } 684 } ); 685 686 } ); 687 688 } ); 689 690 return { 691 'speed': widgetData['jet_tricks_widget_parallax_speed'] || { 'size': 50, 'unit': '%'}, 692 'parallax': widgetData['jet_tricks_widget_parallax'] || 'false', 693 'invert': widgetData['jet_tricks_widget_parallax_invert'] || 'false', 694 'stickyOn': widgetData['jet_tricks_widget_parallax_on'] || [ 'desktop', 'tablet', 'mobile'], 695 'satellite': widgetData['jet_tricks_widget_satellite'] || 'false', 696 'satelliteType': widgetData['jet_tricks_widget_satellite_type'] || 'text', 697 'satellitePosition': widgetData['jet_tricks_widget_satellite_position'] || 'top-center', 698 'tooltip': widgetData['jet_tricks_widget_tooltip'] || 'false', 699 'tooltipDescription': widgetData['jet_tricks_widget_tooltip_description'] || 'Lorem Ipsum', 700 'tooltipPlacement': widgetData['jet_tricks_widget_tooltip_placement'] || 'top', 701 'tooltipArrow': 'true' === widgetData['jet_tricks_widget_tooltip_arrow'] ? true : false, 702 'xOffset': widgetData['jet_tricks_widget_tooltip_x_offset'] || 0, 703 'yOffset': widgetData['jet_tricks_widget_tooltip_y_offset'] || 0, 704 'tooltipAnimation': widgetData['jet_tricks_widget_tooltip_animation'] || 'shift-toward', 705 'tooltipTrigger': widgetData['jet_tricks_widget_tooltip_trigger'] || 'mouseenter', 706 'customSelector': widgetData['jet_tricks_widget_tooltip_custom_selector'] || '', 707 'zIndex': widgetData['jet_tricks_widget_tooltip_z_index'] || '999', 708 'delay': widgetData['jet_tricks_widget_tooltip_delay'] || '0' 709 } 710 } 711 } 712 713 /** 714 * Jet jetViewMore Class 715 * 716 * @return {void} 717 */ 718 window.jetViewMore = function( $selector, settings ) { 719 var self = this, 720 $window = $( window ), 721 $button = $( '.jet-view-more__button', $selector ), 722 defaultSettings = { 723 sections: {}, 724 effect: 'move-up', 725 showall: false 726 }, 727 settings = $.extend( {}, defaultSettings, settings ), 728 sections = settings['sections'], 729 sectionsData = {}, 730 buttonVisible = true, 731 editMode = Boolean( elementor.isEditMode() ); 732 733 /** 734 * Init 735 */ 736 self.init = function() { 737 self.setSectionsData(); 738 739 if ( editMode ) { 740 return false;
741 } 742 743 // Add Events 744 $button.on( 'click', function() { 745 746 for ( var section in sectionsData ) { 747 var $section = sectionsData[ section ]['selector']; 748 749 if ( ! settings.showall ) { 750 if ( ! sectionsData[ section ]['visible'] ) { 751 sectionsData[ section ]['visible'] = true; 752 $section.addClass( 'view-more-visible' ); 753 $section.addClass( 'jet-tricks-' + settings['effect'] + '-effect' ); 754 755 break; 756 } 757 } else { 758 sectionsData[ section ]['visible'] = true; 759 $section.addClass( 'view-more-visible' ); 760 $section.addClass( 'jet-tricks-' + settings['effect'] + '-effect' ); 761 } 762 763 } 764 765 for ( var section in sectionsData ) { 766 buttonVisible = true; 767 768 if ( sectionsData[ section ]['visible'] ) { 769 buttonVisible = false; 770 } 771 } 772 773 if ( ! buttonVisible ) { 774 $button.css( { 'display': 'none' } ); 775 } 776 777 } ); 778 779 $button.keydown( function( e ) { 780 var $which = e.which || e.keyCode; 781 782 if ( $which == 13 || $which == 32 ) { 783 for ( var section in sectionsData ) { 784 var $section = sectionsData[ section ]['selector']; 785 786 if ( ! settings.showall ) { 787 if ( ! sectionsData[ section ]['visible'] ) { 788 sectionsData[ section ]['visible'] = true; 789 $section.addClass( 'view-more-visible' ); 790 $section.addClass( 'jet-tricks-' + settings['effect'] + '-effect' ); 791 792 break; 793 } 794 } else { 795 sectionsData[ section ]['visible'] = true; 796 $section.addClass( 'view-more-visible' ); 797 $section.addClass( 'jet-tricks-' + settings['effect'] + '-effect' ); 798 } 799 800 } 801 802 for ( var section in sectionsData ) { 803 buttonVisible = true; 804 805 if ( sectionsData[ section ]['visible'] ) { 806 buttonVisible = false; 807 } 808 } 809 810 if ( ! buttonVisible ) { 811 $button.css( { 'display': 'none' } ); 812 } 813 } 814 } ); 815 }; 816 817 self.setSectionsData = function() { 818 819 for ( var section in sections ) { 820 var $selector = $( '#' + sections[ section ] ); 821 822 if ( ! editMode ) { 823 $selector.addClass( 'jet-view-more-section' ); 824 } else { 825 $selector.addClass( 'jet-view-more-section-edit-mode' ); 826 } 827 828 sectionsData[ section ] = { 829 'section_id': sections[ section ], 830 'selector': $selector, 831 'visible': false, 832 } 833 } 834 }; 835 }; 836 837 /** 838 * [jetWidgetParallax description] 839 * @param {[type]} $scope [description] 840 * @return {[type]} [description] 841 */ 842 window.jetWidgetParallax = function( $scope ) { 843 var self = this, 844 $target = $( '> .elementor-widget-container', $scope ), 845 $section = $scope.closest( '.elementor-top-section' ), 846 widgetId = $scope.data('id'), 847 settings = {}, 848 editMode = Boolean( elementor.isEditMode() ), 849 $window = $( window ), 850 isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/), 851 platform = navigator.platform, 852 safariClass = isSafari ? 'is-safari' : '', 853 macClass = 'MacIntel' == platform ? ' is-mac' : ''; 854 855 /** 856 * Init 857 */ 858 self.init = function() { 859 860 $scope.addClass( macClass ); 861 862 if ( ! editMode ) { 863 settings = $scope.data( 'jet-tricks-settings' ); 864 } else { 865 settings = JetTricksTools.widgetEditorSettings( widgetId ); 866 } 867 868 if ( ! settings ) { 869 return false; 870 } 871 872 if ( 'undefined' === typeof settings ) { 873 return false; 874 } 875 876 if ( 'false' === settings['parallax'] || 'undefined' === typeof settings['parallax'] ) { 877 return false; 878 } 879 880 $window.on( 'scroll.jetWidgetParallax resize.jetWidgetParallax', self.scrollHandler ).trigger( 'resize.jetWidgetParallax' ); 881 }; 882 883 self.scrollHandler = function( event ) { 884 var speed = +settings['speed']['size'] * 0.01, 885 invert = 'true' == settings['invert'] ? -1 : 1, 886 winHeight = $window.height(), 887 winScrollTop = $window.scrollTop(), 888 offsetTop = $scope.offset().top, 889 thisHeight = $scope.outerHeight(), 890 sectionHeight = $section.outerHeight(), 891 positionDelta = winScrollTop - offsetTop + ( winHeight / 2 ), 892 abs = positionDelta > 0 ? 1 : -1, 893 posY = abs * Math.pow( Math.abs( positionDelta ), 0.85 ), 894 availableDevices = settings['stickyOn'] || [], 895 currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); 896 897 posY = invert * Math.ceil( speed * posY ); 898 899 if ( -1 !== availableDevices.indexOf( currentDeviceMode ) ) { 900 $target.css( { 901 'transform': 'translateY(' + posY + 'px)' 902 } ); 903 } else { 904 $target.css( { 905 'transform': 'translateY(0)' 906 } ); 907 } 908 }; 909 }; 910 911 /** 912 * [jetWidgetSatellite description] 913 * @param {[type]} $scope [description] 914 * @return {[type]} [description] 915 */ 916 window.jetWidgetSatellite = function( $scope ) { 917 var self = this, 918 widgetId = $scope.data('id'), 919 settings = {}, 920 editMode = Boolean( elementor.isEditMode() ); 921 922 /** 923 * Init 924 */ 925 self.init = function() { 926 927 if ( ! editMode ) { 928 settings = $scope.data( 'jet-tricks-settings' ); 929 } else { 930 settings = JetTricksTools.widgetEditorSettings( widgetId ); 931 } 932 933 if ( ! settings ) { 934 return false;
935 } 936 937 if ( 'undefined' === typeof settings ) { 938 return false; 939 } 940 941 if ( 'false' === settings['satellite'] || 'undefined' === typeof settings['satellite'] ) { 942 return false; 943 } 944 945 $scope.addClass( 'jet-satellite-widget' ); 946 947 $( '.jet-tricks-satellite', $scope ).addClass( 'jet-tricks-satellite--' + settings['satellitePosition'] ); 948 }; 949 }; 950 951 /** 952 * [jetWidgetTooltip description] 953 * @param {[type]} $scope [description] 954 * @return {[type]} [description] 955 */ 956 window.jetWidgetTooltip = function( $scope ) { 957 var self = this, 958 widgetId = $scope.data('id'), 959 widgetSelector = $scope[0], 960 tooltipSelector = widgetSelector, 961 settings = {}, 962 editMode = Boolean( elementor.isEditMode() ), 963 delay, 964 tooltipEvent = editMode ? 'click' : 'mouseenter'; 965 966 /** 967 * Init 968 */ 969 self.init = function() { 970 971 if ( ! editMode ) { 972 settings = $scope.data( 'jet-tricks-settings' ); 973 } else { 974 settings = JetTricksTools.widgetEditorSettings( widgetId ); 975 } 976 977 if ( widgetSelector._tippy ) { 978 widgetSelector._tippy.destroy(); 979 } 980 981 if ( ! settings ) { 982 return false; 983 } 984 985 if ( 'undefined' === typeof settings ) { 986 return false; 987 } 988 989 if ( 'false' === settings['tooltip'] || 'undefined' === typeof settings['tooltip'] || '' === settings['tooltipDescription'] ) { 990 return false; 991 } 992 993 $scope.addClass( 'jet-tooltip-widget' ); 994 995 if ( settings['customSelector'] ) { 996 tooltipSelector = $( '.' + settings['customSelector'], $scope )[0]; 997 } 998 999 if ( editMode && ! $( '#jet-tricks-tooltip-content-' + widgetId )[0] ) { 1000 var template = $( '<div>', { 1001 id: 'jet-tricks-tooltip-content-' + widgetId, 1002 class: 'jet-tooltip-widget__content' 1003 } ); 1004 1005 template.html( settings['tooltipDescription'] ); 1006 $scope.append( template ); 1007 } 1008 1009 tippy( 1010 [ tooltipSelector ], 1011 { 1012 content: $scope.find( '.jet-tooltip-widget__content' )[0].innerHTML, 1013 allowHTML: true, 1014 appendTo: widgetSelector, 1015 arrow: settings['tooltipArrow'] ? true : false, 1016 placement: settings['tooltipPlacement'], 1017 offset: [ settings['xOffset'], settings['yOffset'] ], 1018 animation: settings['tooltipAnimation'], 1019 trigger: settings['tooltipTrigger'], 1020 interactive: true, 1021 zIndex: settings['zIndex'], 1022 maxWidth: 'none', 1023 delay: settings['delay']['size'] ? settings['delay']['size'] : 0, 1024 } 1025 ); 1026 1027 if ( editMode && widgetSelector._tippy ) { 1028 widgetSelector._tippy.show(); 1029 } 1030 1031 }; 1032 }; 1033 1034}( jQuery, window.elementorFrontend ) );
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.