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/column', JetTricks.elementorColumn ); 10 elementor.hooks.addAction( 'frontend/element_ready/widget', JetTricks.elementorWidget ); 11 12 var widgets = { 13 'jet-view-more.default' : JetTricks.widgetViewMore, 14 'jet-unfold.default' : JetTricks.widgetUnfold, 15 'jet-hotspots.default' : JetTricks.widgetHotspots 16 }; 17 18 $.each( widgets, function( widget, callback ) { 19 elementor.hooks.addAction( 'frontend/element_ready/' + widget, callback ); 20 }); 21 }, 22 23 elementorSection: function( $scope ) { 24 var $target = $scope, 25 sectionId = $scope.data( 'id' ), 26 editMode = Boolean( elementor.isEditMode() ), 27 settings = {}; 28 29 if ( window.JetTricksSettings && window.JetTricksSettings.elements_data.sections.hasOwnProperty( sectionId ) ) { 30 settings = window.JetTricksSettings.elements_data.sections[ sectionId ]; 31 } 32 33 if ( editMode ) { 34 settings = JetTricks.sectionEditorSettings( sectionId ); 35 } 36 37 if ( ! settings ) { 38 return false; 39 } 40 41 if ( jQuery.isEmptyObject( settings ) ) { 42 return false; 43 } 44 45 if ( 'false' === settings.particles || '' === settings.particles_json ) { 46 return false; 47 } 48 49 var particlesId = 'jet-tricks-particles-instance-' + sectionId, 50 particlesJson = JSON.parse( settings.particles_json ); 51 52 $scope.prepend( '<div id="' + particlesId + '" class="jet-tricks-particles-section__instance"></div>' ); 53 54 particlesJS( particlesId, particlesJson ); 55 56 }, 57 58 elementorColumn: function( $scope ) { 59 var $target = $scope, 60 $window = $( window ), 61 columnId = $target.data( 'id' ), 62 editMode = Boolean( elementor.isEditMode() ), 63 settings = {}, 64 stickyInstance = null, 65 stickyInstanceOptions = { 66 topSpacing: 50, 67 bottomSpacing: 50, 68 containerSelector: '.elementor-row', 69 innerWrapperSelector: '.elementor-column-wrap', 70 }; 71 72 if ( ! editMode ) { 73 settings = $target.data( 'settings' ); 74 75 if ( $target.hasClass( 'jet-sticky-column' ) ) { 76 77 if ( -1 !== settings['stickyOn'].indexOf( elementorFrontend.getCurrentDeviceMode() ) ) { 78 79 stickyInstanceOptions.topSpacing = settings['topSpacing']; 80 stickyInstanceOptions.bottomSpacing = settings['bottomSpacing']; 81 82 $target.data( 'stickyColumnInit', true ); 83 stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions ); 84 85 $window.on( 'resize.JetTricksStickyColumn orientationchange.JetTricksStickyColumn', JetTricksTools.debounce( 50, resizeDebounce ) ); 86 } 87 } 88 } else { 89 settings = JetTricks.columnEditorSettings( columnId ); 90 91 if ( 'true' === settings['sticky'] ) { 92 $target.addClass( 'jet-sticky-column' ); 93 94 if ( -1 !== settings['stickyOn'].indexOf( elementorFrontend.getCurrentDeviceMode() ) ) { 95 stickyInstanceOptions.topSpacing = settings['topSpacing']; 96 stickyInstanceOptions.bottomSpacing = settings['bottomSpacing']; 97 98 $target.data( 'stickyColumnInit', true ); 99 stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions ); 100 101 $window.on( 'resize.JetTricksStickyColumn orientationchange.JetTricksStickyColumn', JetTricksTools.debounce( 50, resizeDebounce ) ); 102 } 103 } 104 } 105 106 function resizeDebounce() { 107 var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(), 108 availableDevices = settings['stickyOn'] || [], 109 isInit = $target.data( 'stickyColumnInit' ); 110 111 if ( -1 !== availableDevices.indexOf( currentDeviceMode ) ) { 112 113 if ( ! isInit ) { 114 $target.data( 'stickyColumnInit', true ); 115 stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions ); 116 stickyInstance.updateSticky(); 117 } 118 } else { 119 $target.data( 'stickyColumnInit', false ); 120 stickyInstance.destroy(); 121 } 122 } 123 124 }, 125 126 elementorWidget: function( $scope ) { 127 var parallaxInstance = null, 128 satelliteInstance = null, 129 tooltipInstance = null; 130 131 parallaxInstance = new jetWidgetParallax( $scope ); 132 parallaxInstance.init(); 133 134 satelliteInstance = new jetWidgetSatellite( $scope ); 135 satelliteInstance.init(); 136 137 tooltipInstance = new jetWidgetTooltip( $scope ); 138 tooltipInstance.init(); 139 140 }, 141 142 widgetViewMore: function( $scope ) { 143 var $target = $scope.find( '.jet-view-more' ), 144 instance = null, 145 settings = $target.data( 'settings' ); 146 147 instance = new jetViewMore( $target, settings ); 148 instance.init(); 149 }, 150 151 widgetUnfold: function( $scope ) { 152 var $target = $scope.find( '.jet-unfold' ), 153 $body = $( 'body' ), 154 $button = $( '.jet-unfold__button', $target ), 155 $mask = $( '.jet-unfold__mask', $target ), 156 $content = $( '.jet-unfold__content', $target ), 157 settings = $target.data( 'settings' ), 158 maskHeight = +settings['height']['size'] || 100, 159 maskTabletHeight = +settings['heightTablet']['size'] || maskHeight, 160 maskMobileHeight = +settings['heightMobile']['size'] || maskHeight, 161 separatorHeight = +settings['separatorHeight']['size'] || 20, 162 unfoldDuration = settings['unfoldDuration'], 163 foldDuration = settings['unfoldDuration'], 164 unfoldEasing = settings['unfoldEasing'], 165 foldEasing = settings['foldEasing']; 166 167 if ( ! $target.hasClass( 'jet-unfold-state' ) ) { 168 $mask.css( { 169 'height': maskHeight 170 } ); 171 } 172 173 $button.on( 'click.jetUnfold', function() { 174 var $this = $( this ), 175 $buttonText = $( '.jet-unfold__button-text', $this ), 176 unfoldText = $this.data( 'unfold-text' ), 177 foldText = $this.data( 'fold-text' ), 178 $buttonIcon = $( '.jet-unfold__button-icon', $this ), 179 unfoldIcon = $this.data( 'unfold-icon' ), 180 foldIcon = $this.data( 'fold-icon' ), 181 contentHeight = $content.outerHeight(), 182 deviceHeight = getDeviceHeight(); 183 184 if ( ! $target.hasClass( 'jet-unfold-state' ) ) { 185 $target.addClass( 'jet-unfold-state' ); 186 187 $buttonIcon.html( '<i class="' + foldIcon + '"></i>' ); 188 $buttonText.html( foldText ); 189 190 anime( { 191 targets: $mask[0], 192 height: contentHeight, 193 duration: unfoldDuration['size'], 194 easing: unfoldEasing 195 } ); 196 } else { 197 $target.removeClass( 'jet-unfold-state' ); 198 199 $buttonIcon.html( '<i class="' + unfoldIcon + '"></i>' ); 200 $buttonText.html( unfoldText ); 201 202 anime( { 203 targets: $mask[0], 204 height: deviceHeight, 205 duration: foldDuration['size'], 206 easing: foldEasing 207 } ); 208 } 209 } ); 210 211 $( window ).on( 'resize.jetWidgetUnfold orientationchange.jetWidgetUnfold', JetTricksTools.debounce( 50, function(){ 212 213 var deviceHeight = getDeviceHeight(), 214 contentHeight = $content.outerHeight(); 215 216 if ( ! $target.hasClass( 'jet-unfold-state' ) ) { 217 $mask.css( { 218 'height': deviceHeight 219 } ); 220 } else { 221 $mask.css( { 222 'height': contentHeight 223 } ); 224 } 225 226 } ) ); 227 228 function getDeviceHeight() { 229 var $deviceMode = elementor.getCurrentDeviceMode(), 230 deviceHeight = maskHeight; 231 232 switch ( $deviceMode ) { 233 case 'desktop': 234 deviceHeight = maskHeight; 235 break; 236 237 case 'tablet': 238 deviceHeight = maskTabletHeight; 239 break; 240 241 case 'mobile': 242 deviceHeight = maskMobileHeight; 243 break; 244 } 245 246 return deviceHeight; 247 } 248 }, 249 250 widgetHotspots: function( $scope ) { 251 var $target = $scope.find( '.jet-hotspots' ), 252 $hotspots = $( '.jet-hotspots__item', $target), 253 settings = $target.data( 'settings' ), 254 editMode = Boolean( elementor.isEditMode() ); 255 256 $target.imagesLoaded().progress( function() { 257 $target.addClass( 'image-loaded' ); 258 } ); 259 260 $hotspots.each( function( index ) { 261 var $this = $( this ), 262 horizontal = $this.data( 'horizontal-position' ), 263 vertical = $this.data( 'vertical-position' ), 264 itemSelector = $this[0]; 265 266 $this.css( { 267 'left': horizontal + '%', 268 'top': vertical + '%' 269 } ); 270 271 if ( itemSelector._tippy ) { 272 itemSelector._tippy.destroy(); 273 } 274 275 tippy( [ itemSelector ], { 276 arrow: settings['tooltipArrow'], 277 arrowType: settings['tooltipArrowType'], 278 arrowTransform: settings['tooltipArrowSize'], 279 duration: [ settings['tooltipShowDuration']['size'], settings['tooltipHideDuration']['size'] ], 280 distance: settings['tooltipDistance']['size'], 281 placement: settings['tooltipPlacement'], 282 trigger: settings['tooltipTrigger'], 283 animation: settings['tooltipAnimation'], 284 flipBehavior: 'clockwise', 285 appendTo: itemSelector, 286 hideOnClick: 'manual' !== settings['tooltipTrigger'], 287 } ); 288 289 if ( 'manual' === settings['tooltipTrigger'] && itemSelector._tippy ) { 290 itemSelector._tippy.show(); 291 } 292 293 if ( settings['tooltipShowOnInit'] && itemSelector._tippy ) { 294 itemSelector._tippy.show(); 295 } 296 297 if ( editMode && itemSelector._tippy ) { 298 itemSelector._tippy.show(); 299 } 300 301 } ); 302 }, 303 304 columnEditorSettings: function( columnId ) { 305 var editorElements = null, 306 columnData = {}; 307 308 if ( ! window.elementor.hasOwnProperty( 'elements' ) ) { 309 return false;
310 } 311 312 editorElements = window.elementor.elements; 313 314 if ( ! editorElements.models ) { 315 return false; 316 } 317 318 $.each( editorElements.models, function( index, obj ) { 319 320 $.each( obj.attributes.elements.models, function( index, obj ) { 321 if ( columnId == obj.id ) { 322 columnData = obj.attributes.settings.attributes; 323 } 324 } ); 325 326 } ); 327 328 return { 329 'sticky': columnData['jet_tricks_column_sticky'] || false, 330 'topSpacing': columnData['jet_tricks_top_spacing'] || 50, 331 'bottomSpacing': columnData['jet_tricks_bottom_spacing'] || 50, 332 'stickyOn': columnData['jet_tricks_column_sticky_on'] || [ 'desktop', 'tablet', 'mobile'] 333 } 334 335 }, 336 337 sectionEditorSettings: function( sectionId ) { 338 var editorElements = null, 339 sectionData = {}; 340 341 if ( ! window.elementor.hasOwnProperty( 'elements' ) ) { 342 return false; 343 } 344 345 editorElements = window.elementor.elements; 346 347 if ( ! editorElements.models ) { 348 return false; 349 } 350 351 $.each( editorElements.models, function( index, obj ) { 352 if ( sectionId == obj.id ) { 353 sectionData = obj.attributes.settings.attributes; 354 } 355 } ); 356 357 return { 358 'particles': sectionData['section_jet_tricks_particles'] || 'false', 359 'particles_json': sectionData['section_jet_tricks_particles_json'] || '', 360 } 361 362 } 363 364 }; 365 366 $( window ).on( 'elementor/frontend/init', JetTricks.init ); 367 368 var JetTricksTools = { 369 debounce: function( threshold, callback ) { 370 var timeout; 371 372 return function debounced( $event ) { 373 function delayed() { 374 callback.call( this, $event ); 375 timeout = null; 376 } 377 378 if ( timeout ) { 379 clearTimeout( timeout ); 380 } 381 382 timeout = setTimeout( delayed, threshold ); 383 }; 384 }, 385 386 widgetEditorSettings: function( widgetId ) { 387 var editorElements = null, 388 widgetData = {}; 389 390 if ( ! window.elementor.hasOwnProperty( 'elements' ) ) { 391 return false; 392 } 393 394 editorElements = window.elementor.elements; 395 396 if ( ! editorElements.models ) { 397 return false; 398 } 399 400 $.each( editorElements.models, function( index, obj ) { 401 402 $.each( obj.attributes.elements.models, function( index, obj ) { 403 404 $.each( obj.attributes.elements.models, function( index, obj ) { 405 if ( widgetId == obj.id ) { 406 widgetData = obj.attributes.settings.attributes; 407 } 408 } ); 409 410 } ); 411 412 } ); 413 414 return { 415 'speed': widgetData['jet_tricks_widget_parallax_speed'] || { 'size': 50, 'unit': '%'}, 416 'parallax': widgetData['jet_tricks_widget_parallax'] || 'false', 417 'invert': widgetData['jet_tricks_widget_parallax_invert'] || 'false', 418 'stickyOn': widgetData['jet_tricks_widget_parallax_on'] || [ 'desktop', 'tablet', 'mobile'], 419 'satellite': widgetData['jet_tricks_widget_satellite'] || 'false', 420 'satelliteType': widgetData['jet_tricks_widget_satellite_type'] || 'text', 421 'satellitePosition': widgetData['jet_tricks_widget_satellite_position'] || 'top-center', 422 'tooltip': widgetData['jet_tricks_widget_tooltip'] || 'false', 423 'tooltipDescription': widgetData['jet_tricks_widget_tooltip_description'] || 'Lorem Ipsum', 424 'tooltipPlacement': widgetData['jet_tricks_widget_tooltip_placement'] || 'top', 425 'xOffset': widgetData['jet_tricks_widget_tooltip_x_offset'] || 0, 426 'yOffset': widgetData['jet_tricks_widget_tooltip_y_offset'] || 0, 427 'tooltipAnimation': widgetData['jet_tricks_widget_tooltip_animation'] || 'shift-toward', 428 'zIndex': widgetData['jet_tricks_widget_tooltip_z_index'] || '999' 429 } 430 } 431 } 432 433 /** 434 * Jet jetViewMore Class 435 * 436 * @return {void} 437 */ 438 window.jetViewMore = function( $selector, settings ) { 439 var self = this, 440 $window = $( window ), 441 $button = $( '.jet-view-more__button', $selector ), 442 defaultSettings = { 443 sections: {}, 444 effect: 'move-up', 445 showall: false 446 }, 447 settings = $.extend( {}, defaultSettings, settings ), 448 sections = settings['sections'], 449 sectionsData = {}, 450 buttonVisible = true, 451 editMode = Boolean( elementor.isEditMode() ); 452 453 /** 454 * Init 455 */ 456 self.init = function() { 457 self.setSectionsData(); 458 459 if ( editMode ) { 460 return false;
461 } 462 463 // Add Events 464 $button.on( 'click', function() { 465 466 for ( var section in sectionsData ) { 467 var $section = sectionsData[ section ]['selector']; 468 469 if ( ! settings.showall ) { 470 if ( ! sectionsData[ section ]['visible'] ) { 471 sectionsData[ section ]['visible'] = true; 472 $section.addClass( 'view-more-visible' ); 473 $section.addClass( 'jet-tricks-' + settings['effect'] + '-effect' ); 474 475 break; 476 } 477 } else { 478 sectionsData[ section ]['visible'] = true; 479 $section.addClass( 'view-more-visible' ); 480 $section.addClass( 'jet-tricks-' + settings['effect'] + '-effect' ); 481 } 482 483 } 484 485 for ( var section in sectionsData ) { 486 buttonVisible = true; 487 488 if ( sectionsData[ section ]['visible'] ) { 489 buttonVisible = false; 490 } 491 } 492 493 if ( ! buttonVisible ) { 494 $button.css( { 'display': 'none' } ); 495 } 496 497 } ); 498 }; 499 500 self.setSectionsData = function() { 501 502 for ( var section in sections ) { 503 var $selector = $( '#' + sections[ section ] ); 504 505 if ( ! editMode ) { 506 $selector.addClass( 'jet-view-more-section' ); 507 } else { 508 $selector.addClass( 'jet-view-more-section-edit-mode' ); 509 } 510 511 sectionsData[ section ] = { 512 'section_id': sections[ section ], 513 'selector': $selector, 514 'visible': false, 515 } 516 } 517 }; 518 }; 519 520 /** 521 * [jetWidgetParallax description] 522 * @param {[type]} $scope [description] 523 * @return {[type]} [description] 524 */ 525 window.jetWidgetParallax = function( $scope ) { 526 var self = this, 527 $target = $( '> .elementor-widget-container', $scope ), 528 $section = $scope.closest( '.elementor-top-section' ), 529 widgetId = $scope.data('id'), 530 settings = {}, 531 editMode = Boolean( elementor.isEditMode() ), 532 $window = $( window ), 533 isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/), 534 platform = navigator.platform, 535 safariClass = isSafari ? 'is-safari' : '', 536 macClass = 'MacIntel' == platform ? ' is-mac' : ''; 537 538 /** 539 * Init 540 */ 541 self.init = function() { 542 543 $scope.addClass( macClass ); 544 545 if ( ! editMode ) { 546 settings = $scope.data( 'jet-tricks-settings' ); 547 } else { 548 settings = JetTricksTools.widgetEditorSettings( widgetId ); 549 } 550 551 if ( ! settings ) { 552 return false; 553 } 554 555 if ( 'undefined' === typeof settings ) { 556 return false; 557 } 558 559 if ( 'false' === settings['parallax'] || 'undefined' === typeof settings['parallax'] ) { 560 return false; 561 } 562 563 $window.on( 'scroll.jetWidgetParallax resize.jetWidgetParallax', self.scrollHandler ).trigger( 'resize.jetWidgetParallax' ); 564 }; 565 566 self.scrollHandler = function( event ) { 567 var speed = +settings['speed']['size'] * 0.01, 568 invert = 'true' == settings['invert'] ? -1 : 1, 569 winHeight = $window.height(), 570 winScrollTop = $window.scrollTop(), 571 offsetTop = $scope.offset().top, 572 thisHeight = $scope.outerHeight(), 573 sectionHeight = $section.outerHeight(), 574 positionDelta = winScrollTop - offsetTop + ( winHeight / 2 ), 575 abs = positionDelta > 0 ? 1 : -1, 576 posY = abs * Math.pow( Math.abs( positionDelta ), 0.85 ), 577 availableDevices = settings['stickyOn'] || [], 578 currentDeviceMode = elementorFrontend.getCurrentDeviceMode(); 579 580 posY = invert * Math.ceil( speed * posY ); 581 582 if ( -1 !== availableDevices.indexOf( currentDeviceMode ) ) { 583 $target.css( { 584 'transform': 'translateY(' + posY + 'px)' 585 } ); 586 } else { 587 $target.css( { 588 'transform': 'translateY(0)' 589 } ); 590 } 591 }; 592 }; 593 594 /** 595 * [jetWidgetSatellite description] 596 * @param {[type]} $scope [description] 597 * @return {[type]} [description] 598 */ 599 window.jetWidgetSatellite = function( $scope ) { 600 var self = this, 601 widgetId = $scope.data('id'), 602 settings = {}, 603 editMode = Boolean( elementor.isEditMode() ); 604 605 /** 606 * Init 607 */ 608 self.init = function() { 609 610 if ( ! editMode ) { 611 settings = $scope.data( 'jet-tricks-settings' ); 612 } else { 613 settings = JetTricksTools.widgetEditorSettings( widgetId ); 614 } 615 616 if ( ! settings ) { 617 return false;
618 } 619 620 if ( 'undefined' === typeof settings ) { 621 return false; 622 } 623 624 if ( 'false' === settings['satellite'] || 'undefined' === typeof settings['satellite'] ) { 625 return false; 626 } 627 628 $scope.addClass( 'jet-satellite-widget' ); 629 630 $( '.jet-tricks-satellite', $scope ).addClass( 'jet-tricks-satellite--' + settings['satellitePosition'] ); 631 }; 632 }; 633 634 /** 635 * [jetWidgetTooltip description] 636 * @param {[type]} $scope [description] 637 * @return {[type]} [description] 638 */ 639 window.jetWidgetTooltip = function( $scope ) { 640 var self = this, 641 widgetId = $scope.data('id'), 642 widgetSelector = $scope[0], 643 settings = {}, 644 editMode = Boolean( elementor.isEditMode() ), 645 tooltipEvent = editMode ? 'click' : 'mouseenter'; 646 647 /** 648 * Init 649 */ 650 self.init = function() { 651 652 if ( ! editMode ) { 653 settings = $scope.data( 'jet-tricks-settings' ); 654 } else { 655 settings = JetTricksTools.widgetEditorSettings( widgetId ); 656 } 657 658 if ( ! settings ) { 659 return false; 660 } 661 662 if ( 'undefined' === typeof settings ) { 663 return false; 664 } 665 666 if ( 'false' === settings['tooltip'] || 'undefined' === typeof settings['tooltip'] || '' === settings['tooltipDescription'] ) { 667 return false; 668 } 669 670 $scope.addClass( 'jet-tooltip-widget' ); 671 672 if ( widgetSelector._tippy ) { 673 widgetSelector._tippy.destroy(); 674 } 675 676 var tippyInstance = tippy( 677 [ widgetSelector ], 678 { 679 html: document.querySelector( '#jet-tricks-tooltip-content-' + widgetId ), 680 appendTo: widgetSelector, 681 arrow: true, 682 placement: settings['tooltipPlacement'], 683 flipBehavior: 'clockwise', 684 trigger: tooltipEvent, 685 offset: settings['xOffset'] + ', ' + settings['yOffset'], 686 animation: settings['tooltipAnimation'], 687 zIndex: settings['zIndex'] 688 } 689 ); 690 691 if ( editMode && widgetSelector._tippy ) { 692 widgetSelector._tippy.show(); 693 } 694 695 }; 696 }; 697 698}( 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.