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