1( function( $, elementor ) {� 2� 3 'use strict';� 4� 5 var JetSticky = {� 6� 7 init: function() {� 8 elementor.hooks.addAction( 'frontend/element_ready/column', JetSticky.elementorColumn );� 9 elementor.hooks.addAction( 'frontend/element_ready/container', JetSticky.elementorColumn );� 10� 11 elementorFrontend.hooks.addAction( 'frontend/element_ready/section', JetSticky.setStickySection );� 12 elementorFrontend.hooks.addAction( 'frontend/element_ready/container', JetSticky.setStickySection );� 13� 14 $( JetSticky.stickySection );� 15 },� 16� 17 elementorColumn: function( $scope ) {� 18 var $target = $scope,� 19 $window = $( window ),� 20 columnId = $target.data( 'id' ),� 21 editMode = Boolean( elementor.isEditMode() ),� 22 settings = {},� 23 stickyInstance = null,� 24 stickyInstanceOptions = {� 25 topSpacing: 50,� 26 bottomSpacing: 50,� 27 containerSelector: '.elementor-section',� 28 innerWrapperSelector: '.elementor-widget-wrap',� 29 };� 30� 31 if ( ! editMode ) {� 32 settings = $target.data( 'jet-sticky-column-settings' );� 33� 34 if ( $target.hasClass( 'jet-sticky-column-sticky' ) ) {� 35� 36 if ( -1 !== settings['stickyOn'].indexOf( elementorFrontend.getCurrentDeviceMode() ) ) {� 37� 38 $target.each( function() {� 39� 40 var $this = $( this ),� 41� 42 elementType = $this.data( 'element_type' );� 43� 44 if ( elementType !== 'container' ){� 45 � 46 stickyInstanceOptions.topSpacing = settings['topSpacing'];� 47 stickyInstanceOptions.bottomSpacing = settings['bottomSpacing'];� 48� 49 $target.data( 'stickyColumnInit', true );� 50 stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions );� 51� 52 $window.on( 'resize.JetStickyColumnSticky orientationchange.JetStickyColumnSticky', JetStickyTools.debounce( 50, resizeDebounce ) );� 53 � 54 } else {� 55 $this.addClass( 'jet-sticky-container-sticky' );� 56 $this.css({ � 57 'top': settings['topSpacing'], � 58 'bottom': settings['bottomSpacing']� 59 });� 60 }� 61 });� 62 }� 63 }� 64� 65 } else {� 66 return false;� 67 }� 68� 69 function resizeDebounce() {� 70 var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(),� 71 availableDevices = settings['stickyOn'] || [],� 72 isInit = $target.data( 'stickyColumnInit' );� 73� 74 if ( -1 !== availableDevices.indexOf( currentDeviceMode ) ) {� 75� 76 if ( ! isInit ) {� 77 $target.data( 'stickyColumnInit', true );� 78 stickyInstance = new StickySidebar( $target[0], stickyInstanceOptions );� 79 stickyInstance.updateSticky();� 80 }� 81 } else {� 82 $target.data( 'stickyColumnInit', false );� 83 stickyInstance.destroy();� 84 }� 85 }� 86� 87 },� 88� 89 columnEditorSettings: function( columnId ) {� 90 var editorElements = null,� 91 columnData = {};� 92� 93 if ( ! window.elementor.hasOwnProperty( 'elements' ) ) {� 94 return false;� 95 }� 96� 97 editorElements = window.elementor.elements;� 98� 99 if ( ! editorElements.models ) {� 100 return false;� 101 }� 102� 103 $.each( editorElements.models, function( index, obj ) {� 104� 105 $.each( obj.attributes.elements.models, function( index, obj ) {� 106 if ( columnId == obj.id ) {� 107 columnData = obj.attributes.settings.attributes;� 108 }� 109 } );� 110� 111 } );� 112� 113 return {� 114 'sticky': columnData['jet_sticky_column_sticky_enable'] || false,� 115 'topSpacing': columnData['jet_sticky_column_sticky_top_spacing'] || 50,� 116 'bottomSpacing': columnData['jet_sticky_column_sticky_bottom_spacing'] || 50,� 117 'stickyOn': columnData['jet_sticky_column_sticky_enable_on'] || [ 'desktop', 'tablet', 'mobile']� 118 }� 119 },� 120� 121 getStickySectionsDesktop: [],� 122 getStickySectionsTablet: [],� 123 getStickySectionsMobile: [],� 124� 125 setStickySection: function( $scope ) {� 126 var setStickySection = {� 127� 128 target: $scope,� 129� 130 isEditMode: Boolean( elementorFrontend.isEditMode() ),� 131� 132 init: function() {� 133 if ( this.isEditMode ) {� 134 return;� 135 }� 136�
137 if ( 'yes' === this.getSectionSetting( 'jet_sticky_section_sticky' ) ) {� 138 var availableDevices = this.getSectionSetting( 'jet_sticky_section_sticky_visibility' ) || [];� 139� 140 if ( ! availableDevices[0] ) {� 141 return;� 142 }� 143� 144 if ( -1 !== availableDevices.indexOf( 'desktop' ) ) {� 145 JetSticky.getStickySectionsDesktop.push( $scope );� 146 }� 147� 148 if ( -1 !== availableDevices.indexOf( 'tablet' ) ) {� 149 JetSticky.getStickySectionsTablet.push( $scope );� 150 }� 151� 152 if ( -1 !== availableDevices.indexOf( 'mobile' ) ) {� 153 JetSticky.getStickySectionsMobile.push( $scope );� 154 }� 155 }� 156 },� 157� 158 getSectionSetting: function( setting ){� 159 var settings = {},� 160 editMode = Boolean( elementorFrontend.isEditMode() );� 161� 162 if ( editMode ) {� 163 if ( ! elementorFrontend.hasOwnProperty( 'config' ) ) {� 164 return;� 165 }� 166� 167 if ( ! elementorFrontend.config.hasOwnProperty( 'elements' ) ) {� 168 return;� 169 }� 170� 171 if ( ! elementorFrontend.config.elements.hasOwnProperty( 'data' ) ) {� 172 return;� 173 }� 174� 175 var modelCID = this.target.data( 'model-cid' ),� 176 editorSectionData = elementorFrontend.config.elements.data[ modelCID ];� 177� 178 if ( ! editorSectionData ) {� 179 return;� 180 }� 181� 182 if ( ! editorSectionData.hasOwnProperty( 'attributes' ) ) {� 183 return;� 184 }� 185� 186 settings = editorSectionData.attributes || {};� 187 } else {� 188 settings = this.target.data( 'settings' ) || {};� 189 }� 190� 191 if ( ! settings[ setting ] ) {� 192 return;� 193 }� 194� 195 return settings[ setting ];� 196 }� 197 };� 198� 199 setStickySection.init();� 200 },� 201� 202 stickySection: function() {� 203 var stickySection = {� 204� 205 isEditMode: Boolean( elementorFrontend.isEditMode() ),� 206� 207 correctionSelector: $( '#wpadminbar' ),� 208� 209 initDesktop: false,� 210 initTablet: false,� 211 initMobile: false,� 212� 213 init: function() {� 214� 215 var _this = this;� 216� 217 if ( this.isEditMode ) {� 218 return;� 219 }� 220� 221 $( document ).ready( function(){� 222 _this.run();� 223 } );� 224� 225 $( window ).on( 'resize.JetStickySection orientationchange.JetStickySection', this.run.bind( this ) );� 226 },� 227� 228 getOffset: function(){� 229 var offset = 0;� 230� 231 if ( this.correctionSelector[0] && 'fixed' === this.correctionSelector.css( 'position' ) ) {� 232 offset = this.correctionSelector.outerHeight( true );� 233 }� 234� 235 return offset;� 236 },� 237� 238 run: function() {� 239 var currentDeviceMode = elementorFrontend.getCurrentDeviceMode(),� 240 transitionIn = 'jet-sticky-transition-in',� 241 transitionOut = 'jet-sticky-transition-out',� 242 options = {� 243 stickyClass: 'jet-sticky-section-sticky--stuck',� 244 topSpacing: this.getOffset()� 245 };� 246� 247 function initSticky ( section, options ) {� 248 section.jetStickySection( options )� 249 .on( 'jetStickySection:stick', function( event ) {� 250 $( event.target ).addClass( transitionIn );� 251 setTimeout( function() {� 252 $( event.target ).removeClass( transitionIn );� 253 }, 3000 );� 254 } )� 255 .on( 'jetStickySection:unstick', function( event ) {� 256 $( event.target ).addClass( transitionOut );� 257 setTimeout( function() {� 258 $( event.target ).removeClass( transitionOut );� 259 }, 3000 );� 260 } );� 261 section.trigger( 'jetStickySection:activated' );� 262 }� 263� 264 if ( 'desktop' === currentDeviceMode && ! this.initDesktop ) {� 265 if ( this.initTablet ) {� 266 JetSticky.getStickySectionsTablet.forEach( function( section, i ) {� 267 section.trigger( 'jetStickySection:detach' );� 268 });� 269� 270 this.initTablet = false;� 271 }� 272� 273 if ( this.initMobile ) {� 274 JetSticky.getStickySectionsMobile.forEach( function( section, i ) {� 275 section.trigger( 'jetStickySection:detach' );� 276 });� 277� 278 this.initMobile = false;� 279 }� 280�
281 if ( JetSticky.getStickySectionsDesktop[0] ) {� 282 JetSticky.getStickySectionsDesktop.forEach( function( section, i ) {� 283� 284 if ( JetSticky.getStickySectionsDesktop[i+1] ) {� 285 options.stopper = JetSticky.getStickySectionsDesktop[i+1];� 286 } else {� 287 options.stopper = '';� 288 }� 289� 290 initSticky( section, options );� 291 });� 292� 293 this.initDesktop = true;� 294 }� 295 }� 296� 297 if ( 'tablet' === currentDeviceMode && ! this.initTablet ) {� 298 if ( this.initDesktop ) {� 299 JetSticky.getStickySectionsDesktop.forEach( function( section, i ) {� 300 section.trigger( 'jetStickySection:detach' );� 301 });� 302� 303 this.initDesktop = false;� 304 }� 305� 306 if ( this.initMobile ) {� 307 JetSticky.getStickySectionsMobile.forEach( function( section, i ) {� 308 section.trigger( 'jetStickySection:detach' );� 309 });� 310� 311 this.initMobile = false;� 312 }� 313� 314 if ( JetSticky.getStickySectionsTablet[0] ) {� 315 JetSticky.getStickySectionsTablet.forEach( function( section, i ) {� 316 if ( JetSticky.getStickySectionsTablet[i+1] ) {� 317 options.stopper = JetSticky.getStickySectionsTablet[i+1];� 318 } else {� 319 options.stopper = '';� 320 }� 321� 322 initSticky( section, options );� 323 });� 324� 325 this.initTablet = true;� 326 }� 327 }� 328� 329 if ( 'mobile' === currentDeviceMode && ! this.initMobile ) {� 330 if ( this.initDesktop ) {� 331 JetSticky.getStickySectionsDesktop.forEach( function( section, i ) {� 332 section.trigger( 'jetStickySection:detach' );� 333 });� 334� 335 this.initDesktop = false;� 336 }� 337� 338 if ( this.initTablet ) {� 339 JetSticky.getStickySectionsTablet.forEach( function( section, i ) {� 340 section.trigger( 'jetStickySection:detach' );� 341 });� 342� 343 this.initTablet = false;� 344 }� 345� 346 if ( JetSticky.getStickySectionsMobile[0] ) {� 347 JetSticky.getStickySectionsMobile.forEach( function( section, i ) {� 348� 349 if ( JetSticky.getStickySectionsMobile[i+1] ) {� 350 options.stopper = JetSticky.getStickySectionsMobile[i+1];� 351 } else {� 352 options.stopper = '';� 353 }� 354� 355 initSticky( section, options );� 356 });� 357� 358 this.initMobile = true;� 359 }� 360 }� 361 }� 362 };� 363� 364 stickySection.init();� 365 }� 366 };� 367� 368 $( window ).on( 'elementor/frontend/init', JetSticky.init );� 369� 370 var JetStickyTools = {� 371 debounce: function( threshold, callback ) {� 372 var timeout;� 373� 374 return function debounced( $event ) {� 375 function delayed() {� 376 callback.call( this, $event );� 377 timeout = null;� 378 }� 379� 380 if ( timeout ) {� 381 clearTimeout( timeout );� 382 }� 383� 384 timeout = setTimeout( delayed, threshold );� 385 };� 386 }� 387 }� 388� 389}( 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.